将节点置于维护模式

如果您需要修复或维护节点,则应首先将节点置于维护模式。将节点置于维护模式会安全地排空其 pod/工作负载,并将节点排除在 pod 调度外。在维护模式下,您可以在节点上运行,而不会有中断 Pod 流量的风险。

工作原理

Anthos clusters on Bare Metal 提供了一种将节点置于维护模式的方法。此方法可让其他集群组件正确知道节点处于维护模式。将节点置于维护模式时,无法在节点上安排其他 pod,并且现有 pod 会停止。

您可以在特定节点上手动使用 Kubernetes 命令(例如 kubectl cordonkubectl drain),而不是使用维护模式。如果您运行 Anthos Clusters on Bare Metal 1.12.0 版 (anthosBareMetalVersion: 1.12.0) 或更低版本,请参阅有关不封锁节点(如果您不使用维护模式过程)的已知问题。

使用维护模式过程时,Anthos clusters on Bare Metal 会执行以下操作:

  • 节点污点会被添加到指定节点,以指示在这些节点上无法安排或执行任何 Pod。

  • 系统会强制执行 20 分钟的超时,以确保节点不会因等待 Pod 停止而停滞。如果 Pod 被配置为容忍所有污点或具有终结器,则其可能不会停止。Anthos clusters on Bare Metal 会尝试停止所有 Pod,但如果超时,节点将进入维护模式。此超时可防止正在运行的 Pod 阻止升级。

  • 如果您在节点上运行基于虚拟机的工作负载,则 Anthos clusters on Bare Metal 会将 NodeSelector 应用于虚拟机实例 (VMI) Pod,然后停止该 Pod。NodeSelector 可确保从维护模式中移除节点时,VMI Pod 在同一节点上重启。

将节点置于维护模式

选择要在集群配置文件的 maintenanceBlocks 下,通过指定选择节点的 IP 地址范围,选择要进入维护模式的节点。您选择的节点必须处于就绪状态且在集群中正常运行。

如需将节点置于维护模式,请执行以下操作:

  1. 修改集群配置文件以选择要置于维护模式的节点。

    您可以使用自己选择的编辑器修改配置文件,也可以运行以下命令直接修改集群自定义资源:

    kubectl -n CLUSTER_NAMESPACE edit cluster CLUSTER_NAME

    替换以下内容:

    • CLUSTER_NAMESPACE:集群的命名空间。
    • CLUSTER_NAME:集群的名称。
  2. maintenanceBlocks 部分添加到集群配置文件,以指定要置于维护模式的节点的单个 IP 地址或地址范围。

    以下示例展示了如何通过指定 IP 地址范围来选择多个节点:

    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
    spec:
      maintenanceBlocks:
        cidrBlocks:
        - 172.16.128.1-172.16.128.64
    
  3. 保存并应用更新后的集群配置。

    Anthos clusters on Bare Metal 开始将节点置于维护模式。

  4. 运行以下命令以获取集群中节点的状态:

    kubectl get nodes -n CLUSTER_NAME

    响应如下所示:

    NAME                              STATUS                     ROLES    AGE     VERSION
    user-anthos-baremetal-01          Ready                      master   2d22h   v1.17.8-gke.16
    user-anthos-baremetal-04          Ready                      <none>   2d22h   v1.17.8-gke.16
    user-anthos-baremetal-05          Ready,SchedulingDisabled   <none>   2d22h   v1.17.8-gke.16
    user-anthos-baremetal-06          Ready                      <none>   2d22h   v1.17.8-gke.16
    

    状态为 SchedulingDisabled 表示节点处于维护模式。

  5. 运行以下命令以获取维护模式下的节点数:

    kubectl get nodepools

    响应应类似于以下输出:

    NAME   READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
    np1    3       0             0         1                  0
    

    此示例中的此 UNDERMAINTENANCE 列显示了一个节点处于维护模式。

    Anthos clusters on Bare Metal 在进入维护模式时,还会将以下污点添加到节点:

    • baremetal.cluster.gke.io/maintenance:NoExecute
    • baremetal.cluster.gke.io/maintenance:NoSchedule

从维护模式中移除节点

如需从维护模式中移除节点,请执行以下操作:

  1. 修改集群配置文件以清除要从维护模式中移除的节点。

    您可以使用自己选择的编辑器修改配置文件,也可以运行以下命令直接修改集群自定义资源:

    kubectl -n CLUSTER_NAMESPACE edit cluster CLUSTER_NAME

    替换以下内容:

    • CLUSTER_NAMESPACE:集群的命名空间。
    • CLUSTER_NAME:集群的名称。
  2. 修改 IP 地址以从维护模式中移除特定节点,或者移除 maintenanceBlocks 部分从维护模式中移除所有操作。

  3. 保存并应用更新后的集群配置。

  4. 使用 kubectl 命令检查节点的状态。