K8s集群配置多调度器异常:自定义调度器无法调度Pod求助
自定义调度器无法监听v1.CSIStorageCapacity的排查方案
问题根因
这个错误核心是你的Kubernetes集群版本不支持v1版本的CSIStorageCapacity API,或者该API组件未启用。CSIStorageCapacity的v1版本在Kubernetes 1.21才正式成为稳定版,若集群版本低于1.21,仅会存在v1beta1版本的资源;另外如果集群未部署CSI驱动、或kube-apiserver未开启对应API特性门控,该资源也不会存在。同时,自定义调度器的镜像版本如果高于集群版本,就会尝试访问集群不支持的API版本,触发报错。
具体解决步骤
1. 确认集群版本与API资源状态
执行以下命令排查基础信息:
# 查看Kubernetes集群版本 kubectl version --short # 查看是否存在CSIStorageCapacity资源及可用版本 kubectl api-resources | grep csistoragecapacities
- 若集群版本低于1.21,会显示
storage.k8s.io/v1beta1版本的资源,而非v1 - 若完全找不到该资源,说明集群未启用CSI相关组件
2. 匹配自定义调度器镜像版本
自定义调度器的镜像版本必须和集群版本完全一致。比如集群是1.20.15,调度器镜像就要用k8s.gcr.io/kube-scheduler:v1.20.15,不能用更高版本的镜像(如v1.21+),否则高版本调度器会尝试访问集群不支持的v1.CSIStorageCapacity API。
修改自定义调度器的Deployment配置,替换镜像版本后重新部署:
kubectl apply -f your-scheduler-deployment.yaml
3. 低版本集群适配(可选)
如果无法升级集群,可直接使用对应集群版本的调度器镜像(这是最稳妥的方式),也可以在调度器容器的启动命令中添加参数优化API访问逻辑,确保client-go版本匹配集群API:
# 示例启动命令调整 kube-scheduler --config=/etc/kubernetes/scheduler-config.yaml --kube-api-qps=5 --kube-api-burst=10
4. 验证修复效果
重新部署调度器后,查看日志确认错误消失:
kubectl logs -f my-scheduler-xxxxxx-xxxxx -n kube-system
再部署指定schedulerName: my-scheduler的Pod,检查是否能正常调度。
内容的提问来源于stack exchange,提问作者Sam Kennedy
相关产品推荐
相关产品推荐

