1. 程式人生 > >搭建單節點(一個master和一個minion、k8s叢集)多pod實驗環境

搭建單節點(一個master和一個minion、k8s叢集)多pod實驗環境

一、環境描述

(1)兩個node,一個master和一個minion,其中master節點的ip是192.168.110.151,minion的ip是192.168.110.152

(2)其中151的機器上啟動私有registry,提供k8s叢集所需要的image

(3)master節點上執行kube-apiserver、kube-controller-manager、kube-scheduler和etcd;minion節點上執行kube-

         proxy、kubelet和etcd

(4)其中151機器的hostname是master,152機器的hostname是dockertest4

二、環境搭建

1、etcd環境搭建

(1)master節點操作,將etcd的etcd和etcdctl檔案拷貝到/home/docker/xu/etcd目錄下,然後在該目錄下建立run.sh文件,檔案內容如下:

killall -9 etcd
./etcd \
-name etcd0 \
-data-dir etcd0.etcd \
-initial-advertise-peer-urls http://master:2380 \
-listen-peer-urls http://master:2380 \
-listen-client-urls http://master:2379,http://127.0.0.1:2379 \
-advertise-client-urls http://master:2379 \
-initial-cluster-token etcd-cluster \
-initial-cluster etcd0=http://master:2380,etcd1=http://dockertest4:2380 \
-initial-cluster-state new
(2)minion節點上的操作,將etcd的etcd和etcdctl檔案拷貝到/home/docker/xu/etcd目錄下,然後在該目錄下建立run.sh文件,檔案內容如下:
killall -9 etcd
./etcd \
-name etcd1 \
-data-dir etcd1.etcd \
-initial-advertise-peer-urls http://dockertest4:2380 \
-listen-peer-urls http://dockertest4:2380 \
-listen-client-urls http://dockertest4:2379,http://127.0.0.1:2379 \
-advertise-client-urls http://dockertest4:2379 \
-initial-cluster-token etcd-cluster \
-initial-cluster etcd0=http://master:2380,etcd1=http://dockertest4:2380 \
-initial-cluster-state new

