You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Kubernetes MachineDeployment如何缩容特定节点?注解尝试无效

在Kubernetes MachineDeployment中指定缩容节点的正确方法

在Cluster API的MachineDeployment体系下,确实可以指定缩容时优先删除目标节点,但你之前使用的注解名称和操作逻辑有误,以下是正确的实现方案:

一、核心修正:使用正确的注解

你需要给Machine资源添加cluster.x-k8s.io/delete-machine注解,而非你尝试的其他变体注解。这个注解是Cluster API官方定义的,用于标记需要优先删除的Machine实例。

正确操作步骤

  1. 列出所有Machine资源,找到目标节点对应的Machine名称:
    kubectl get machines -n kube-system
    
  2. 给目标Machine添加删除标记注解:
    kubectl annotate machine <你的目标Machine名称> cluster.x-k8s.io/delete-machine=true -n kube-system
    
  3. 调整MachineDeployment的副本数触发缩容:
    kubectl scale machinedeployment <你的MachineDeployment名称> --replicas=<目标副本数> -n kube-system
    

执行以上步骤后,MachineDeployment控制器会优先选择带有cluster.x-k8s.io/delete-machine注解的实例进行删除。

二、排查注解不生效的常见原因

如果上述操作仍未生效,检查以下几点:

  • Cluster API版本兼容性:该注解功能仅在Cluster API v1beta1(v1.0及以上版本)中支持,旧版本无法识别。可通过查看控制器镜像版本确认:
    kubectl get pods -n capi-system -o jsonpath='{.items[*].spec.containers[*].image}' | grep capi-controller-manager
    
  • 部署策略限制:确保MachineDeployment的spec.strategy.type为RollingUpdate,Recreate策略下注解逻辑不生效。
  • 控制器日志排查:查看Cluster API控制器日志,确认是否有注解识别或执行错误:
    kubectl logs -n capi-system capi-controller-manager-0 -c manager | grep "delete-machine"
    

三、替代方案:手动强制删除目标节点

如果注解方式仍无法满足需求,可通过手动流程指定删除:

  1. 标记目标节点不可调度:
    kubectl cordon <目标节点名称>
    
  2. 驱逐节点上的所有Pod(忽略DaemonSet):
    kubectl drain <目标节点名称> --ignore-daemonsets
    
  3. 删除对应的Machine实例:
    kubectl delete machine <目标Machine名称> -n kube-system
    
  4. 调整MachineDeployment副本数至目标值:
    kubectl scale machinedeployment <你的MachineDeployment名称> --replicas=<目标副本数> -n kube-system
    

内容的提问来源于stack exchange,提问作者JDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:23:10