1. 安装etcd flannel使用etcd作为数据库,所以请提前安装好etcd,这里我们使用之前部署的etcd集群 2. 安装flannel 在node节点上安装flannel 从以下链接https://github.com/coreos/flannel/releases/download/v0.8.0/flannel-v0.8.0-linux-amd64.tar.gz下载flannel二进制包,将包中的flanneld和mk-docker-opts.sh文件复制到/usr/bin/目录下 赋予可执行权限 [root@k8s-node01 bin]# chmod +x /usr/bin/flanneld [root@k8s-node01 bin]# chmod +x /usr/bin/mk-docker-opts.sh 3. 编辑systemd服务文件 [root@k8s-node01 bin]# vi /usr/lib/systemd/system/flanneld.service [Unit] Description=flanneld overlay address etcd agent After=network.target Before=docker.service [Service] Type=notify EnvironmentFile=-/etc/sysconfig/flanneld EnvironmentFile=-/etc/sysconfig/docker-network ExecStart=/usr/bin/flanneld ${ETCD_ENDPOINTS} ${ETCD_PREFIX} ${FLANNEL_OPTIONS} 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 4. 编辑配置文件 [root@k8s-node01 bin]# vi /etc/sysconfig/flanneld ETCD_ENDPOINTS="--etcd-endpoints=http://172.18.0.142:2379,http://172.18.0.143:2379,http://172.18.0.146:2379" ETCD_PREFIX="--etcd-prefix=//network" 5. 在etcd中创建网络配置 [root@k8s-master01 k8s]# etcdctl set //network/config '{ "Network": "172.30.0.0/16" }' { "Network": "172.30.0.0/16" } 6. 停止docker服务及删除docker0网卡 如果有遗留的flannel网络设备,也需要一并删除 [root@k8s-node01 bin]# systemctl stop docker [root@k8s-node01 bin]# ip link delete docker0 7. 修改docker的systemd服务配置 设置docker在flanneld之后启动,添加环境变量文件/run/flannel/docker,这个文件是flanneld启动后通过mk-docker-opts.sh生成的 [root@k8s-node01 bin]# cat /usr/lib/systemd/system/docker.service [Unit] Description=Docker Application Container Engine Documentation=http://docs. After=network.target Wants=docker-storage-setup.service Requires=docker-cleanup.timer Requires=flanneld.service [Service] Type=notify NotifyAccess=all KillMode=process EnvironmentFile=-/etc/sysconfig/docker EnvironmentFile=-/etc/sysconfig/docker-storage EnvironmentFile=-/etc/sysconfig/docker-network EnvironmentFile=-/run/flannel/docker Environment=GOTRACEBACK=crash Environment=DOCKER_HTTP_HOST_COMPAT=1 Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin ExecStart=/usr/bin/dockerd-current \ --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \ --default-runtime=docker-runc \ --exec-opt native.cgroupdriver=systemd \ --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \ $OPTIONS \ $DOCKER_STORAGE_OPTIONS \ $DOCKER_NETWORK_OPTIONS \ $ADD_REGISTRY \ $BLOCK_REGISTRY \ $INSECURE_REGISTRY ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=1048576 LimitNPROC=1048576 LimitCORE=infinity TimeoutStartSec=0 Restart=on-abnormal MountFlags=slave [Install] WantedBy=multi-user.target 8. 启动docker服务 在启动docker时,会先自动启动flanneld,这是在docker的systemd配置文件中配置的 [root@k8s-node01 bin]# system restart docker.service 9. 查看docker0和flannel网卡的ip地址 此时应该两个网卡是同一个地址段 [root@k8s-node01 bin]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eno16777728: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:29:0c:04 brd ff:ff:ff:ff:ff:ff inet 172.18.0.144/24 brd 172.18.0.255 scope global eno16777728 valid_lft forever preferred_lft forever 29: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN link/ether 02:42:d2:78:9c:5b brd ff:ff:ff:ff:ff:ff inet 172.30.86.1/24 scope global docker0 valid_lft forever preferred_lft forever 30: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN qlen 500 link/none inet 172.30.86.0/16 scope global flannel0 valid_lft forever preferred_lft forever 10. 重启kubelet服务 [root@k8s-node01 bin]# systemctl restart kubelet 11. 测试不同node节点间docker0网桥ip互通
|