创建标准集群以运行容器工作负载

本文档介绍了如何在 Google Distributed Cloud (GDC) 隔离区中创建标准 Kubernetes 集群。标准集群提供项目范围的、高度可配置的 Kubernetes 集群,其中包含一组最少的内置代管式服务。与共享集群相比,标准集群在服务配置方面提供了更大的灵活性,但也需要更多的管理开销。如需详细了解标准集群,请参阅 Kubernetes 集群配置

标准集群是可用区级资源,无法跨多个可用区。如需在多可用区环境中运行集群,您必须在每个可用区中手动创建集群。

本文档面向应用运维人员群组中的应用开发者等受众群体,他们负责管理组织内的容器工作负载。如需了解详情,请参阅 GDC 气隙环境文档的受众群体

准备工作

  • 验证您是否已进行适当的设置,以便访问和管理标准集群。 如需了解详情,请参阅管理对标准集群的访问权限

  • 如需获得创建标准集群所需的权限,请让您的组织 IAM 管理员为您授予项目 IAM 管理员 (project-iam-admin) 和标准集群管理员 (standard-cluster-admin) 角色。这些角色绑定到您的项目命名空间。

  • 针对 Kubernetes 集群规划以下 Google Distributed Cloud (GDC) 网闸隔离配置限制:

    • 每个组织 16 个集群
    • 每个集群 42 个工作器节点,最少 3 个工作器节点
    • 每个集群 4,620 个 pod
    • 每个节点有 110 个 pod

规划 Pod CIDR 地址块

为了为工作负载分配大小合适的 Pod CIDR 块,您必须在创建 Kubernetes 集群之前计算出所需的 IP 地址数量。创建集群后,大多数网络参数便无法更改。

Kubernetes 集群在分配 IP 地址时遵循以下逻辑:

  • Kubernetes 会为每个节点分配一个包含 256 个地址的 /24 CIDR 地址块。此数量符合 Kubernetes 集群中每个节点默认最多 110 个 Pod 的限制。
  • 分配给节点的 CIDR 地址块的大小取决于每个节点的 Pod 数上限值。
  • 该地址块包含的地址数量始终至少是每个节点的最大 pod 数量的两倍。

请参阅以下示例,了解如何计算出每个节点的掩码大小为 /24 的默认值,以容纳 110 个 pod:

Maximum pods per node = 110
Total number of IP addresses required = 2 * 110 = 220

Per node mask size = /24
Number of IP addresses in a /24 = 2(32 - 24) = 256

根据所需的节点数量,确定要为 Kubernetes 集群配置的必需 Pod CIDR 掩码。在配置 CIDR 范围时,请规划未来向集群添加节点:

  Total number of nodes supported = 2(Per node mask size - pod CIDR mask)

鉴于默认的每个节点掩码大小为 /24,请参阅下表,了解 pod CIDR 掩码与支持的节点数量之间的对应关系。

Pod CIDR 掩码 计算公式:2(每个节点的掩码大小 - CIDR 掩码) 支持的节点数上限(包括控制平面节点)
/21 2(24 - 21) 8
/20 2(24-20) 16
/19 2(24 - 19) 32
/18 2(24 - 18) 64

为 Kubernetes 集群计算出 Pod CIDR 地址块后,请在下一部分中将其配置为集群创建工作流的一部分。

创建标准集群

如需创建标准集群,请完成以下步骤:

