二、基於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