kubernetes集群安裝指南:Flannel網(wǎng)絡(luò)插件部署-創(chuàng)新互聯(lián)

Flannel 是CNI陣營里標(biāo)準(zhǔn)的網(wǎng)絡(luò)插件,在沒有嚴(yán)格的網(wǎng)絡(luò)的要求下,它通常作為kubernetes集群里網(wǎng)絡(luò)互聯(lián)比較常用的方案,當(dāng)然還有其他網(wǎng)絡(luò)方案,比如calico,weave,mxvlan等等,這里主要使用到flannel作為kubernetes的網(wǎng)絡(luò)方案;

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的袁州網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

1 部署準(zhǔn)備

kubernetes 要求集群內(nèi)各節(jié)點(diǎn)(包括 master 節(jié)點(diǎn))能通過 Pod 網(wǎng)段互聯(lián)互通。flannel 使用 vxlan 技術(shù)為各節(jié)點(diǎn)創(chuàng)建一個可以互通的 Pod 網(wǎng)絡(luò),使用的端口為 UDP 8472(需要開放該端口,如公有云 AWS 等)。

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

flannel 將分配給自己的 Pod 網(wǎng)段信息寫入 /run/flannel/docker 文件,docker 后續(xù)使用這個文件中的環(huán)境變量設(shè)置 docker0 網(wǎng)橋,從而從這個地址段為本節(jié)點(diǎn)的所有 Pod 容器分配 IP。

環(huán)境變量定義
#################### Variable parameter setting ######################
FLANNEL_INSTALL_PATH=/data/apps/k8s/networks/flannel
SOFTWARE=/root/software
VERSION=v0.11.0
PACKAGE=flannel-${VERSION}-linux-amd64.tar.gz
DOWNLOAD_URL=https://github.com/devops-apps/download/raw/master/network/$PACKAGE
ETCD_ENPOINTS=https://10.10.10.22:2379,https://10.10.10.23:2379,https://10.10.10.24:2379
FLANNEL_ETCD_PREFIX=/k8s/network
CA_DIR=/etc/k8s/ssl
NETWORK_SUBNET=172.16.0.0/20
IFACE=eth0
1.2 下載和分發(fā) kubernetes 二進(jìn)制文件

登陸devops機(jī)器,訪問flannel github 官方地址下載穩(wěn)定的 realease 包至本機(jī);

wget  $DOWNLOAD_URL -P $SOFTWARE

將flannel 軟件包分發(fā)到集群所有節(jié)點(diǎn)服務(wù)器;

sudo ansible master_k8s_vgs -m copy -a " src=${SOFTWARE}/$PACKAGE dest=${SOFTWARE}/" -b
sudo ansible worker_k8s_vgs -m copy -a " src=${SOFTWARE}/$PACKAGE dest=${SOFTWARE}/" -b

2 安裝flannel網(wǎng)絡(luò)插件

2.1 安裝flannel二進(jìn)制文件
### 1.Check if the install directory exists.
if [ ! -d $FLANNEL_INSTALL_PATH/bin ]; then
     mkdir -p $FLANNEL_INSTALL_PATH/bin     
fi

### 2.Install binary of flannel.
if [ ! -f "$SOFTWARE/flannel-${VERSION}-linux-amd64.tar.gz" ]; then
     wget $DOWNLOAD_URL -P $SOFTWARE >>/tmp/install.log  2>&1
fi
cd $SOFTWARE && tar -xzf flannel-${VERSION}-linux-amd64.tar.gz -C ./
cp -fp ${SOFTWARE}/{flanneld,mk-docker-opts.sh} ${FLANNEL_INSTALL_PATH}/bin
ln -sf  ${FLANNEL_INSTALL_PATH}/bin/{flanneld,mk-docker-opts.sh}  /usr/local/bin
chmod -R 755 $FLANNEL_INSTALL_PATH
2.3 分發(fā) 證書文件
cd ${CA_DIR}
sudo ansible master_k8s_vgs -m  copy -a " src=ca.pem dest=${CA_DIR}/" -b
sudo ansible master_k8s_vgs -m  copy -a " src=flannel.pem dest=${CA_DIR}/" -b
sudo ansible master_k8s_vgs -m  copy -a " src=flannel-key.pem dest=${CA_DIR}/" -b
  • flannel開啟了HTTPS訪問所以需要證書支持;
  • flannel不需要訪問apiserver,因此不需kubeconfig文件認(rèn)證;
2.4 向 etcd 寫入集群 Pod 網(wǎng)段信息
### Create network subnet of flannel .
etcdctl --endpoint=$ETCD_ENPOINTS \
  --ca-file=${CA_DIR}/ca.pem \
  --cert-file=${CA_DIR}/etcd.pem \
  --key-file=${CA_DIR}/etcd-key.pem \
  mkdir $FLANNEL_ETCD_PREFIX

