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

Longhorn节点驱逐因Pod中断预算报错,如何通过Helm配置自动化处理?

Longhorn节点驱逐(Drain)适配Kubernetes原地升级解决方案

问题根源

instance-manager Pod对应的PodDisruptionBudget(PDB)默认maxUnavailable被设为0,直接限制了该类型Pod的驱逐操作,触发报错:

error when evicting pods/"instance-manager-xxx" -n "longhorn-system" (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.

解决方案

1. 临时调整PDB(适配单次自动化驱逐流程)

适合仅为节点升级临时放行驱逐的场景,可直接嵌入Ansible自动化任务:

  • 修改instance-manager的PDB参数,允许1个Pod中断:
    kubectl patch pdb instance-manager -n longhorn-system -p '{"spec":{"maxUnavailable":1}}'
    
  • 执行节点封锁与驱逐:
    kubectl cordon <目标节点名称>
    kubectl drain <目标节点名称> --ignore-daemonsets --delete-emptydir-data
    
  • 节点升级完成、重新加入集群后,可恢复原PDB配置(按需选择):
    kubectl patch pdb instance-manager -n longhorn-system -p '{"spec":{"maxUnavailable":0}}'
    

2. 通过Helm Chart永久修改PDB配置(适配长期自动化流程)

Longhorn 1.5.3的Helm Chart支持通过values.yaml配置instance-manager的PDB参数,无需手动修改集群资源:

  • 在你的Helm values配置文件中添加以下内容:
    instanceManager:
      podDisruptionBudget:
        maxUnavailable: 1  # 可根据集群节点规模调整,比如节点数较多时设为2或百分比(如"20%")
        # 如需设置最小可用数,可追加:
        # minAvailable: 2
    
  • 执行Helm升级应用配置:
    helm upgrade longhorn longhorn/longhorn -n longhorn-system -f <你的values文件路径>
    
    配置生效后,后续所有节点驱逐操作都会自动适配修改后的PDB规则,无需临时调整。

自动化流程注意事项

  • 在Ansible playbook中需保证任务执行顺序:
    1. 临时修改PDB(若用临时方案)/ 先完成Helm配置升级(若用永久方案)
    2. 执行节点cordon和drain
    3. 节点升级完成后执行kubectl uncordon <目标节点名称>
    4. 恢复PDB配置(仅临时方案需要)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:41:09