kubernetes中flannel的學習

宣言:

docker作為容器云的中非常具有代表性的產品,近年來收到非常廣泛的關注,而如何對docker這樣的容器云進行管理也是一件非常頭疼的事情,本文主要通過對k8s集群管理中flannel組件的分析討論,來為大家了解docker集群管理提供一點幫助。

kubernetes 集群中Flannel的使用說明

k8s集群安裝配置etcd的時會為安裝的k8s集群配置一個網段,這個網段是整個集群中容器可以使用的ip地址段,譬如我們在安裝完成etcd的時候執行etcdctl set 設置一個key-value的鍵值對指定這個集群的網段范圍,但是如何確保每個minion節點中容器的ip地址是唯一的,就需要flannel來幫忙了,flannel基于集群的這個網段來為每個minion節點做二次子網的劃分。接下來我們為大家分析flannel和etcd是如何協同搭配完成這一工作的。

在安裝配置k8s集群時候需要為每一個minion節點安裝flannel,我們主要從配置文件入手來分析flannel是怎樣工作來完成對集群子網的二次劃分。

# Flanneld configuration options

# etcd url location.? Point this to the server where etcd runs

FLANNEL_ETCD="http://192.168.163.152:2379"

# etcd config key.? This is the configuration key that flannel queries

# For address range assignment

FLANNEL_ETCD_KEY="/coreos.com/network"

# Any additional options that you want to pass

#FLANNEL_OPTIONS=""

在配置文件中我們看到指定了兩個參數一個是FLANNEL_ETCD這個值指定的是我們安裝etcd服務端的地址和端口,可以通過netstat 命令看下minion端的連接狀態,可以看到minion端與etcd服務端etcd的端口相連接,這個設置是讓minion節點的flannel能夠與服務端的etcd保持通信:

minion端flannel的連接狀態

第二個值FLANNEL_ETCD_KEY是指定的一個key,我們在安裝etcd服務端時執行了一條命令:

etcdctl -C 192.168.163.148:2379 set /coreos.com/network/config '{ "Network": "192.168.0.0/16" }'

這個值很重要,這個key對應的value就是我們每個minion機為docker設置的啟動參數范圍。先看一張圖,這張圖是minion機docker的啟動參數

minion1 docker啟動參數
minion2 docker啟動參數

需要注意的是docker啟動參數中的 --bip=192.168.102.1/24這個參數,flannel的作用就是修改了這個參數相當于為每一臺minion主機的docker劃分了子網。再通過ifconfig查看下可以看到圖:

minion2 的網口信息

多了一個docker的虛擬網卡,所以我們在安裝kubernetes時如果發現我們安裝完docker后docker0網卡的網段不在FLANNEL_ETCD_KEY中那將會導致docker無法啟動,在kubernetes node上執行kubectl get node將會顯示node節點 not ready。

綜上所述:

flannel作為coreos提供給k8s的組件,在運行過程中通過與etcd進行通信獲取整個集群網段信息并進行子網的二次分配,使得每個minion節點都能擁有一個唯一的子網網段,進而確保在整個k8s集群中運行的docker容器都能獲得唯一的ip地址。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容