注意事项:
- kubelet 配置必须增加 --network-plugin=cni 选项
- kubec-proxy 组件不能采用 --masquerade-all 启动,因为会与 Calico policy 冲突,并且需要加上–proxy-mode=ipvs(ipvs模式),–masquerade-all=true(表示ipvs proxier将伪装访问服务群集IP的所有流量,)
一、停止flanneld服务
yaml形式安装的flanneld切换calico
利用之前部署的flanneld文件删除掉flanneld网络
kubectl delete -f kube-flanneld.yaml`
- 删除路由
我们删除网卡会自动删除这两个网卡的路由
ip link delete cnio
ip link delete flannel.1
删掉其他路由
ip route delete 10.244.0.0/24 via 192.168.25.61 dev eth0
ip route delete 10.244.1.0/24 via 192.168.25.61 dev eth0
ip route 172.17.92.0/24 dev docker0 proto kernel scope link src 172.17.92.1
清除网络规则
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
二进制安装的flanneld切换calico
关闭flanneld服务
systemctl stop flanneld.service systemctl disable flanneld.service
- 执行上面的删除路由和网络规则的动作
修改docker.service文件
vi /usr/lib/systemd/system/docker.service ##删掉该行与flanneld相关的配置 EnvironmentFile=/run/flannel/subnet.env
重载并且重启
systemctl daemon-reload
systemctl restart docker
systemctl status docker
二、部署calico
参考与官网:https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises
镜像由于在国外很难下载,这里提前在别处准备好并且打包过来在节点上用,
cdsn的calico离线镜像下载地址:https://download.csdn.net/download/qq_25611295/15633642
下载部署文件:
curl https://docs.projectcalico.org/v3.9/manifests/calico-etcd.yaml -o calico.yaml
镜像打包命令:
docker image save docker.io/calico/kube-controllers:v3.9.6 |gzip -9 >calico_kube-controllers.tar.gz
docker image save docker.io/calico/cni:v3.9.6|gzip -9 >calico_cni.tar.gz
docker image save docker.io/calico/pod2daemon-flexvol:v3.9.6|gzip -9 >pod2daemon-flexvol.tar.gz
docker image save docker.io/calico/node:v3.9.6|gzip -9 >calico_node.tar.gz
具体步骤如下:
配置连接etcd地址,如果使用https,还需要配置证书。(ConfigMap,Secret)
根据实际网络规划修改Pod CIDR(CALICO_IPV4POOL_CIDR)
选择工作模式(CALICO_IPV4POOL_IPIP),支持BGP,IPIP
vi calico.yaml,找到下面行并修改
- calico.yaml中添加etd的ssl
etcd-key: (cat /opt/etcd/ssl/server-key.pem |base64 -w 0)
etcd-cert: (cat /opt/etcd/ssl/server.pem |base64 -w 0)
etcd-ca: (cat /opt/etcd/ssl/ca.pem |base64 -w 0)
将对应的都添进去,将注释去掉:
# etcd-key: null 将对应ssl下的证书转换成base64编码放进来,并去掉注释
# etcd-cert: null
# etcd-ca: null
- calico.yaml中指定secert的配置落地的位置,直接去掉注释就可以