以下所有操作均在node節點進行
Flannel網絡概述
Flannel通過給每臺宿主機分配一個子網的方式爲容器提供虛擬網絡,它基於Linux TUN/TAP,使用UDP/VXLAN封裝IP包來創建overlay網絡,並藉助etcd(也支持kubernetes)維護網絡的分配情況。
服務器角色分配
角色 | 地址 | 安裝組件 |
---|---|---|
master | 192.168.142.220 | kube-apiserver kube-controller-manager kube-scheduler etcd |
node1 | 192.168.142.136 | kubelet kube-proxy docker flannel etcd |
node2 | 192.168.142.132 | kubelet kube-proxy docker flannel etcd |
Flannel網絡部署(所有node節點)
安裝docker容器
docker引擎的安裝比較簡單這裏就不多講解了,直接貼腳本刷即可。
腳本如下:
#!/bin/bash
#Docker引擎部署
#安裝依賴包
yum install yum-utils device-mapper-persistent-data lvm2 -y
#設置阿里雲鏡像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安裝Docker-ce
yum install -y docker-ce
#關閉防火牆及增強型安全功能
systemctl stop firewalld.service
setenforce 0
#啓動Docker並設置爲開機自啓動
systemctl start docker.service
systemctl enable docker.service
#鏡像加速服務(每個人的阿里加速地址都不同,請自行前往阿里官網獲取)
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://123456.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
#網絡優化
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
service network restart
systemctl restart docker
#檢驗容器是否啓動完成
docker images
if [ $? -eq 0 ];then
echo "Docker啓動完成"
else
echo "ERROR"
systemctl status docker
exit 1
fi
爲flannel網絡分配子網段,並注入etcd數據庫中
[root@node2 bin]# /opt/etcd/bin/etcdctl --ca-file=/opt/etcd/ssl/ca.pem \
--cert-file=/opt/etcd/ssl/server.pem \
--key-file=/opt/etcd/ssl/server-key.pem \
--endpoints="https://192.168.142.220:2379,https://192.168.142.136:2379,https://192.168.142.132:2379" set /coreos.com/network/config '{"Network":"172.17.0.0/16","Backend":{"Type":"vxlan"}}'
解壓安裝flannel二進制軟件包
[root@node2 ~]# tar zxvf flannel-v0.10.0-linux-amd64.tar.gz
flanneld
mk-docker-opts.sh
README.md
//建立工作目錄
[root@node2 ~]# mkdir -p /opt/kubernetes/{cfg,ssl,bin}
//移動至工作目錄
[root@node2 ~]# mv flanneld mk-docker-opts.sh /opt/kubernetes/bin/
更改flannel配置文件
[root@node2 ~]# cat <<EOF >/opt/kubernetes/cfg/flanneld.cfg
FLANNEL_OPTIONS="--etcd-endpoints=https://192.168.142.220:2379,https://192.168.142.132:2379,https://192.168.142.136:2379 \
-etcd-cafile=/opt/etcd/ssl/ca.pem \
-etcd-certfile=/opt/etcd/ssl/server.pem \
-etcd-keyfile=/opt/etcd/ssl/server-key.pem
EOF
編寫啓動腳本
[root@node2 ~]# cat <<EOF >/usr/lib/systemd/system/flanneld.service
[Unit]
Description=Flanneld overlay address etcd agent
After=network-online.target network.target
Before=docker.service
[Service]
Type=notify
EnvironmentFile=/opt/kubernetes/cfg/flanneld.cfg
ExecStart=/opt/kubernetes/bin/flanneld --ip-masq \$FLANNEL_OPTIONS
ExecStartPost=/opt/kubernetes/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
啓動服務
[root@node2 bin]# chmod +x /usr/lib/systemd/system/flanneld.service
[root@node2 bin]# systemctl start flanneld.service
[root@node2 bin]# systemctl status flanneld.service
[root@node2 bin]# systemctl enable flanneld.service
這裏啓動後會生成一個flannel的虛擬網卡
設置docker容器連接上flannel網絡
[root@node2 bin]# vim /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
BindsTo=containerd.service
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket
[Service]
Type=notify
EnvironmentFile=/run/flannel/subnet.env //添加這一行
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS(添加該變量,加入flannel網絡中) -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
檢查自身分配的子網段(不是必須的)
[root@node2 bin]# cat /run/flannel/subnet.env
DOCKER_OPT_BIP="--bip=172.17.34.1/24" //給docker分配的網關
DOCKER_OPT_IPMASQ="--ip-masq=false"
DOCKER_OPT_MTU="--mtu=1450"
DOCKER_NETWORK_OPTIONS=" --bip=172.17.34.1/24 --ip-masq=false --mtu=1450"
重啓容器使配置文件生效
[root@node2 bin]# systemctl daemon-reload
[root@node2 bin]# systemctl restart docker
檢查flannel網絡互通性
node1→node2
node2→node1