维护 Kubernetes 集群

借助 Google Distributed Cloud (GDC) 空气隔离,您可以在创建 Kubernetes 集群后使用 GKE on GDC 来管理这些集群。借助此服务,您可以根据不断变化的容器工作负载要求进行调整。

准备工作

如需查看和管理 Kubernetes 集群中的节点池,您必须拥有以下角色:

  • User Cluster Admin (user-cluster-admin)
  • 用户集群节点查看器 (user-cluster-node-viewer)

这些角色未绑定到命名空间。

如需针对 Kubernetes 集群运行命令,请确保您拥有以下资源:

  1. 找到 Kubernetes 集群名称,或向平台管理员询问集群名称。

  2. 登录并生成 Kubernetes 集群的 kubeconfig 文件(如果您还没有)。

  3. 使用 Kubernetes 集群的 kubeconfig 路径替换这些说明中的 KUBERNETES_CLUSTER_KUBECONFIG

执行节点维护

如果您需要修复或维护节点,请先将节点置于维护模式。将节点置于维护模式会安全地排空其 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 edit cluster KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    替换 Kubernetes 集群的以下内容:

    • KUBERNETES_CLUSTER_NAME:集群的名称。
    • KUBERNETES_CLUSTER_NAMESPACE:集群的命名空间。
    • KUBERNETES_CLUSTER_KUBECONFIG:kubeconfig 文件的路径。

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

  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 get nodes -n KUBERNETES_CLUSTER_NAME \
        --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    响应如下所示:

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

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

  4. 获取处于维护模式的节点数量:

    kubectl get nodepools --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    响应类似于以下输出:

    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 环境中的任何 KUBERNETES 集群都可以调整其节点池的大小,以随工作负载的变化进行扩缩。如需管理 Kubernetes 集群中的节点池,您必须具有用户集群管理员 (user-cluster-admin) 角色。此角色未绑定到命名空间。

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

控制台

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

  7. 点击保存

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

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

API

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

    kubectl edit clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME -n platform \
          --kubeconfig MANAGEMENT_API_SERVER
    

    替换以下内容:

    • KUBERNETES_CLUSTER_NAME:托管节点池的集群的名称。
    • MANAGEMENT_API_SERVER:托管 Kubernetes 集群的区域 API 服务器的 kubeconfig 路径。如果您尚未为目标地区中的 API 服务器生成 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/KUBERNETES_CLUSTER_NAME -n platform -o json \
        --kubeconfig MANAGEMENT_API_SERVER | jq .status.workerNodePoolStatuses
    

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

在项目层次结构中移动集群

项目可提供服务实例的逻辑分组。您可以向 GDC 项目层次结构添加和从中移除 Kubernetes 集群,以便对服务进行适当的分组。

将项目附加到集群

通过 GDC 控制台创建集群时,您必须先附加至少一个项目,然后才能成功向该集群部署容器工作负载。如果您必须向现有集群添加其他项目,请完成以下步骤:

  1. 在导航菜单中,依次选择 Kubernetes Engine > 集群
  2. 点击集群列表中的集群,以打开集群详情页面。
  3. 选择附加项目
  4. 从项目列表中选择要添加的可用项目。点击保存

将项目从集群中分离

如需将项目从现有 Kubernetes 集群中分离,请完成以下步骤:

  1. 在导航菜单中,依次选择 Kubernetes Engine > 集群
  2. 点击集群列表中的集群,以打开集群详情页面。
  3. 针对要从集群中分离的项目,点击 分离

查看组织中的所有集群

您可以查看组织中的所有可用 Kubernetes 集群,包括其状态、Kubernetes 版本和其他详细信息。由于 Kubernetes 集群是可用区级资源,因此您只能按地区列出集群。

控制台

  • 在导航菜单中,依次选择 Kubernetes Engine > 集群

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

    集群详情页面,用于显示组织中每个 Kubernetes 集群的状态和其他信息。

kubectl

  • 列出组织中相应可用区的可用 Kubernetes 集群:

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

    MANAGEMENT_API_SERVER 替换为区域 API 服务器的 kubeconfig 路径。如果您尚未为目标地区中的 API 服务器生成 kubeconfig 文件,请参阅登录了解详情。

    输出类似于以下内容:

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

查看可更新的属性

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

控制台

  1. 在导航菜单中,依次选择 Kubernetes Engine > 集群

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

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

kubectl

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

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

    MANAGEMENT_API_SERVER 替换为区域 API 服务器的 kubeconfig 路径。如果您尚未为目标地区中的 API 服务器生成 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 GDC air-gapped 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, GDC maintains the cluster versions for
        users. Optional. Mutable.
    

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

扩展 Ingress 服务 IP 地址大小

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

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

    kubectl edit clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME -n platform \
        --kubeconfig MANAGEMENT_API_SERVER
    

    替换以下内容:

    • KUBERNETES_CLUSTER_NAME:提供 IP 地址的集群的名称。
    • MANAGEMENT_API_SERVER:托管 Kubernetes 集群的区域 API 服务器的 kubeconfig 路径。如果您尚未为目标地区中的 API 服务器生成 kubeconfig 文件,请参阅登录了解详情。
  2. ingressServiceIPSize 字段更新为新的 IP 地址大小:

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

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

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

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

升级 Kubernetes 集群

您可以自动或手动升级 Kubernetes 集群。如需详细了解如何升级集群,请参阅集群升级部分。