012.Kubernetes二進制部署worker節點Flannel

一 部署flannel

1.1 安裝flannel


kubernetes 要求集群內各節點(包括 master 節點)能通過 Pod 網段互聯互通。flannel 使用 vxlan 技術為各節點創建一個可以互通的 Pod 網絡,使用的端口為 UDP 8472。




flanneld 第一次啟動時,從 etcd 獲取配置的 Pod 網段信息,為本節點分配一個未使用的地址段,然後創建 flannedl.1 網絡接口(也可能是其它名稱,如 flannel1 等)。




flannel 將分配給自己的 Pod 網段信息寫入 /run/flannel/docker 文件,docker 後續使用這個文件中的環境變量設置 docker0 網橋,從而從這個地址段為本節點的所有 Pod 容器分配 IP。

更多flannel參考:《008.Docker Flannel+Etcd分佈式網絡部署》。

提示:k8smaster01節點已下載相應二進制,可直接分發至node節點。

1.2 分發flannel

  1 [root@k8smaster01 ~]# cd /opt/k8s/work
  2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh
  3 [root@k8smaster01 work]# for node_ip in ${NODE_IPS[@]}
  4   do
  5     echo ">>> ${node_ip}"
  6     scp flannel/{flanneld,mk-docker-opts.sh} root@${node_ip}:/opt/k8s/bin/
  7     ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
  8   done


1.3 創建flannel證書和密鑰


提示:k8smaster01節點已創建flanneld的CA證書請求文件,可直接分發至node節點。

1.4 分發證書和私鑰

  1 [root@k8smaster01 ~]# cd /opt/k8s/work
  2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh
  3 [root@k8smaster01 work]# for node_ip in ${NODE_IPS[@]}
  4   do
  5     echo ">>> ${node_ip}"
  6     ssh root@${node_ip} "mkdir -p /etc/flanneld/cert"
  7     scp flanneld*.pem root@${node_ip}:/etc/flanneld/cert
  8   done


1.5 創建flanneld的systemd


提示:k8smaster01節點已創建創建flanneld的systemd,可直接分發至node節點。

1.6 分發flannel systemd

  1 [root@k8smaster01 ~]# cd /opt/k8s/work
  2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh
  3 [root@k8smaster01 work]# for node_ip in ${NODE_IPS[@]}
  4   do
  5     echo ">>> ${node_ip}"
  6     scp flanneld.service root@${node_ip}:/etc/systemd/system/
  7   done


二 啟動並驗證

2.1 啟動flannel

  1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
  2 [root@k8smaster01 ~]# for node_ip in ${NODE_IPS[@]}
  3   do
  4     echo ">>> ${node_ip}"
  5     ssh root@${node_ip} "systemctl daemon-reload && systemctl enable flanneld && systemctl restart flanneld"
  6   done


2.2 檢查flannel啟動

  1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
  2 [root@k8smaster01 ~]# for node_ip in ${NODE_IPS[@]}
  3   do
  4     echo ">>> ${node_ip}"
  5     ssh root@${node_ip} "systemctl status flanneld|grep Active"
  6   done



2.3 檢查pod網段信息

  1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
  2 [root@k8smaster01 ~]# etcdctl \
  3   --endpoints=${ETCD_ENDPOINTS} \
  4   --ca-file=/etc/kubernetes/cert/ca.pem \
  5   --cert-file=/etc/flanneld/cert/flanneld.pem \
  6   --key-file=/etc/flanneld/cert/flanneld-key.pem \
  7   get ${FLANNEL_ETCD_PREFIX}/config			#查看集群 Pod 網段(/16)



  1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
  2 [root@k8smaster01 ~]# etcdctl \
  3   --endpoints=${ETCD_ENDPOINTS} \
  4   --ca-file=/etc/kubernetes/cert/ca.pem \
  5   --cert-file=/etc/flanneld/cert/flanneld.pem \
  6   --key-file=/etc/flanneld/cert/flanneld-key.pem \
  7   ls ${FLANNEL_ETCD_PREFIX}/subnets			#查看已分配的 Pod 子網段列表(/24)
  8 [root@k8smaster01 ~]# etcdctl \
  9   --endpoints=${ETCD_ENDPOINTS} \
 10   --ca-file=/etc/kubernetes/cert/ca.pem \
 11   --cert-file=/etc/flanneld/cert/flanneld.pem \
 12   --key-file=/etc/flanneld/cert/flanneld-key.pem \
 13   get ${FLANNEL_ETCD_PREFIX}/subnets/172.30.8.0-21	#查看某一 Pod 網段對應的節點 IP 和 flannel 接口地址




解釋:

172.30.8.0/21 被分配給節點 k8snode02 (172.24.8.75);

VtepMAC 為 k8snode02 節點的 flannel.1 網卡 MAC 地址。

2.4 檢查flannel網絡信息

  1 [root@k8snode02 ~]# ip addr show



解釋:flannel.1 網卡的地址為分配的 Pod 子網段的第一個 IP(.0),且是 /32 的地址。

[root@k8smaster01 ~]# ip route show |grep flannel.1

172.30.8.0/21 via 172.30.8.0 dev flannel.1 onlink

172.30.128.0/21 via 172.30.128.0 dev flannel.1 onlink

172.30.208.0/21 via 172.30.208.0 dev flannel.1 onlink

172.30.216.0/21 via 172.30.216.0 dev flannel.1 onlink

解釋:

到其它節點 Pod 網段請求都被轉發到 flannel.1 網卡;

flanneld 根據 etcd 中子網段的信息,如 ${FLANNEL_ETCD_PREFIX}/subnets/172.30.32.0-21 ,來決定進請求發送給哪個節點的互聯 IP。

2.5 驗證各節點flannel


在各節點上部署 flannel 后,檢查是否創建了 flannel 接口(名稱可能為 flannel0、flannel.0、flannel.1 等):

  1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
  2 [root@k8smaster01 ~]# for all_ip in ${ALL_IPS[@]}
  3   do
  4     echo ">>> ${all_ip}"
  5     ssh ${all_ip} "/usr/sbin/ip addr show flannel.1|grep -w inet"
  6   done



輸出:








在各節點上 ping 所有 flannel 接口 IP,確保能通:

  1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
  2 [root@k8smaster01 ~]# for all_ip in ${ALL_IPS[@]}
  3   do
  4     echo ">>> ${all_ip}"
  5     ssh ${all_ip} "ping -c 1 172.30.8.0"
  6     ssh ${all_ip} "ping -c 1 172.30.32.0"
  7     ssh ${all_ip} "ping -c 1 172.30.128.0"
  8     ssh ${all_ip} "ping -c 1 172.30.208.0"
  9     ssh ${all_ip} "ping -c 1 172.30.216.0"
 10   done


本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

※評比南投搬家公司費用收費行情懶人包大公開