借助 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:NoExecute
baremetal.cluster.gke.io/maintenance:NoSchedule
调整节点池的大小
GDC 环境中的任何 KUBERNETES 集群都可以调整其节点池的大小,以随工作负载的变化进行扩缩。如需管理 Kubernetes 集群中的节点池,您必须具有用户集群管理员 (user-cluster-admin
) 角色。此角色未绑定到命名空间。
如需扩缩现有集群中的节点池,请完成以下步骤:
控制台
- 在信息中心内,选择要修改的集群所在的项目。
- 在导航菜单中,依次选择 Kubernetes Engine > 集群。
- 选择节点池关联的集群名称。系统会显示集群详情页面。
- 点击节点池标签页。
- 选择要调整大小的节点池对应的edit 修改图标。系统会显示修改节点池提示。
更新节点数字段,以反映节点池中所需的新节点数量。您可以根据工作负载要求增加或减少节点数量。
点击保存。
返回到集群的节点池标签页,确认调整大小后的节点池处于
Ready
状态,并且节点数量正确。节点池可能需要几分钟时间才能扩缩到您指定的规模。
API
使用
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 文件,请参阅登录了解详情。
更新要调整大小的节点池的
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 控制台或
kubectl
CLI 更新这些设置。例如,您可以调整节点池的大小。
扩展 Ingress 服务 IP 地址大小
您可以在创建 Kubernetes 集群后扩缩 Ingress 服务 IP 地址大小。
使用
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 文件,请参阅登录了解详情。
将
ingressServiceIPSize
字段更新为新的 IP 地址大小:... spec: ... loadBalancer: ingressServiceIPSize: INGRESS_SERVICE_IP_SIZE ...
将
INGRESS_SERVICE_IP_SIZE
替换为更新后的入口服务 IP 地址大小。保存文件并退出编辑器。
入口服务 IP 地址大小没有设置限制。系统会根据您的组织满足您请求的 IP 地址数量。如果无法满足请求,集群会报告错误。
升级 Kubernetes 集群
您可以自动或手动升级 Kubernetes 集群。如需详细了解如何升级集群,请参阅集群升级部分。