kebernetes集羣——部署FLANNEL
環境:
兩臺虛擬機:
k8s-master:192.168.3.138
k8s-node1:192.168.3.178
操作系統:redhat-7.3_x86_64
ETCD:3.3.8-linux-amd64
FANNEL:0.10.0-linux-amd64
一、下載FLANNEL至服務器
1、下載二進制包,本例使用的包爲flannel-v0.10.0-linux-amd64.tar.gz
下載地址:https://github.com/coreos/flannel/releases
2、將二進制包解壓至/usr/local/。
目錄結構如下圖。注:flanneld.conf爲後續步驟添加
二、配置FLANNEL及systemd、ETCD
1、在ETCD中添加鍵值
etcdctl mk /k8s/network/config '{"Network":"172.10.0.0/16", "SubnetMin":"172.10.1.0", "SubnetMax":"172.10.254.0", "Backend":{"Type":"vxlan"}}'
說明:此步驟執行條件爲已安裝ETCD,etcdctl可執行文件已拷貝至/usr/bin目錄下。FLANNEL啓動後,會從ETCD讀取此項配置,據此設置flannel網絡。“Network”定義了flannel的網段。“SubnetMin”和“SubnetMax”定義了flannel集羣網絡地址空間中最小和最大的可分配子網網段。“Backend”定義了flannel的網絡模式,默認爲非vxlan,然而vxlan模式較優;如果使用vxlan模式,flannel會使用UDP 8472端口轉發報文,否則,使用UDP 8285端口。
2、創建/usr/local/flannel-v0.10.0-linux-amd64/flanneld.conf文件,文件內容如下:
FLANNELD_ETCD_ENDPOINTS="http://192.168.3.138:2379,http://192.168.3.178:2379"
FLANNELD_ETCD_PREFIX="/k8s/network"
說明:FLANNELD_ETCD_ENDPOINTS爲ETCD集羣的服務地址。FLANNELD_ETCD_PREFIX爲ETCD中設置的flannel的配置信息的key值的前綴,flannel會讀取ETCD中key爲“{FLANNELD_ETCD_PREFIX}/config”對應的值的信息,作爲flannel網絡的配置信息,請參考上一操作步驟進行理解。
3、創建並編輯/usr/lib/systemd/system/flanneld.service文件,服務器k8s-master上的文件內容見下圖:
[Unit]
Description=Flannel Server
After=etcd.service
Before=docker.service
[Service]
Type=notify
EnvironmentFile=/usr/local/flannel-v0.10.0-linux-amd64/flanneld.conf
ExecStart=/usr/local/flannel-v0.10.0-linux-amd64/flanneld
ExecStartPost=/usr/local/flannel-v0.10.0-linux-amd64/mk-docker-opts.sh -d /run/flannel/docker_opts.env -c
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
說明:ExecStartPost爲啓動flannel後執行的命令;這裏表示,系統啓動flannel成功後,會立即執行“/usr/local/flannel-v0.10.0-linux-amd64/mk-docker-opts.sh -d /run/flannel/docker_opts.env -c”這一條命令;這條命令根據flannel的具體配置,生成了“/run/flannel/docker_opts.env”文件;這個文件是給docker使用的,文件只有一行,是docker的啓動參數,將其加入到docker的啓動參數中,docker啓動後,就會使用flannel配置的網段,具體操作請參考下文“五、與docker集成”。
此文件的作用及配置項的含義,請百度“centos7 systemd”相關知識。
4、將FLANNEL設置爲開機啓動
systemctl enable flanneld.service
三、啓動FLANNEL
systemctl start flanneld.service
四、查看FLANNEL
1、執行:systemctl status flanneld.service,查看flannel運行狀態。
2、使用ifconfig命令,查看是否有flannel的網絡配置
五、與docker集成
1、修改“/usr/lib/systemd/system/docker.service”文件,如下圖所示:
說明:我們在docker.service文件中增加了三處地方。“After=flanneld.service”表示docker在flannel之後啓動,以確保docker啓動時存在“/run/flannel/docker_opts.env”文件。“EnvironmentFile=/run/flannel/docker_opts.env”定義了docker的環境變量文件,裏面定義了“DOCKER_OPTS”變量。在“ExecStart”配置項的值的最後增加“ DOCKER_OPTS”指代的值作爲參數。
關於“/run/flannel/docker_opts.env”文件,請參考上文“步驟二.3”的說明。
2、重載docker的systemd配置,重啓docker,執行:
systemctl daemon-reload
systemctl restart docker.service
注意:
FLANNEL默認使用UDP 8285端口作爲虛擬網絡的轉發端口,如果使用VxLAN模式,端口爲UDP 8472。因此,如果有防火牆,需要視情況開放UDP 8285、8472端口,否則,虛擬網絡中的容器無法互通。詳情可參考https://www.hi-linux.com/posts/30481.html。