CentOS Kubernetes集群中获取正确Calico配置文件以解决安装报错问题
CentOS Kubernetes集群中获取正确Calico配置文件以解决安装报错问题
我来帮你搞定这个Calico安装的麻烦事儿,你遇到的两个报错都是K8s和Calico版本不兼容或者文件格式出问题导致的,咱们一步步解决:
先搞清楚报错原因
- YAML解析错误:你第一次下载的文件可能因为重定向过程中损坏,或者文件内容格式有问题,导致kubectl无法正常解析成JSON。
- API版本不兼容:第二个报错里的
no matches for kind "PodDisruptionBudget" in version "policy/v1beta1",是因为你的Kubernetes版本比较新(比如1.21+之后),官方已经弃用了policy/v1beta1这个API版本,换成了policy/v1,而你用的旧Calico manifest还在使用废弃的API。
正确获取Calico配置文件的方法
1. 先确认你的Kubernetes版本
首先运行这条命令查看集群版本:
kubectl version --short
Calico和K8s有严格的版本对应关系,比如K8s 1.25+需要搭配Calico v3.24及以上版本,这些新版本的Calico已经适配了policy/v1 API。
2. 下载对应版本的Calico Manifest
- 方式一:下载指定版本的yaml文件
根据你查到的K8s版本,选择对应的Calico版本下载。比如你的K8s是1.26版本,就下载Calico v3.25的配置文件:
curl -O https://docs.tigera.io/calico/v3.25/manifests/calico.yaml
替换命令里的v3.25为你需要的Calico版本即可,确保这个版本和你的K8s版本兼容。
- 方式二:用自动适配的安装脚本
如果你不想手动选版本,可以用官方的快速安装脚本,它会自动检测你的K8s版本并安装适配的Calico配置:
curl https://docs.tigera.io/calico/latest/getting-started/kubernetes/quickstart | bash
3. 手动修复现有文件(应急方案)
如果已经下载了旧的yaml文件,不想重新下载,也可以手动修改其中的PodDisruptionBudget部分:
找到文件里类似这样的段落:
apiVersion: policy/v1beta1 kind: PodDisruptionBudget metadata: name: calico-kube-controllers namespace: kube-system spec: maxUnavailable: 1 selector: matchLabels: k8s-app: calico-kube-controllers
把apiVersion: policy/v1beta1改成apiVersion: policy/v1,然后再运行kubectl apply -f calico.yaml即可。不过更推荐用对应版本的官方manifest,避免其他隐藏的兼容问题。
4. 验证文件完整性
下载完yaml后,先验证格式是否正确,避免再次出现解析错误:
# 先安装yamllint(如果没装的话) yum install yamllint -y # 检查yaml格式 yamllint calico.yaml
或者用kubectl的预检查命令:
kubectl apply -f calico.yaml --dry-run=client
如果预检查通过,再正式执行安装。
安装完成后验证
安装成功后,运行下面的命令查看Calico组件状态:
kubectl get pods -n kube-system -l k8s-app=calico-node kubectl get pods -n kube-system -l k8s-app=calico-kube-controllers
等所有Calico Pod都处于Running状态后,再看CoreDNS的状态,应该就能从Pending变成Running了。
备注:内容来源于stack exchange,提问作者noob_coder
相关产品推荐
相关产品推荐