API

  1. 创建 Cluster 自定义资源并将其保存为 YAML 文件,例如 cluster.yaml

    apiVersion: cluster.gdc.goog/v1
    kind: Cluster
    metadata:
      name: CLUSTER_NAME
      namespace: PROJECT_NAME
    spec:
      clusterNetwork:
        podCIDRSize: POD_CIDR
        serviceCIDRSize: SERVICE_CIDR
      initialVersion:
        kubernetesVersion: KUBERNETES_VERSION
      nodePools:
      - machineTypeName: MACHINE_TYPE
        name: NODE_POOL_NAME
        nodeCount: NUMBER_OF_WORKER_NODES
        taints: TAINTS
        labels: LABELS
        acceleratorOptions:
          gpuPartitionScheme: GPU_PARTITION_SCHEME
      releaseChannel:
        channel: UNSPECIFIED
    

    替换以下内容:

    • CLUSTER_NAME:集群的名称。集群名称不得以 -system 结尾。-system 后缀专为 GDC 创建的集群预留。
    • PROJECT_NAME:要在其中创建集群的项目的名称。
    • POD_CIDR:分配 Pod 虚拟 IP 地址的网络范围的大小。如果未设置,则使用默认值 21
    • SERVICE_CIDR:分配服务虚拟 IP 地址的网络范围的大小。如果未设置,则使用默认值 23
    • KUBERNETES_VERSION:集群的 Kubernetes 版本,例如 1.26.5-gke.2100。如需列出可供配置的 Kubernetes 版本,请参阅列出集群的可用 Kubernetes 版本
    • MACHINE_TYPE:节点池的工作器节点的机器类型。查看可用机器类型,了解可配置的资源。
    • NODE_POOL_NAME:节点池的名称。
    • NUMBER_OF_WORKER_NODES:要在节点池中预配的工作器节点数。
    • TAINTS:要应用于此节点池的节点的污点。这是一个可选字段。
    • LABELS:要应用于此节点池的节点的标签。它包含一个键值对列表。此字段为选填字段。
    • GPU_PARTITION_SCHEME:GPU 分区方案(如果您要运行 GPU 工作负载)。这是一个可选字段。 例如 mixed-2。如果未设置此字段,则 GPU 不会进行分区。如需详细了解可用的多实例 GPU (MIG) 配置文件,请参阅支持的 MIG 配置文件
  2. 将自定义资源应用到您的 GDC 实例:

    kubectl apply -f cluster.yaml --kubeconfig MANAGEMENT_API_SERVER
    

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

标准集群创建过程最多可能需要 60 分钟才能完成。

Terraform

  1. 在 Terraform 配置文件中,插入以下代码段:

    provider "kubernetes" {
      config_path = "MANAGEMENT_API_SERVER"
    }
    
    resource "kubernetes_manifest" "cluster-create" {
      manifest = {
        "apiVersion" = "cluster.gdc.goog/v1"
        "kind" = "Cluster"
        "metadata" = {
          "name" = "CLUSTER_NAME"
          "namespace" = "PROJECT_NAME"
        }
        "spec" = {
          "clusterNetwork" = {
            "podCIDRSize" = "POD_CIDR"
            "serviceCIDRSize" = "SERVICE_CIDR"
          }
          "initialVersion" = {
            "kubernetesVersion" = "KUBERNETES_VERSION"
          }
          "nodePools" = [{
            "machineTypeName" = "MACHINE_TYPE"
            "name" = "NODE_POOL_NAME"
            "nodeCount" = "NUMBER_OF_WORKER_NODES"
            "taints" = "TAINTS"
            "labels" = "LABELS"
            "acceleratorOptions" = {
              "gpuPartitionScheme" = "GPU_PARTITION_SCHEME"
            }
          }]
          "releaseChannel" = {
            "channel" = "UNSPECIFIED"
          }
        }
      }
    }
    

    替换以下内容:

    • MANAGEMENT_API_SERVER:区域 API 服务器的 kubeconfig 路径。如果您尚未为目标地区中的 API 服务器生成 kubeconfig 文件,请参阅登录
    • CLUSTER_NAME:集群的名称。集群名称不得以 -system 结尾。-system 后缀专供 GDC 创建的集群使用。
    • PROJECT_NAME:要在其中创建集群的项目的名称。
    • POD_CIDR:分配 Pod 虚拟 IP 地址的网络范围的大小。如果未设置,则使用默认值 21
    • SERVICE_CIDR:分配服务虚拟 IP 地址的网络范围的大小。如果未设置,则使用默认值 23
    • KUBERNETES_VERSION:集群的 Kubernetes 版本,例如 1.26.5-gke.2100。如需列出可供配置的 Kubernetes 版本,请参阅列出集群的可用 Kubernetes 版本
    • MACHINE_TYPE:节点池的工作器节点的机器类型。查看可用机器类型,了解可配置的资源。
    • NODE_POOL_NAME:节点池的名称。
    • NUMBER_OF_WORKER_NODES:要在节点池中预配的工作器节点数。
    • TAINTS:要应用于此节点池的节点的污点。这是一个可选字段。
    • LABELS:要应用于此节点池的节点的标签。它包含一个键值对列表。此字段为选填字段。
    • GPU_PARTITION_SCHEME:GPU 分区方案(如果您要运行 GPU 工作负载)。这是一个可选字段。 例如 mixed-2。如果未设置此字段,则 GPU 不会进行分区。如需详细了解可用的多实例 GPU (MIG) 配置文件,请参阅支持的 MIG 配置文件
  2. 使用 Terraform 应用新的标准集群:

    terraform apply
    

标准集群创建过程最多可能需要 60 分钟才能完成。

后续步骤