×

此功能允许容器存储接口 (CSI) 驱动程序在节点非正常宕机时自动分离卷。

概述

当 kubelet 的节点关闭管理器检测到即将发生的节点关闭操作时,就会发生正常的节点关闭。非正常关闭发生在 kubelet 未检测到节点关闭操作时,这可能是由于系统或硬件故障引起的。此外,如果关闭命令未触发 kubelet 在 Linux 上使用的抑制器锁机制,或者由于用户错误(例如,如果未为该节点正确配置 shutdownGracePeriod 和 shutdownGracePeriodCriticalPods 详细信息),kubelet 也可能未检测到节点关闭操作。

使用此功能,当发生非正常节点关闭时,您可以手动在节点上添加out-of-service污点,以允许卷自动从节点分离。

手动添加 out-of-service 污点以实现自动卷分离

先决条件
  • 具有集群管理员权限的集群访问权限。

步骤

要允许卷在非正常节点关闭后自动从节点分离

  1. 检测到节点不健康后,关闭工作节点。

  2. 运行以下命令并检查状态以确保节点已关闭

    oc get node <node name> (1)
    
    1 <节点名称> = 非正常关闭节点的名称

    如果节点未完全关闭,请不要继续对节点进行污点标记。如果节点仍在运行并且应用了污点,则可能会发生文件系统损坏。

  3. 通过运行以下命令来标记相应的节点对象

    oc adm taint node <node name> node.kubernetes.io/out-of-service=nodeshutdown:NoExecute (1)
    1 <节点名称> = 非正常关闭节点的名称

    应用污点后,卷将从关闭的节点分离,允许其磁盘连接到不同的节点。

    示例

    生成的 YAML 文件类似于以下内容

    spec:
      taints:
      - effect: NoExecute
        key: node.kubernetes.io/out-of-service
        value: nodeshutdown
  4. 重启节点。

  5. 通过运行以下命令从相应的节点对象中删除污点

    oc adm taint node <node name> node.kubernetes.io/out-of-service=nodeshutdown:NoExecute- (1)