维护 Kubernetes 集群

Google Distributed Cloud (GDC) 网闸隔离配置可让您在创建 Kubernetes 集群后,使用 GKE on GDC 管理这些集群。借助此服务,您可以根据不断变化的容器工作负载要求进行调整,并通过以下工作流维护现有集群节点:

本文档适用于平台管理员组中的 IT 管理员(负责管理托管在跨多个项目的集群中的容器工作负载),以及应用运维人员组中的开发者(负责在单个项目中创建应用工作负载)。如需了解详情,请参阅 GDC 气隙环境的受众群体文档

准备工作

如需完成本文档中的任务,您必须拥有以下资源和角色:

  • 如需在共享 Kubernetes 集群中查看和管理节点池,请让组织 IAM 管理员为您授予以下角色:

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

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

  • 如需查看和管理标准 Kubernetes 集群中的节点池,请让组织 IAM 管理员为您授予 Standard Cluster Admin (standard-cluster-admin) 角色。此角色与您的项目命名空间绑定。

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

    • 找到 Kubernetes 集群名称,或向平台管理员群组的成员询问集群名称。

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

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

  • 如需针对可用区级 API 服务器运行命令,请生成托管集群的可用区级 API 服务器的 kubeconfig 文件。如需了解详情,请参阅登录。 将环境变量 MANAGEMENT_API_SERVER 设置为 kubeconfig 路径。

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

项目提供服务实例的逻辑分组。您可以从 GDC 项目层次结构中添加和移除共享 Kubernetes 集群,以便对服务进行适当的分组。您无法在项目层次结构中移动标准集群,因为它们仅限定于单个项目。

将项目附加到共享集群

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

控制台

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

API

  • 为集群创建新的 ProjectBinding 自定义资源:

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: resourcemanager.gdc.goog/v1
    kind: ProjectBinding
    metadata:
      name: CLUSTER_NAME-PROJECT_NAME
      namespace: platform
      labels:
        resourcemanager.gdc.goog/projectbinding-for-user-project: "true"
    spec:
      clusterRef:
       name: CLUSTER_NAME
      selector:
        nameSelector:
          matchNames:
          - PROJECT_NAME
    EOF
    

    替换以下内容:

    • MANAGEMENT_API_SERVER:区域 API 服务器的 kubeconfig 路径。
    • CLUSTER_NAME:集群的名称。
    • PROJECT_NAME:要将集群绑定到的项目的名称。每个 ProjectBinding 资源只能映射到一个集群。如果项目需要访问多个集群,则必须为每个集群创建唯一的 ProjectBinding

Terraform

  1. 在 Terraform 配置文件中,插入以下代码段以创建 ProjectBinding 自定义资源:

    provider "kubernetes" {
      config_path = "MANAGEMENT_API_SERVER"
    }
    
    resource "kubernetes_manifest" "PROJECT_BINDING_RESOURCE_NAME" {
      manifest = {
        "apiVersion" = "resourcemanager.gdc.goog/v1"
        "kind" = "ProjectBinding"
        "metadata" = {
          "name" = "CLUSTER_NAME-PROJECT_NAME"
          "namespace" = "platform"
          "labels" = {
            "resourcemanager.gdc.goog/projectbinding-for-user-project" = "true"
          }
        }
        "spec" = {
          "clusterRef" = {
            "name" = "CLUSTER_NAME"
          }
          "selector" = {
            "nameSelector" = {
              "matchNames" = [
                "PROJECT_NAME",
              ]
            }
          }
        }
      }
    }
    

    替换以下内容:

    • MANAGEMENT_API_SERVER:区域 API 服务器的 kubeconfig 路径。
    • PROJECT_BINDING_RESOURCE_NAME:项目绑定的 Terraform 资源名称,例如 CLUSTER_NAME-PROJECT_NAME-binding。 此名称供 Terraform 用于标识项目绑定,GDC 不会使用此名称。
    • CLUSTER_NAME:集群的名称。每个 ProjectBinding 资源只能映射到一个集群。如果项目需要访问多个集群,则必须为每个集群创建唯一的 ProjectBinding
    • PROJECT_NAME:要绑定的项目的名称。每个 ProjectBinding 资源只能映射到一个集群。如果项目需要访问多个集群,则必须为每个集群创建一个唯一的 ProjectBinding
  2. 应用新的项目绑定:

    terraform apply
    

从共享集群分离项目

将项目从共享集群中分离可能会带来重大变化,例如删除在集群中运行的工作负载。在将项目从共享集群分离之前,请务必了解相关后果。

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

控制台

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

API

  • 删除关联项目和集群的 ProjectBinding 资源:

    kubectl --kubeconfig MANAGEMENT_API_SERVER delete projectbinding \
        CLUSTER_NAME-PROJECT_NAME -n platform
    

    替换以下内容:

    • MANAGEMENT_API_SERVER:区域 API 服务器的 kubeconfig 路径。
    • CLUSTER_NAME:集群的名称。
    • PROJECT_NAME:要从集群分离的项目的名称。

Terraform

  • 删除项目绑定资源:

    terraform destroy -target kubernetes_manifest.PROJECT_BINDING_RESOURCE_NAME
    

    PROJECT_BINDING_RESOURCE_NAME 替换为要删除的项目绑定的 Terraform 资源名称,例如 CLUSTER_NAME-PROJECT_NAME-binding。 此名称供 Terraform 用于标识项目绑定,GDC 不会使用此名称。

查看组织中的所有集群

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

由于 Kubernetes 集群是可用区级资源,因此您只能按区域列出集群。

控制台

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

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

    集群详情页面,其中包含组织中每个共享集群的状态和其他信息。

gdcloud

  • 列出组织中可用区内的共享集群:

    gdcloud clusters list
    

    输出类似于以下内容:

    CLUSTERREF.NAME   READINESS.STATE   TYPE   CURRENTVERSION.USERCLUSTERVERSION     CURRENTVERSION.SUPPORT.STATUS
    user-vm-1         Ready             user   1.15.0-gdch.394225-1.28.15-gke.1200   In Support
    user-vm-2         Ready             user   1.15.0-gdch.394225-1.29.12-gke.800    In Support
    

API

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

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

    替换以下内容:

    • MANAGEMENT_API_SERVER:区域 API 服务器的 kubeconfig 路径。
    • KUBERNETES_CLUSTER_NAMESPACE:集群的命名空间。对于共享集群,请使用 platform 命名空间。对于标准集群,请使用集群的项目命名空间。

    输出类似于以下内容:

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

列出集群可用的 Kubernetes 版本

您可以列出 GDC 区域中的可用 Kubernetes 版本,以验证您可以在集群中访问的 Kubernetes 功能。

  • 列出您所在可用区中的可用 Kubernetes 版本:

    kubectl get userclustermetadata.upgrade.private.gdc.goog \
        -o=custom-columns=K8S-VERSION:.spec.kubernetesVersion \
        --kubeconfig MANAGEMENT_API_SERVER
    

    MANAGEMENT_API_SERVER 替换为集群的区域 API 服务器的 kubeconfig 文件。

    输出类似于以下内容:

    K8S-VERSION
    1.25.10-gke.2100
    1.26.5-gke.2100
    1.27.4-gke.500
    

查看可更新的属性

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

控制台

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

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

  3. 可修改的媒体资源具有 修改图标。

API

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

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

    MANAGEMENT_API_SERVER 替换为区域 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 更新这些设置。 例如,您可以调整节点池的大小

后续步骤