维护集群

Google Distributed Cloud air-gapped appliance (GDC) 可让您在创建 Kubernetes 集群后对其进行管理,以便适应不断变化的容器工作负载要求。

执行节点维护

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

工作原理

GDC 的维护模式类似于为特定节点运行 kubectl cordonkubectl drain。以下是与维护模式相关的一些详细信息:

  • 指定的节点会被标记为无法安排。此操作是 kubectl cordon 的功能。
  • 节点污点会被添加到指定节点,以指示在这些节点上无法安排或执行任何 Pod。此操作类似于 kubectl drain
  • 系统会强制执行 20 分钟的超时,以确保节点不会因等待 Pod 终止而停滞。如果 Pod 被配置为容忍所有污点或具有终结器,则其可能不会终止。GDC 集群会尝试终止所有 Pod,但如果超时,节点将进入维护模式。此超时可防止正在运行的 Pod 阻止升级。
  • 如果您在节点上运行基于虚拟机的工作负载,则 GDC 集群会将 NodeSelector 应用于虚拟机实例 (VMI) pod,然后停止该 pod。 NodeSelector 可确保从维护模式中移除节点时,VMI Pod 在同一节点上重启。

将节点置于维护模式

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

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

  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. 保存并应用更新后的集群配置:

    kubectl apply -f my-cluster.yaml
    

    应用集群配置后,集群会将适用的节点置于维护模式。

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

    kubectl get nodes -n CLUSTER_NAME
    

    响应如下所示:

    NAME                STATUS                     ROLES    AGE     VERSION
    user-gdch-01        Ready                      master   2d22h   v1.23.5-gke.1502
    user-gdch-04        Ready                      none     2d22h   v1.23.5-gke.1502
    user-gdch-05        Ready,SchedulingDisabled   none     2d22h   v1.23.5-gke.1502
    user-gdch-06        Ready                      none     2d22h   v1.23.5-gke.1502
    

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

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

    kubectl get nodepools
    

    响应类似于以下输出:

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

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

    集群在进入维护模式时,还会将以下污点添加到节点:

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

调整节点池的大小

GDC 环境中的任何用户集群都可以调整节点池的大小,以随工作负载的变化而扩缩。如需管理用户集群中的节点池,您必须拥有 User Cluster Admin (user-cluster-admin) 角色。

如需扩缩现有集群中的节点池,请完成以下步骤:

控制台

  1. 在信息中心内,选择要修改的集群所在的项目。
  2. 在导航菜单中,选择集群
  3. 选择节点池关联的集群名称。系统会显示集群详情页面。
  4. 点击节点池标签页。
  5. 选择要调整大小的节点池对应的 修改图标。系统会显示修改节点池提示。
  6. 更新节点数字段,以反映节点池中所需的新节点数量。您可以根据工作负载要求增加或减少节点数量。

  7. 点击保存

  8. 返回到集群的节点池标签页,确认调整大小后的节点池处于 Ready 状态,并且节点数量正确。节点池可能需要几分钟时间才能扩缩到您指定的规模。

    使用控制台确认节点池已准备就绪。

API

  1. 使用 kubectl CLI 通过交互式编辑器打开 Cluster 自定义资源规范:

    kubectl edit clusters.cluster.gdc.goog/USER_CLUSTER_NAME -n platform \
          --kubeconfig ORG_ADMIN_CLUSTER_KUBECONFIG
    
  2. 更新要调整大小的节点池的 nodeCount 字段:

    nodePools:
    ...
    - machineTypeName: n2-standard-2-gdc
      name: nodepool-1
      nodeCount: NUMBER_OF_WORKER_NODES
    

    NUMBER_OF_WORKER_NODES 替换为要在节点池中预配的更新后的工作器节点数量。

  3. 保存文件并退出编辑器。

  4. 通过检查节点池的配置,验证节点伸缩是否已完成:

    kubectl get clusters.cluster.gdc.goog/USER_CLUSTER_NAME -n platform -o json \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG | jq .status.workerNodePoolStatuses
    

    确认 readyNodes 数量反映了您为节点池设置的节点数量。节点池可能需要几分钟时间才能扩缩到您指定的规模。

查看组织中的所有集群

您可以查看组织中的所有可用用户集群,包括其状态、Kubernetes 版本和其他详细信息。

控制台

  • 在导航菜单中,选择集群

    系统会显示组织中的所有可用集群及其状态和其他信息:

    集群详细信息页面,其中显示了组织中每个用户集群的状态和其他信息。

kubectl

  • 列出组织中的可用用户集群:

    kubectl get clusters.cluster.gdc.goog -n platform \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

    输出类似于以下内容:

    NAME        STATE     K8S VERSION
    user-vm-1   Running   1.25.10-gke.2100
    user-test   Running   1.26.5-gke.2100
    

查看可更新的属性

对于每个用户集群,创建后都可以更改一组属性。您只能更改 Cluster 自定义资源的 spec 中可变的属性。并非 spec 中的所有属性都可以在集群配置完毕后进行更新。如需查看这些可更新的属性,请完成以下步骤:

控制台

  1. 在导航菜单中,选择集群

  2. 在用户集群列表中,点击集群名称以查看其属性。

  3. 可修改的属性带有 修改图标。

kubectl

  • 查看 Cluster 规范的属性列表以及与每个属性对应的有效值:

    kubectl explain clusters.cluster.gdc.goog.spec \
        --kubeconfig ORG_ADMIN_CLUSTER_KUBECONFIG
    

    输出类似于以下内容:

    KIND:     Cluster
    VERSION:  cluster.gdc.goog/v1
    
    RESOURCE: spec <Object>
    
    DESCRIPTION:
        <empty>
    
    FIELDS:
      clusterNetwork    <Object>
        The cluster network configuration. If unset, the default configurations
        with pod and service CIDR sizes are used. Optional. Mutable.
    
      initialVersion    <Object>
        The GDCH version information of the user cluster during cluster creation.
        Optional. Default to use the latest applicable version. Immutable.
    
      loadBalancer  <Object>
        The load balancer configuration. If unset, the default configuration with
        the ingress service IP address size is used. Optional. Mutable.
    
      nodePools <[]Object>
        The list of node pools for the cluster worker nodes. Optional. Mutable.
    
      releaseChannel    <Object>
        The release channel a cluster is subscribed to. When a cluster is
        subscribed to a release channel, GDCH maintains the cluster versions for
        users. Optional. Mutable.
    

    您可以使用 GDC 控制台或 kubectl CLI 更新这些设置。例如,您可以调整节点池的大小

扩展 Ingress 服务 IP 地址大小

您可以在创建用户集群后扩缩 Ingress 服务 IP 地址大小。

  1. 使用 kubectl CLI 通过交互式编辑器打开 Cluster 自定义资源规范:

    kubectl edit clusters.cluster.gdc.goog/USER_CLUSTER_NAME -n platform \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    
  2. ingressServiceIPSize 字段更新为新的 IP 地址大小:

    ...
    spec:
    ...
      loadBalancer:
        ingressServiceIPSize: INGRESS_SERVICE_IP_SIZE
    ...
    

    INGRESS_SERVICE_IP_SIZE 替换为更新后的入口服务 IP 地址大小。

  3. 保存文件并退出编辑器。

入口服务 IP 地址大小没有设置限制。系统会根据您的组织满足您请求的 IP 地址数量。如果无法满足请求,集群会报告错误。