卸载calico后,kubectl -f calico.yaml,无法在集群中创建新的pod。集群中的任何新 pod 都停留在容器创建状态。Kubectl describe 显示以下错误:
警告FailedCreatePodSandBox2米kubelet,10.0.12.2失败创建荚沙箱:RPC错误:代码=未知DESC = [未能建立沙箱容器“f15743177fd70c5eabf70c60be5b8b354e5346837d1b5d59bf99d1d1b5d6416c”网络荚“测试9465-768b57b5df-fv9d4”:NetworkPlugin CNI未能建立荚“测试9465-768b57b5df-fv9d4_policy-演示”网络:错误越来越ClusterInformation:连接未经授权:未经授权,未能清除沙箱集装箱“f15743177fd70c5eabf70c60be5b8b354e5346837d1b5d59bf99d1d1b5d6416c”网络荚“测试9465-768b57b5df-fv9d4”:NetworkPlugin CNI失败拆卸吊舱“test-9465-768b57b5df-fv9d4_policy-demo”网络:获取集群信息时出错:连接未经授权:未经授权]
主要问题是因为 calico 有一个 init 容器但没有一个清理容器。吨
要取消部署 calico,我们必须执行通常的操作kubectl delete -f <yaml>,然后在每个节点中删除一个 calico conf 文件/etc/cni/net.d/。此配置文件与其他二进制文件一起由 init 容器加载到主机上。
https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/
从这个链接我们可以看到 kubelet 从默认目录中读取配置文件,如果有多个配置文件,那么它会从按字母顺序出现在最前面的配置文件中应用 CNI 插件(为什么,天哪?? )。
因此,在我们的案例中,卸载 calico 后,它将从所有管理员权限中删除,但节点仍会尝试根据它从默认目录中获取的配置文件应用 calico 规则。然后重启节点摆脱iptable规则。
删除文件并重新启动节点解决了问题,我们恢复了正常行为。解决相同问题的另一种方法是,如果您在托管的 Kubernetes 集群上,只需从集群中终止节点即可。由于公共云基础架构会自动启动另一个节点以保持相同状态,因此它不再具有 calico 配置文件。
| 归档时间: |
|
| 查看次数: |
3033 次 |
| 最近记录: |