RKE部署OpenStack云控制器管理器无Pod被调度问题求助
RKE部署OpenStack云控制器管理器无Pod被调度问题求助
我看了你遇到的问题,核心是OpenStack云控制器的DaemonSet没有Pod被调度到master节点上,结合你给出的节点标签、污点(Taints)和DaemonSet配置,我觉得问题大概率出在污点容忍配置不匹配上,给你梳理下排查和解决步骤:
一、核心问题:DaemonSet的容忍度没覆盖节点的所有污点
你的master节点有两个关键污点:
node-role.kubernetes.io/controlplane=true:NoSchedule node-role.kubernetes.io/etcd=true:NoExecute
但你使用的openstack-cloud-controller-manager-ds.yaml里的容忍配置只包含了node-role.kubernetes.io/master和node-role.kubernetes.io/control-plane(注意这里是带横杠的control-plane,而你的节点标签是不带横杠的controlplane),完全没覆盖RKE默认给master节点加上的controlplane和etcd污点,所以调度器不会把Pod调度到有这些污点的节点上。
二、解决步骤
- 修改DaemonSet的容忍配置
打开openstack-cloud-controller-manager-ds.yaml,在tolerations部分新增两条容忍规则,匹配你的节点污点:
tolerations: - key: node.cloudprovider.kubernetes.io/uninitialized value: "true" effect: NoSchedule - key: node-role.kubernetes.io/master effect: NoSchedule - key: node-role.kubernetes.io/control-plane effect: NoSchedule # 新增以下两条,匹配RKE节点的污点 - key: node-role.kubernetes.io/controlplane effect: NoSchedule - key: node-role.kubernetes.io/etcd effect: NoExecute
- 重新应用DaemonSet
执行命令更新配置:
kubectl apply -f openstack-cloud-controller-manager-ds.yaml
- 验证调度结果
等待片刻后查看Pod状态:
kubectl get pods -n kube-system -l k8s-app=openstack-cloud-controller-manager
三、额外注意事项
- 确保你RKE配置里的
kubelet.extra_args.cloud-provider=external是正确设置的,这个参数是使用外部云控制器的必要条件,不能省略; - 检查云配置的Secret是否正确挂载到Pod里(不过当前是调度问题,这个可以等Pod起来后再验证);
- 确认节点选择器
node-role.kubernetes.io/controlplane=true和节点标签完全匹配,你已经设置正确,这部分没问题。
如果修改后还是有问题,可以查看DaemonSet的事件日志进一步排查:
kubectl describe ds openstack-cloud-controller-manager -n kube-system
备注:内容来源于stack exchange,提问作者sctx
相关产品推荐
相关产品推荐

