借助 Google Distributed Cloud (GDC) 空气隔离,您可以在创建 Kubernetes 集群后使用 GKE on GDC 来管理这些集群。借助此服务,您可以根据不断变化的容器工作负载要求进行调整。
准备工作
如需查看和管理 Kubernetes 集群中的节点池,您必须拥有以下角色:
- User Cluster Admin (
user-cluster-admin) - 用户集群节点查看器 (
user-cluster-node-viewer)
这些角色未绑定到命名空间。
如需针对 Kubernetes 集群运行命令,请确保您拥有以下资源:
找到 Kubernetes 集群名称,或向平台管理员询问集群名称。
登录并生成 Kubernetes 集群的 kubeconfig 文件(如果您还没有)。
使用 Kubernetes 集群的 kubeconfig 路径替换这些说明中的
KUBERNETES_CLUSTER_KUBECONFIG。
执行节点维护
如果您需要修复或维护节点,请先将节点置于维护模式。将节点置于维护模式会安全地排空其 pod 和工作负载,并将节点排除在 pod 调度外。在维护模式下,您可以在节点上运行,而不会有中断 Pod 流量的风险。
工作原理
GDC 的维护模式类似于为特定节点运行 kubectl
cordon 和 kubectl drain。以下是与维护模式相关的一些详细信息:
- 指定的节点会被标记为无法安排。此操作是
kubectl cordon的功能。 - 节点污点会被添加到指定节点,以指示在这些节点上无法安排或执行任何 Pod。此操作类似于
kubectl drain。 - 系统会强制执行 20 分钟的超时,以确保节点不会因等待 Pod 终止而停滞。如果 Pod 被配置为容忍所有污点或具有终结器,则其可能不会终止。GDC 集群会尝试终止所有 Pod,但如果超时,节点将进入维护模式。此超时可防止正在运行的 Pod 阻止升级。
- 如果您在节点上运行基于虚拟机的工作负载,则 GDC 集群会将
NodeSelector应用于虚拟机实例 (VMI) pod,然后停止该 pod。NodeSelector可确保从维护模式中移除节点时,VMI Pod 在同一节点上重启。
将节点置于维护模式
在集群配置文件的 maintenanceBlocks 部分中,通过为所选节点指定 IP 地址范围,选择要置于维护模式的节点。您选择的节点必须处于 Ready 状态,且在集群中正常运行。
如需将节点置于维护模式,请执行以下操作:
修改集群配置文件以选择要置于维护模式的节点。
您可以使用自己选择的编辑器修改配置文件,也可以运行以下命令直接修改集群自定义资源:
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 文件的路径。
应用集群配置后,集群会将适用的节点置于维护模式。
将
maintenanceBlocks部分添加到集群配置文件,以指定要置于维护模式的节点的单个 IP 地址或地址范围。以下示例展示了如何通过指定 IP 地址范围来选择多个节点:
... metadata: name: my-cluster namespace: cluster-my-cluster spec: maintenanceBlocks: cidrBlocks: - 172.16.128.1-172.16.128.64 ...获取集群中节点的状态:
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表示节点处于维护模式。获取处于维护模式的节点数量:
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:NoExecutebaremetal.cluster.gke.io/maintenance:NoSchedule
调整节点池的大小
GDC 环境中的任何 KUBERNETES 集群都可以调整其节点池的大小,以随工作负载的变化进行扩缩。如需管理 Kubernetes 集群中的节点池,您必须具有用户集群管理员 (user-cluster-admin) 角色。此角色未绑定到命名空间。
如需扩缩现有集群中的节点池,请完成以下步骤:
控制台
- 在信息中心内,选择要修改的集群所在的项目。
- 在导航菜单中,依次选择 Kubernetes Engine > 集群。
- 选择节点池关联的集群名称。系统会显示集群详情页面。
- 点击节点池标签页。
- 选择要调整大小的节点池对应的edit 修改图标。系统会显示修改节点池提示。
更新节点数字段,以反映节点池中所需的新节点数量。您可以根据工作负载要求增加或减少节点数量。
点击保存。
返回到集群的节点池标签页,确认调整大小后的节点池处于
Ready状态,并且节点数量正确。节点池可能需要几分钟时间才能扩缩到您指定的规模。
API
使用
kubectlCLI 通过交互式编辑器打开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 文件,请参阅登录了解详情。
更新要调整大小的节点池的
nodeCount字段:nodePools: ... - machineTypeName: n2-standard-2-gdc name: nodepool-1 nodeCount: NUMBER_OF_WORKER_NODES将
NUMBER_OF_WORKER_NODES替换为要在节点池中预配的更新后的工作器节点数量。保存文件并退出编辑器。
通过检查节点池的配置,验证节点伸缩是否已完成:
kubectl get clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME -n platform -o json \ --kubeconfig MANAGEMENT_API_SERVER | jq .status.workerNodePoolStatuses确认
readyNodes数量反映了您为节点池设置的节点数量。节点池可能需要几分钟时间才能扩缩到您指定的规模。
在项目层次结构中移动集群
项目可提供服务实例的逻辑分组。您可以向 GDC 项目层次结构添加和从中移除 Kubernetes 集群,以便对服务进行适当的分组。
将项目附加到集群
通过 GDC 控制台创建集群时,您必须先附加至少一个项目,然后才能成功向该集群部署容器工作负载。如果您必须向现有集群添加其他项目,请完成以下步骤:
- 在导航菜单中,依次选择 Kubernetes Engine > 集群。
- 点击集群列表中的集群,以打开集群详情页面。
- 选择附加项目。
- 从项目列表中选择要添加的可用项目。点击保存。
将项目从集群中分离
如需将项目从现有 Kubernetes 集群中分离,请完成以下步骤:
- 在导航菜单中,依次选择 Kubernetes Engine > 集群。
- 点击集群列表中的集群,以打开集群详情页面。
针对要从集群中分离的项目,点击 delete 分离。
查看组织中的所有集群
您可以查看组织中的所有可用 Kubernetes 集群,包括其状态、Kubernetes 版本和其他详细信息。由于 Kubernetes 集群是可用区级资源,因此您只能按地区列出集群。
控制台
在导航菜单中,依次选择 Kubernetes Engine > 集群。
系统会显示组织中的所有可用集群及其状态和其他信息:

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 中的所有属性都可以在集群配置完毕后进行更新。如需查看这些可更新的属性,请完成以下步骤:
控制台
在导航菜单中,依次选择 Kubernetes Engine > 集群。
在 Kubernetes 集群列表中,点击集群名称以查看其属性。
可修改的属性带有edit 修改图标。
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 控制台或
kubectlCLI 更新这些设置。例如,您可以调整节点池的大小。
扩展 Ingress 服务 IP 地址大小
您可以在创建 Kubernetes 集群后扩缩 Ingress 服务 IP 地址大小。
使用
kubectlCLI 通过交互式编辑器打开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 文件,请参阅登录了解详情。
将
ingressServiceIPSize字段更新为新的 IP 地址大小:... spec: ... loadBalancer: ingressServiceIPSize: INGRESS_SERVICE_IP_SIZE ...将
INGRESS_SERVICE_IP_SIZE替换为更新后的入口服务 IP 地址大小。保存文件并退出编辑器。
入口服务 IP 地址大小没有设置限制。系统会根据您的组织满足您请求的 IP 地址数量。如果无法满足请求,集群会报告错误。
升级 Kubernetes 集群
您可以自动或手动升级 Kubernetes 集群。如需详细了解如何升级集群,请参阅集群升级部分。