(3)分別執行上述兩個run.sh檔案(執行命令./run.sh

(4)在master節點的/home/docker/xu/etcd目錄下執行./etcdctl member list命令,如果環境搭建成功會看見如下輸出

[email protected]:/home/docker/xu/etcd# ./etcdctl member list
a8393743a0bdfe3: name=etcd1 peerURLs=http://dockertest4:2380 clientURLs=http://dockertest4:2379 isLeader=true
c93427c50eaf2937: name=etcd0 peerURLs=http://master:2380 clientURLs=http://master:2379 isLeader=false

2、k8s環境搭建

(1)將kubernetes\server\bin中的所有檔案分別拷貝到master和minion節點的/home/docker/xu/k8s目錄下

(2)在master節點的/home/docker/xu/k8s目錄下編輯run-apiserver.sh、run-controller-manager.sh和run-scheduler.sh檔案,檔案內容分別如下:

./kube-apiserver --address=0.0.0.0  --insecure-port=8080 --service-cluster-ip-range='192.168.110.0/24' --kubelet_port=10250 --v=0 --logtostderr=true --etcd_servers=http://192.168.110.151:2379 --allow_privileged=false  >> /opt/k8s/kube-apiserver.log 2>&1 &

./kube-controller-manager  --v=0 --logtostderr=false --log_dir=/opt/k8s/kube --master=192.168.110.151:8080 >> /opt/k8s/kube-controller-manager.log 2>&1 &
./kube-scheduler  --master='192.168.110.151:8080' --v=0  --log_dir=/opt/k8s/kube  >> /opt/k8s/kube-scheduler.log 2>&1 &

注意:需要在/opt目錄下建立k8s資料夾,並在k8s資料夾中建立相應的日誌檔案

需要給上述三個檔案賦予可執行許可權:chmod +x 檔名

(3)在master節點的/home/docker/xu/k8s目錄下編輯run-proxy.sh、run-let.sh檔案,檔案內容分別如下:

./kube-proxy  --logtostderr=true --v=0 --master=http://192.168.110.151:8080 --hostname_override=192.168.110.152   >> /opt/k8s/kube-proxy.log

./kubelet  --logtostderr=true --v=0 --allow-privileged=false  --log_dir=/opt/k8s/logs/kube  --address=0.0.0.0  --port=10250  --hostname_override=192.168.110.152  --api_servers=http://192.168.110.151:8080   >> /opt/k8s/kube-kubelet.log

注意:需要在/opt目錄下建立k8s資料夾,並在k8s資料夾中建立相應的日誌檔案

需要給上述三個檔案賦予可執行許可權:chmod +x 檔名

(4)在master的/home/docker/xu/k8s執行如下命令:

./run-apiserver.sh

./run-controller-manager.sh

./run-scheduler.sh

(5)在minion節點的/home/docker/xu/k8s執行如下命令

./run-proxy.sh

./run-let.sh

(6)在master節點的/home/docker/xu/k8s執行如下命令,如果有下面的輸出,說明叢集搭建成功:

[email protected]:/home/docker/xu/kubernetes/server/bin# kubectl get nodes
NAME              STATUS    AGE
192.168.110.152   Ready     1d

[email protected]:/home/docker/xu/kubernetes/server/bin# kubectl get cs
NAME                 STATUS    MESSAGE              ERROR
controller-manager   Healthy   ok                   
scheduler            Healthy   ok                   
etcd-0               Healthy   {"health": "true"}  

[email protected]:/home/docker/xu/kubernetes/server/bin# kubectl cluster-info
Kubernetes master is running at http://localhost:8080

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

3、實驗環境搭建

(1)實驗描述

試驗中會會建立兩個pod,其中一個pod回去連線另一個pod進行通訊

(2)在master節點的/home/docker/xu/test目錄下建立mysql.yaml、tomcat.yaml,檔案內容分別如下:

apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
    - port: 3306
  selector:
    app: mysql_pod
---
apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: mysql_pod
    spec:
      containers:
        - name: mysql
          image: 192.168.110.151:5000/mysql
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 3306
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: "123456"
apiVersion: v1
kind: Service
metadata:
  name: hpe-java-web
spec:
  type: NodePort
  ports:
    - port: 8080
      nodePort: 31002
  selector:
    app: hpe_java_web_pod
---
apiVersion: v1
kind: ReplicationController
metadata:
  name: hpe-java-web-deployement
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: hpe_java_web_pod
    spec:
      containers:
        - name: myweb
          image: 192.168.110.151:5000/tomact8
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080

(3)建立tomcat映象

Dockerfile檔案內容如下

FROM tomcat
MAINTAINER xuguokun <[email protected]>
ADD K8S.war /usr/local/tomcat/webapps/

其中K8S.war是個javaweb工程。其實很簡單就是一個jsp檔案,jsp檔案內容如下
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.sql.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1" align="center">
    <tr>
      <td>卡號</td>
    </tr>
    <%
    
    String driverClass="com.mysql.jdbc.Driver";
    
    String ip=System.getenv("MYSQL_SERVICE_HOST");
    String port=System.getenv("MYSQL_SERVICE_PORT");
    
    System.out.println(port+"asasdfasdfasdfasdfasd");
    
    //String ip = "localhost";
    //String port = "3306";
	   
    Connection conn;
    try{
    Class.forName(driverClass);
    conn = java.sql.DriverManager.getConnection("jdbc:mysql://"+ip+":"+port+"/bms", "root","123456"); 
    Statement stmt=conn.createStatement();
    String sql="select * from bms_appuser";
    ResultSet rs=stmt.executeQuery(sql);
    while(rs.next()){
    %>
    <tr>
    <td><%=rs.getString(3) %></td>
    </tr>
    <% 
    }
    }
    catch(Exception ex){
    ex.printStackTrace();
    }
    %>
</table>
</body>
</html>

建立tomcat映象的命令(在Dockerfile和K8S.war所在的目錄執行)

docker build -t 192.168.110.151:5000/tomcat8

(4)建立pod,在test目錄下執行如下命令

kubectl create -f mysql.yaml和kubectl create -f tomcat.yaml

(5)然後在master節點的test目錄下執行如下命令,並得到相應的輸出,說明環境搭建成功
[email protected]:/home/docker/xu/test# kubectl get pods
NAME                             READY     STATUS    RESTARTS   AGE
hpe-java-web-deployement-w8kts   1/1       Running   0          12h
mysql-deployment-ovz6y           1/1       Running   0          12h


[email protected]:/home/docker/xu/test# kubectl get service
NAME           CLUSTER-IP        EXTERNAL-IP   PORT(S)    AGE
hpe-java-web   192.168.110.101   <nodes>       8080/TCP   12h
kubernetes     192.168.110.1     <none>        443/TCP    1d
mysql          192.168.110.158   <none>        3306/TCP   12h

[email protected]:/home/docker/xu/test# kubectl exec hpe-java-web-deployement-w8kts -- printenv | grep SERVICE
MYSQL_SERVICE_HOST=192.168.110.158
KUBERNETES_SERVICE_PORT_HTTPS=443
HPE_JAVA_WEB_SERVICE_PORT=8080
MYSQL_SERVICE_PORT=3306
HPE_JAVA_WEB_SERVICE_HOST=192.168.110.101
KUBERNETES_SERVICE_HOST=192.168.110.1
KUBERNETES_SERVICE_PORT=443

(6)資料表建立,通過docker exec進入mysql容器,然後建立bms資料庫,並在bms中建立表bms_appuser。bms_appuser中有三個欄位,分別是id name和value

(7)然後在152的節點的瀏覽器中訪問http://192.168.110.101:8080/K8S/index.jsp

頁面顯示內容如下:

卡號
00901016
0090051F
00900E33

4、實驗結束

相關推薦

搭建節點一個master一個minionk8s叢集pod實驗環境

一、環境描述 (1)兩個node,一個master和一個minion,其中master節點的ip是192.168.110.151,minion的ip是192.168.110.152 (2)其中151的機器上啟動私有registry,提供k8s叢集所需要的image (3)m

一篇預定未達標的Chat沉迷機器人作業系統ROS一個理由四種修仙祕籍

這是第一次寫Chat,未達標也是情理之中的事兒,自己還需多多努力才行! 定價1.98元,人數設定100,即便達標,其實也毫無收益啊,在此非常感謝GitChat的推廣和CSDN的信任。 這篇Chat初稿寫了半年,是我三年機器人教學的總結,也許如我這般卑微之人,總結似乎毫無意

在程式設計競賽中,有6個評委為參賽選手打分,分數為0-100的整數分。 選手的最後得分為:去掉一個最高分一個最低分的4個評委平均值 * 請寫程式碼實現不考慮小數部分

import java.util.Scanner; /* * 需求:在程式設計競賽中,有6個評委為參賽選手打分,分數為0-100的整數分。 * 選手的最後得分為:去掉一個最高分和一個最低分的4個評委平均值 * 請寫程式碼實現(不考慮小數部分) * *

linux節點配置flume1.5(剩下一個問題,會的請留言,感激不盡)

使用版本:hadoop2.7.3  jdk:1.7  flume:1.5 前提:hadoop已經啟動起來。jdk已經安裝好,並且配置了環境變數,此flume輪詢的資料夾是/itcast/logs資料夾,要提前建立。 下載flume1.5到你的系統中,解壓到你指定的目錄下。

刪除所有svn檔案一個目錄其各級子目錄下的 兩種方法

[1]用find命令和其action來實現[2]用rm直接實現$ cd /tmp/xxx$ rm -rf  `find . -name .svn`就可以實現了。刪除SVN目錄及從伺服器端刪除SVN版本庫檔案方法詳解 在學習SVN的過程中,你可能會遇到這樣的問題,如何刪除SVN目錄?如何從伺服器端徹底刪

給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 如果你最只允許完成一筆交易即買入賣出一支股票,設計一個算法來計算你所能獲取的最大利潤。

pan stat 給定 arr 註意 turn 大於 交易 nbsp 給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 如果你最多只允許完成一筆交易(即買入和賣出一支股票),設計一個算法來計算你所能獲取的最大利潤。 註意你不能在買入股票前賣出股票。 示例 1

myBatis解決同時傳遞一個整數一個Set的問題

程式碼如下: List<Item> getItemByNames(@Param("collection") Set<String> names, @Param("type") Integer type); 注意使用了Param註解 在mapper檔案中 &l

2. 給定一個 query 一個 text,均由小寫字母組成。要求在 text 中找出以同樣的順序連 續出現在 query 中的最長連續字母序列的長度。例如, query 為“acbac”,text

2. 給定一個 query 和一個 text,均由小寫字母組成。要求在 text 中找出以同樣的順序連 續出現在 query 中的最長連續字母序列的長度。例如, query 為“acbac”,text 為 “acaccbabb”,那麼 text 中的“cba”為最長的連續出現

易學筆記-RabbitMQ教程1:一個生產者一個消費者

易學筆記 十年IT經驗個人學習筆記分享: 開發語言:C/C++/JAVA/PYTHON/GO/JSP WEB架構:Servlets/springMVC/springBoot/springClound 容器架構:Docker容器/Docker叢集/Docker與微服務整合/

面試題redis masterslave是怎麼實現資料同步的

Redis的主從同步機制可以確保redis的master和slave之間的資料同步。按照同步內容的多少可以分為全同步和部分同步;按照同步的時機可以分為slave剛啟動時的初始化同步和正常執行過程中的資料修改同步;本文將對這兩種機制的流程進行分析。 全備份過程中,在sla

搭建vsftpd本地使用者虛擬使用者可以同時存在

1關閉iptables,selinux 2安裝vsftpd # yum install vsftpd -y 3建立虛擬使用者檔案 [[email protected] ~] # vim /etc/vsftpd/vusers.txt  one redhat two

寫入一個方法,輸入一個檔名一個字串,統計這個字串在這個檔案中出現的次數。

public class Test1 { /* * * 寫一個方法,輸入一個檔名和一個字串,統計這個字串在這個檔案中出現的次數。 * */ public static void main

一個Stream 一個二進位制流轉換成字串

1. 將一個流轉換成字串 public partial class WebForm2 : System.Web.UI.Page { protected void Pag

在CentOS下,搭建節點以及叢集spark

在網上搜了一些關於Linux下搭建spark環境的一些文章,有的不能用,有的有些老舊,今天,對於在Linux搭建spark環境,做一些筆記 我用的VMWare12和centos7,以及jdk1.7,scala-2.11.6和預編譯的spark-1.5.2-bin-hadoo

給定一個字串一個整數k,對字串開頭算起的每2k個字元的前k個字元進行反轉。 如果還有少於k個字元,則將其全部撤消。 如果小於2k但大於或等於k個字元,則反轉前k個字元,

本題源自leetcode  541 ------------------------------------------------------------- 思路:遍歷字串,跳度為 2 * k.每次反轉前k 個字串。 程式碼: string reverseStr(stri

redis客戶端jedis基於spring搭建節點或者叢集執行緒池連線

基於jedis執行緒池搭建單節點或叢集連線完整程式碼 <dependency>     <groupId>redis.clients</groupId>   <artifactId>jedis</artifactId&g

隨機六位驗證碼(至少包含一個字母一個數字)

console.log(ranSixNumLet()) function ranSixNumLet(){ // 定義裝有數字的陣列 var num = []; // 定義裝有字母的陣列 var letter = []; // 定義裝有數字和字母的陣

qt opengl lesson2 繪製一個三角形一個正方形

在lesson1的基礎上加入一個三角形和一個正方形。 #------------------------------------------------- # # Project created by QtCreator 2017-01-19T20:33:38 # #--

一個矩陣中連續四個數字行,列,正反對角線乘積的最大值。

最近在project Euler題目上,見到一個題覺得不錯,就花時間做了一下。 問題: a=[ [8, 2, 22,97,38,15,0,40,0,75, 4, 5, 7,78, 52, 12, 50, 77, 91, 8], [49 ,49 ,99 ,

php中的引號int型別string型別的轉換

示例程式碼: $a = '10'; var_dump(gettype($a)); settype($a,'int'); var_dump(gettype($a)); 此時輸出結果為:string、i