etcdctl --endpoints=$ETCD_ENPOINTS \
  --ca-file=${CA_DIR}/ca.pem \
  --cert-file=${CA_DIR}/etcd.pem \
  --key-file=${CA_DIR}/etcd-key.pem \
  mk ${FLANNEL_ETCD_PREFIX}/config \
 '{"Network":"'${NETWORK_SUBNET}'","SubnetLen":24,"Backend":{"Type":"$TYPE"}}'
  • flanneld 當(dāng)前版本 (v0.11.0) 不支持 etcd v3,故使用 etcd v2 API 寫入配置 key 和網(wǎng)段數(shù)據(jù);
  • 寫入的 Pod 網(wǎng)段 ${CLUSTER_CIDR} 地址段(如 /16)必須小于 SubnetLen,必須與 kube-controller-manager 的 --cluster-cidr 參數(shù)值一致;
2.5 創(chuàng)建flannel 啟動服務(wù)
cat >/usr/lib/systemd/system/flanneld.service<<EOF
[Unit]
Description=Flanneld overlay address etcd agent
After=network.target
After=network-online.target
Wants=network-online.target
After=etcd.service
Before=docker.service
[Service]
Type=notify
ExecStart=${FLANNEL_INSTALL_PATH}/bin/flanneld \\
  -etcd-cafile=${CA_DIR}/ca.pem \\
  -etcd-certfile=${CA_DIR}/flannel.pem \\
  -etcd-keyfile=${CA_DIR}/flannel-key.pem \\
  -etcd-endpoints=${ETCD_ENPOINTS} \\
  -etcd-prefix=${FLANNEL_ETCD_PREFIX} \\
  -iface=${IFACE} \\
  -ip-masq
ExecStartPost=${FLANNEL_INSTALL_PATH}/bin/mk-docker-opts.sh \\
  -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
RequiredBy=docker.service
EOF
  • mk-docker-opts.sh 腳本將分配給 flanneld 的 Pod 子網(wǎng)段信息寫入 /run/flannel/docker 文件,后續(xù) docker 啟動時使用這個文件中的環(huán)境變量配置 docker0 網(wǎng)橋;
  • flanneld 使用系統(tǒng)缺省路由所在的接口與其它節(jié)點(diǎn)通信,對于有多個網(wǎng)絡(luò)接口(如內(nèi)網(wǎng)和公網(wǎng))的節(jié)點(diǎn),可以用 -iface 參數(shù)指定通信接口;
  • flanneld 運(yùn)行時需要 root 權(quán)限;
  • -ip-masq: flanneld 為訪問 Pod 網(wǎng)絡(luò)外的流量設(shè)置 SNAT 規(guī)則,同時將傳遞給 Docker 的變量 --ip-masq(/run/flannel/docker 文件中)設(shè)置為 false,這樣 Docker 將不再創(chuàng)建 SNAT 規(guī)則; Docker 的 --ip-masq 為 true 時,創(chuàng)建的 SNAT 規(guī)則比較“暴力”:將所有本節(jié)點(diǎn) Pod 發(fā)起的、訪問非 docker0 接口的請求做 SNAT,這樣訪問其他節(jié)點(diǎn) Pod 的請求來源 IP 會被設(shè)置為 flannel.1 接口的 IP,導(dǎo)致目的 Pod 看不到真實(shí)的來源 Pod IP。 flanneld 創(chuàng)建的 SNAT 規(guī)則比較溫和,只對訪問非 Pod 網(wǎng)段的請求做 SNAT。
2.6 啟動flannel服務(wù)并檢查運(yùn)行狀態(tài)

啟動flannel服務(wù)并檢查

sudo systemctl start flanneld 
sudo systemctl status  flanneld |grep 'Active:'

確保狀態(tài)為 active (running),否則查看日志,確認(rèn)原因:

sudo journalctl -u  flanneld
2.7 檢查分配給各 flanneld 的 Pod 網(wǎng)段信息
查看集群 Pod 網(wǎng)段(/20):
### Create network subnet of flannel .
etcdctl --endpoint=$ETCD_ENPOINTS \
  --ca-file=${CA_DIR}/ca.pem \
  --cert-file=${CA_DIR}/etcd.pem \
  --key-file=${CA_DIR}/etcd-key.pem \
  get ${FLANNEL_ETCD_PREFIX}/config

輸出:

{"Network":"172.20.0.0/20", "SubnetLen": 21, "Backend": {"Type": "vxlan"}}

查看已分配的 Pod 子網(wǎng)段列表(/24):

etcdctl --endpoints=$ETCD_ENPOINTS \
  --ca-file=${CA_DIR}/ca.pem \
  --cert-file=${CA_DIR}/etcd.pem \
  --key-file=${CA_DIR}/etcd-key.pem \
  ls ${FLANNEL_ETCD_PREFIX}/subnets

