1.跨主機通訊的基礎
1.需要docker 安裝成功(安裝過程就略了,本文以yum安裝的1.13.1為準)
2.需要有etcd資料庫(就是第三部完成的)
3.提前規劃好的flanneld網路(由於需要需要先申請證書,所以需要先建立證書)
2.建立etcd證書
cat > /etc/ssl/flanneld/flanneld-csr.json <<EOF
{
"CN": "flanneld",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "ChengDu",
"L": "ChengDu",
"O": "k8s",
"OU": "dessler"
}
]
}
EOF
複製程式碼
cfssl gencert -ca=/etc/ssl/ca.pem \
-ca-key=/etc/ssl/ca-key.pem \
-config=/etc/ssl/ca-config.json \
-profile=kubernetes flanneld-csr.json | cfssljson -bare flanneld
複製程式碼
ls
flanneld.csr flanneld-csr.json flanneld-key.pem flanneld.pem
複製程式碼
3.分發證書和二進位制檔案到所有的節點
包括後面增加的node節點
4.在etcd裡面建立flanneld網路
也就是規劃pod的網路
etcdctl \
> --endpoints=https://192.168.1.40:2379,https://192.168.1.41:2379,https://192.168.1.42:2379 \
> --ca-file=/etc/ssl/ca.pem \
> --cert-file=/etc/ssl/flanneld/flanneld.pem \
> --key-file=/etc/ssl/flanneld/flanneld-key.pem \
> set /kubernetes/network/config '{"Network":"'172.30.0.0/16'", "SubnetLen": 24, "Backend": {"Type": "vxlan"}}'
{"Network":"172.30.0.0/16", "SubnetLen": 24, "Backend": {"Type": "vxlan"}}
複製程式碼
由於物理節點的ip地址段是192.168.的 所有給docker規劃的ip地址是172.30的,你也可以根據自己的情況選擇不同的ip地址,至於為什麼選擇16 是因為選擇16包含了254個網段,滿足一般叢集的需要,當然也可以選的更小或者更大
5.配置flanneld服務
這個就不區分mater還是node接點,其實master接點是可以不需要這個的,但是為了統一最好還是都加上
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=/usr/bin/flanneld \\
-etcd-cafile=/etc/ssl/ca.pem \\
-etcd-certfile=/etc/ssl/flanneld/flanneld.pem \\
-etcd-keyfile=/etc/ssl/flanneld/flanneld-key.pem \\
-etcd-endpoints=https://192.168.1.40:2379,https://192.168.1.41:2379,https://192.168.1.42:2379 \\
-etcd-prefix=/kubernetes/network \\
-iface=eth0
ExecStartPost=/usr/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker
Restart=on-failure
[Install]
WantedBy=multi-user.target
RequiredBy=docker.service
EOF複製程式碼
由於flanneld網路需要在docker之前啟動,並且docker啟動會依賴flanneld網路獲取的ip地址段,所以需要修改docker啟動引數以便能獲取到flanneld的網路引數
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target rhel-push-plugin.socket registries.service
Wants=docker-storage-setup.service
Requires=docker-cleanup.timer
[Service]
Type=notify
NotifyAccess=all
EnvironmentFile=-/run/flannel/docker
ExecStart=/usr/bin/dockerd --log-level=error $DOCKER_NETWORK_OPTIONS
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
Restart=on-abnormal
MountFlags=slave
KillMode=process
[Install]
WantedBy=multi-user.target複製程式碼
這個引數對原始引數修改得有點多,一直想除錯成功只增加1個引數即可實現(沒有成功)
6.啟動flanneld服務
systemctl daemon-reload
systemctl enable flanneld
systemctl restart flanneld
systemctl status flanneld
#重啟docker,以便docker可以獲得flanneld的網路地址
systemctl restart docker
複製程式碼
啟動成功以後,只要在有flanneld的程式的節點的建立的容器預設就是可以跨主機通訊的