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

创建 Kubernetes 集群,以允许部署容器工作负载。集群是可用区级资源,不能跨多个可用区。如需在多可用区部署中运行集群,您必须在每个可用区中手动创建集群。

准备工作

如需获得创建 Kubernetes 集群所需的权限,请让您的组织 IAM 管理员为您授予 User Cluster Admin 角色 (user-cluster-admin)。此角色未绑定到命名空间。

Google Distributed Cloud (GDC) air-gapped 对 Kubernetes 集群有以下限制:

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

配置 pod CIDR 地址块

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

  • Kubernetes 为每个节点分配一个包含 256 个地址的 /24 CIDR 地址块。此数量符合用户集群中每个节点的默认 Pod 数上限 (110)。
  • 分配给节点的 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

根据所需的节点数量,确定要为用户集群配置的必需 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 集群

完成以下步骤以创建 Kubernetes 集群:

控制台

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

  2. 点击创建集群

  3. 名称字段中,指定集群的名称。

  4. 选择集群的 Kubernetes 版本。

  5. 选择要在其中创建集群的可用区。

  6. 点击关联项目,然后选择要关联到集群的现有项目。然后,点击保存。您可以在创建集群后,从项目详情页面附加或分离项目。您必须先将项目附加到集群,然后才能在其中部署容器工作负载。

    使用控制台创建集群。

  7. 点击下一步

  8. 为集群配置网络设置。创建集群后,您将无法更改这些网络设置。Kubernetes 集群的默认且唯一受支持的互联网通信协议是互联网通信协议第四版 (IPv4)。

    1. 如果您想创建专用负载均衡器节点,请输入要创建的节点数。默认情况下,您会收到零个节点,并且负载平衡器流量会通过控制节点运行。

    2. 选择要使用的服务 CIDR(无类别域间路由)。您的已部署服务(例如负载平衡器)会从此范围中分配 IP 地址。

    3. 选择要使用的 Pod CIDR。集群会从此范围中为您的 Pod 和虚拟机分配 IP 地址。

    4. 点击下一步

  9. 查看为集群自动生成的默认节点池的详细信息。点击 修改以修改默认节点池。

  10. 如需创建其他节点池,请选择添加节点池。在修改默认节点池或添加新节点池时,您可以使用以下选项对其进行自定义:

    1. 为节点池分配名称。创建节点池后,您将无法修改名称。
    2. 指定要在节点池中创建的工作器节点数。
    3. 选择最符合工作负载要求的机器类。 查看以下设置的列表:

      • 机器类型
      • CPU
      • 内存
    4. 点击保存

  11. 点击创建以创建集群。

API

如需直接使用 API 创建新集群,请将自定义资源应用到您的 GDC 实例:

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

    apiVersion: cluster.gdc.goog/v1
    kind: Cluster
    metadata:
      name: CLUSTER_NAME
      namespace: platform
    spec:
      clusterNetwork:
        podCIDRSize: POD_CIDR
        serviceCIDRSize: SERVICE_CIDR
      initialVersion:
        kubernetesVersion: KUBERNETES_VERSION
      loadBalancer:
        ingressServiceIPSize: LOAD_BALANCER_POOL_SIZE
      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 创建的集群预留。
    • POD_CIDR:分配 Pod 虚拟 IP 地址的网络范围的大小。如果未设置,则使用默认值 21
    • SERVICE_CIDR:从中分配服务虚拟 IP 地址的网络范围的大小。如果未设置,则使用默认值 23
    • KUBERNETES_VERSION:集群的 Kubernetes 版本,例如 1.26.5-gke.2100。如需列出可供配置的 Kubernetes 版本,请参阅列出集群的可用 Kubernetes 版本
    • LOAD_BALANCER_POOL_SIZE:负载均衡器服务使用的不重叠 IP 地址池的大小。如果未设置,则使用默认值 20
    • 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 文件,请参阅登录了解详情。

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" = "platform"
        }
        "spec" = {
          "clusterNetwork" = {
            "podCIDRSize" = "POD_CIDR"
            "serviceCIDRSize" = "SERVICE_CIDR"
          }
          "initialVersion" = {
            "kubernetesVersion" = "KUBERNETES_VERSION"
          }
          "loadBalancer" = {
            "ingressServiceIPSize" = "LOAD_BALANCER_POOL_SIZE"
          }
          "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 创建的集群预留。
    • POD_CIDR:分配 Pod 虚拟 IP 地址的网络范围的大小。如果未设置,则使用默认值 21
    • SERVICE_CIDR:从中分配服务虚拟 IP 地址的网络范围的大小。如果未设置,则使用默认值 23
    • KUBERNETES_VERSION:集群的 Kubernetes 版本,例如 1.26.5-gke.2100。如需列出可供配置的 Kubernetes 版本,请参阅列出集群的可用 Kubernetes 版本
    • LOAD_BALANCER_POOL_SIZE:负载均衡器服务使用的不重叠 IP 地址池的大小。如果未设置,则使用默认值 20
    • MACHINE_TYPE:节点池的工作器节点的机器类型。查看可用机器类型,了解可配置的资源。
    • NODE_POOL_NAME:节点池的名称。
    • NUMBER_OF_WORKER_NODES:要在节点池中预配的工作器节点数。
    • TAINTS:要应用于此节点池的节点的污点。这是一个可选字段。
    • LABELS:要应用于此节点池的节点的标签。它包含一个键值对列表。此字段为可选字段。
    • GPU_PARTITION_SCHEME:GPU 分区方案(如果您要运行 GPU 工作负载)。例如 mixed-2。如果未设置此字段,则 GPU 不会进行分区。如需了解可用的多实例 GPU (MIG) 配置文件,请参阅支持的 MIG 配置文件
  2. 使用 Terraform 应用新的 Kubernetes 集群:

    terraform apply
    

列出集群可用的 Kubernetes 版本

您可以使用 kubectl CLI 列出 GDC 实例中的可用 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

支持集群中的 GPU 工作负载

Distributed Cloud 为 Kubernetes 集群提供 NVIDIA GPU 支持,并将 GPU 设备作为用户工作负载运行。例如,您可能更喜欢在 GPU 环境中运行人工智能 (AI) 和机器学习 (ML) Notebook。在利用 AI 和 ML Notebook 之前,请确保您的集群支持 GPU 设备。对于已预配 GPU 机器的集群,默认启用 GPU 支持。

您可以使用 GDC 控制台或直接通过 API 创建集群。确保为集群预配 GPU 机器,以便在关联的容器中支持 GPU 工作负载。如需了解详情,请参阅创建 Kubernetes 集群

GPU 是静态分配的。前四个 GPU 始终专用于预训练的人工智能 (AI) 和机器学习 (ML) API 等工作负载。这些 GPU 不在 Kubernetes 集群上运行。剩余的 GPU 可供 Kubernetes 集群使用。AI 和 ML Notebook 在 Kubernetes 集群上运行。

请务必为正确的集群类型分配 GPU 机器,以确保可以使用 AI 和 ML API 以及笔记本等组件。