輸出(結(jié)果視部署情況而定):

/k8s/network/subnets/172.16.1.0-24
/k8s/network/subnets/172.16.3.0-24
/k8s/network/subnets/172.16.13.0-24
/k8s/network/subnets/172.16.15.0-24
/k8s/network/subnets/172.16.8.0-24

查看某一 Pod 網(wǎng)段對應(yīng)的節(jié)點(diǎn) IP 和 flannel 接口地址:

etcdctl --endpoints=$ETCD_ENPOINTS \
  --ca-file=${CA_DIR}/ca.pem \
  --cert-file=${CA_DIR}/etcd.pem \
  --key-file=${CA_DIR}/etcd-key.pem \
  ls ${FLANNEL_ETCD_PREFIX}/subnets

輸出(結(jié)果視部署情況而定):

{"PublicIP":"192.168.20.24","BackendType":"vxlan","BackendData":{"VtepMAC":"a6:92:04:07"}}
  • 192.168.20.24指節(jié)點(diǎn)master-ks8-n03;
  • VtepMAC 為master-ks8-n03節(jié)點(diǎn)的 flannel.1 網(wǎng)卡 MAC 地址;
2.8 檢查節(jié)點(diǎn) flannel 網(wǎng)絡(luò)信息

隨機(jī)登陸一臺master節(jié)點(diǎn),這里以master-ks8-n03為例

$ ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.20.24  netmask 255.255.255.0  broadcast 192.168.20.255
        ether 00:50:56:b9:9c:b1  txqueuelen 1000  (Ethernet)
        RX packets 305607  bytes 52151972 (49.7 MiB)
        RX errors 0  dropped 1176  overruns 0  frame 0
        TX packets 355321  bytes 58794327 (56.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.10.10.24  netmask 255.255.255.0  broadcast 10.10.10.255
        ether 00:50:56:b9:2c:1e  txqueuelen 1000  (Ethernet)
        RX packets 216915716  bytes 36273314852 (33.7 GiB)
        RX errors 0  dropped 1173  overruns 0  frame 0
        TX packets 207708912  bytes 33334846046 (31.0 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        inet 172.16.1.0  netmask 255.255.255.255  broadcast 0.0.0.0
        ether a6:92:cc:85:04:07  txqueuelen 0  (Ethernet)
        RX packets 260862  bytes 27280155 (26.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 309429  bytes 36792200 (35.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • flannel.1 網(wǎng)卡的地址為分配的 Pod 子網(wǎng)段的第一個 IP(.0),且是 /32 的地址;

查看路由

$ ip route show |grep flannel.1
172.16.3.0/24 via 172.16.3.0 dev flannel.1 onlink 
172.16.8.0/24 via 172.16.8.0 dev flannel.1 onlink 
172.16.13.0/24 via 172.16.13.0 dev flannel.1 onlink 
172.16.15.0/24 via 172.16.15.0 dev flannel.1 onlink
  • 到其它節(jié)點(diǎn) Pod 網(wǎng)段請求都被轉(zhuǎn)發(fā)到 flannel.1 網(wǎng)卡;
  • flanneld 根據(jù) etcd 中子網(wǎng)段的信息,如 ${FLANNEL_ETCD_PREFIX}/subnets/172.30.80.0-21 ,來決定進(jìn)請求發(fā)送給哪個節(jié)點(diǎn)的互聯(lián) IP;
2.9 驗(yàn)證各節(jié)點(diǎn)能通過 Pod 網(wǎng)段互通

在各節(jié)點(diǎn)上部署 flannel 后,檢查是否創(chuàng)建了 flannel 接口(名稱可能為 flannel0、flannel.0、flannel.1 等):這里為flannel.1

ansible master_k8s_vgs -m shell -a ''ping 172.16.1.1 -c 3 && ping 172.16.3.1 -c 3 \
    && ping 172.16.8.1 -c 3 && ping 172.16.13.1 -c 3 && ping 172.16.15.1 -c 3"

上述命令在devops機(jī)器上執(zhí)行。正常情況下,到集群內(nèi)每個節(jié)點(diǎn)都是互通的,如果有不通情況下,檢查防火墻設(shè)置;


安裝完flannel網(wǎng)絡(luò)插件后,整個集群到這里算大功告成,后面還需要安裝相關(guān)插件,如dashboard可視化,dns解析,以及監(jiān)控等等;關(guān)于flannel腳本可以從此處獲取

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

名稱欄目:kubernetes集群安裝指南:Flannel網(wǎng)絡(luò)插件部署-創(chuàng)新互聯(lián)
本文路徑:http://bm7419.com/article48/ddpchp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、建站公司微信公眾號、網(wǎng)站收錄網(wǎng)站建設(shè)、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)