事情起因:
当我部署1.20版本k8s集群,正常使用如下命令部署calico网络的时候,发生了一个错误。
[root@k8s-master01 docker]# kubectl create -f https://docs.projectcalico.org/manifests/calico.yaml
组件无法正常启动
问题分析:
错误信息如下:
error: unable to recognize "https://docs.projectcalico.org/manifests/calico.yaml": no matches for kind "PodDisruptionBudget" in version "policy/v1"
分析错误:
这个错误的大致说的是在calico.yaml文件中用的api版本是“policy/v1”,没有“PodDisruptionBudget”类型的匹配项。
好,既然知道了错误的起因,那么开始解决问题:
首先检查当前k8s集群是否支持“policy/v1”api版本:
[root@k8s-master01 docker]# kubectl api-versions | grep policy
policy/v1beta1
检测发现确实不支持。因为我上面执行的命令默认下载的calico版本是最新版本的。所以,我们需要找当前k8s1.20版本所支持的calico版本,就可以解决这个问题。
Calico官网:
https://projectcalico.docs.tigera.io/about/about-calico
我翻阅了一下官网手册,确实没有找到对应的calico版本所支持的k8s集群版本,这可怎么办。只能测试一下了。
经测试:
当前k8s 1.20版本支持的calico版本为:3.18-3.21
部署:
[root@k8s-master01 ~]# curl https://docs.projectcalico.org/v3.21/manifests/calico.yaml -O
[root@k8s-master01 ~]# kubectl apply -f calico.yaml