Vagrant/VirtualBox环境部署Calico时DaemonSet对应extensions版本咨询
解决Vagrant/VirtualBox部署Calico时DaemonSet API版本不匹配的问题
这个错误的核心原因是你的Kubernetes集群版本和Calico YAML中使用的DaemonSet API版本不兼容——Kubernetes在迭代过程中逐步废弃了旧的API组,extensions/v1beta2、apps/v1beta1这些版本已经被移除或不再被新版本集群支持。下面是具体的排查和解决步骤:
1. 先确认你的Kubernetes集群版本
首先执行命令查看集群的具体版本:
kubectl version --short
重点看Server Version的版本号,比如v1.20.0就属于1.16+的范围。
2. 匹配对应的DaemonSet API版本和Calico版本
Kubernetes对DaemonSet的API版本支持规则如下:
- Kubernetes 1.16及以后:仅支持
apps/v1版本,且要求DaemonSet的spec中必须包含selector字段(旧版本YAML可能缺失这个字段)。对应的Calico版本需要是3.8及以上,这些版本的官方YAML已经默认使用apps/v1。 - Kubernetes 1.9~1.15:支持
apps/v1beta2或apps/v1beta1,可以选择Calico 3.7及以前的版本,或者手动修改YAML的API版本。 - Kubernetes 1.8及更早:只能使用
extensions/v1beta1,需要对应更老旧的Calico版本(比如3.6及以下)。
3. 手动修复Calico YAML文件
如果不想更换Calico版本,可以直接修改calico.yaml中的DaemonSet配置:
- 找到文件中所有
kind: DaemonSet的段落(通常是calico-node这个DaemonSet) - 将
apiVersion改成你的集群支持的版本,比如1.16+集群就改成apiVersion: apps/v1 - 若使用
apps/v1,必须在spec下添加selector字段,且要和template.metadata.labels匹配,示例如下:
apiVersion: apps/v1 kind: DaemonSet metadata: name: calico-node namespace: kube-system spec: selector: matchLabels: k8s-app: calico-node # 这个标签要和下面template里的labels一致 template: metadata: labels: k8s-app: calico-node spec: # 其他原有配置...
4. 验证修复
修改完成后,重新执行部署命令:
kubectl apply -f /vagrant/calico/calico.yaml
再重新运行vagrant up应该就能正常启动了。
内容的提问来源于stack exchange,提问作者Paul Rousseau
相关产品推荐
相关产品推荐

