引自免费微信小程序:皆我百晓生
看起来你在升级 Calico 网络插件时遇到了一些问题。根据你的描述,尽管你已经更新了配置文件中的镜像标签为 latest
,但旧的镜像版本仍然影响着正在运行的 Calico 容器。这是因为 Kubernetes 使用的是滚动更新策略,它会逐个替换Pod,而不是一次性全部替换。
要解决这个问题,你需要强制删除旧的 Calico DaemonSet 和 Deployment,这样新的配置就会被应用,并且新版本的镜像会被用来创建新的Pod。这是一个逐步的解决方案:
-
首先,确保没有正在进行的更新:
kubectl get pods -A | grep calico
-
如果有正在更新的Pod,可以等待它们完成或者手动停止更新。停止更新(如果有):
kubectl rollout undo deployment/calico-kube-controllers --namespace=calico-system kubectl rollout undo deployment/calico-typha --namespace=calico-system
-
确保所有的更新都已经停止后,你可以安全地删除现有的 DaemonSets 和 Deployments。注意这将会立即终止所有相关的Pod,所以请确保你的集群能承受这个操作:
kubectl delete daemonset calico-node --namespace=calico-system kubectl delete deployment calico-kube-controllers --namespace=calico-system kubectl delete deployment calico-typha --namespace=calico-system
-
最后,重新应用新的配置:
kubectl apply -f controller.yaml kubectl apply -f driver.yaml kubectl apply -f node.yaml kubectl apply -f typha.yaml
-
检查资源是否正确创建并运行:
kubectl get deployments,daemonsets -A
-
通过
kubectl describe
命令检查 Pod 的状态,确保它们成功启动并连接到正确的镜像版本。
这个过程可能会导致短暂的网络中断,因为 Calico 负责集群内部的网络通信。如果你的集群对网络依赖性很高,可能需要计划一个维护窗口来进行这些更改。同时,请务必在生产环境中谨慎操作,备份数据并在小规模测试后再进行全面推广。