1. 程式人生 > >二、基於kubernetes構建Docker叢集環境實戰

二、基於kubernetes構建Docker叢集環境實戰

kubernetes是google公司基於docker所做的一個分散式叢集,有以下主件組成

  etcd: 高可用儲存共享配置和服務發現,作為與minion機器上的flannel配套使用,作用是使每臺 minion上執行的docker擁有不同的ip段,最終目的是使不同minion上正在執行的docker containner都有一個與別的任意一個containner(別的minion上執行的docker containner)不一樣的IP地址。

  flannel: 網路結構支援

  kube-apiserver: 不論通過kubectl還是使用remote api 直接控制,都要經過apiserver

  kube-controller-manager: 對replication controller, endpoints controller, namespace controller, and serviceaccounts controller的迴圈控制,與kube-apiserver互動,保證這些controller工作

  kube-scheduler: Kubernetes scheduler的作用就是根據特定的排程演算法將pod排程到指定的工作節點(minion)上,這一過程也叫繫結(bind)

  kubelet: Kubelet執行在Kubernetes Minion Node上. 它是container agent的邏輯繼任者

  kube-proxy: kube-proxy是kubernetes 裡執行在minion節點上的一個元件, 它起的作用是一個服務代理的角色

 

圖為GIT+Jenkins+Kubernetes+Docker+Etcd+confd+Nginx+Glusterfs架構

如下:

 

環境:

centos7系統機器三臺:

    10.0.0.81: 用來安裝kubernetes master

    10.0.0.82: 用作kubernetes minion (minion1)

    10.0.0.83: 用作kubbernetes minion (minion2)

 

一、關閉系統執行的防火牆及selinux

1。如果系統開啟了防火牆則按如下步驟關閉防火牆(所有機器)

# systemctl stop firewalld # systemctl disable firewalld

2.關閉selinux

#setenforce 0

#sed -i '/^SELINUX=/cSELINUX=disabled' /etc/sysconfig/selinux

  

二、MASTER安裝配置

如果機器上已有docker服務,因為版本問題,安裝可能會報錯

解決方法:解除安裝docker-ce

1、檢視安裝過的docker:yum list installed | grep docker

2、解除安裝docker:yum remove -y docker-ce.x86_64 0:18.03.0.ce-1.el7.centos

3、刪除容器映象:rm -rf /var/lib/docker

再次安裝kubernetes,安裝成功,而且會自動安裝docker
 

 

1. 安裝並配置Kubernetes master(yum 方式)

# yum -y install etcd kubernetes

 配置etcd。確保列出的這些項都配置正確並且沒有被註釋掉,下面的配置都是如此 

#vim /etc/etcd/etcd.conf

  

ETCD_NAME=default

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"

  配置kubernetes

 

vim /etc/kubernetes/apiserver

  

KUBE_API_ADDRESS="--address=0.0.0.0" 

KUBE_API_PORT="--port=8080"

KUBELET_PORT="--kubelet_port=10250"

KUBE_ETCD_SERVERS="--etcd_servers=http://127.0.0.1:2379"

KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"

KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

KUBE_API_ARGS=""

2. 啟動etcd, kube-apiserver, kube-controller-manager and kube-scheduler服務

for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; 
do 
systemctl restart $SERVICES 
systemctl enable $SERVICES 
systemctl status $SERVICES 
done


3.設定etcd網路

 

#etcdctl -C http://10.0.0.81:2379 set /atomic.io/network/config '{"Network":"10.1.0.0/16"}'

 

4. 至此master配置完成,執行kubectl get nodes可以檢視有多少minion在執行,以及其狀態。這裡我們的minion還都沒有開始安裝配置,所以執行之後結果為空

 

# kubectl get nodes 

三、MINION安裝配置(每臺minion機器都按如下安裝配置)

 

1. 環境安裝和配置

# yum -y install flannel kubernetes

配置kubernetes連線的服務端IP

#vim /etc/kubernetes/config

KUBE_MASTER="--master=http://10.0.0.81:8080"

KUBE_ETCD_SERVERS="--etcd_servers=http://10.0.0.81:2379"


  配置kubernetes  ,(請使用每臺minion自己的IP地址比如10.0.0.82:代替下面的$LOCALIP)

 

#vim /etc/kubernetes/kubelet

KUBELET_ADDRESS="--address=0.0.0.0"

KUBELET_PORT="--port=10250"

# change the hostname to this host’s IP address 

KUBELET_HOSTNAME="--hostname_override=$LOCALIP"

KUBELET_API_SERVER="--api_servers=http://10.0.0.81:8080"

KUBELET_ARGS=""

2. 準備啟動服務(如果本來機器上已經執行過docker的請看過來,沒有執行過的請忽略此步驟)

    執行ifconfig,檢視機器的網路配置情況(有docker0)

# ifconfig docker0

Link encap:Ethernet HWaddr 02:42:B2:75:2E:67 inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 UP

BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0

errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

  warning:在執行過docker的機器上可以看到有docker0,這裡在啟動服務之前需要刪掉docker0配置,在命令列執行:

sudo ip link delete docker0

3.配置flannel網路

#vim /etc/sysconfig/flanneld

FLANNEL_ETCD_ENDPOINTS="http://10.0.0.81:2379"

FLANNEL_ETCD_PREFIX="/atomic.io/network"  

PS:其中atomic.io與上面etcd中的Network對應

 

4. 啟動服務

for SERVICES in flanneld kube-proxy kubelet docker; 
do 
systemctl restart $SERVICES 
systemctl enable $SERVICES 
systemctl status $SERVICES 
done

 

四、配置完成驗證安裝

    確定兩臺minion(10.0.0.82和10.0.0.83)和一臺master(10.0.0.81)都已經成功的安裝配置並且服務都已經啟動了。

    切換到master機器上,執行命令kubectl get nodes 

 

# kubectl get nodes
NAME     STATUS    AGE
10.0.0.82 Ready 1m
10.0.0.83 Ready 1m

  可以看到配置的兩臺minion已經在master的node列表中了。如果想要更多的node,只需要按照minion的配置,配置更多的機器就可以了。

 

在master上執行下面,檢查etcd的狀態

[[email protected] ~]# etcdctl  member list
35300bfb5308e02c: name=etcd1 peerURLs=http://192.168.10.147:2380 clientURLs=http://192.168.10.147:2379  isLeader=true