自定义符合 CNCF 要求的集群上的系统组件

本页介绍了如何通过应用自定义容忍和标签来自定义 GKE 关联集群中 Google 拥有的系统组件。自定义这些组件后,您可以更精确地管理这些组件在环境中的运行位置和方式。

概览

将集群关联到 Google Cloud时,默认情况下,Google 拥有的系统组件不包含可自定义的字段,例如容忍。因此,您可能会遇到一些问题,例如 Pod 无法在可用节点上调度,导致整个集群的连接和功能受到影响。此外,您可能还需要控制组件在特定节点上的放置和管理,包括能够出于组织和运营目的应用自定义标签。

自定义系统组件可以解决这些问题,让您更好、更灵活地控制这些组件在集群中的运行方式。您可以对 Google 拥有的系统组件应用自定义容忍和标签

  • 借助容忍,Google 的组件可以调度到具有特定 Kubernetes 污点的节点上,从而让您强制执行工作负载隔离或使用专用节点池。自定义容忍直接解决了不可修改的污点阻止正确放置组件的问题。

  • 借助标签,您可以根据自己的运营标准,灵活地对 Google 的系统组件进行分类和标识。借助自定义标签,您可以更好地与现有的监控、日志记录和政策执行工具集成。

限制和局限

有以下限制和局限:

  • 您只能在注册集群时添加自定义容忍和标签。
  • 您可以向集群添加最多 10 个自定义容忍和 10 个自定义标签。
  • 您无法使用以下虚拟机

    • name
    • component
    • app
    • 包含 k8s.iokubernetes.io 的任何标签,因为它们属于 Kubernetes 中的预留标签
    • 包含 google 的任何标签
    • 包含 gke.io 的任何标签

添加自定义容忍

Google 拥有的系统组件 Pod 始终包含以下容忍:

  - key: components.gke.io/gke-managed-components
    operator: Exists

如需指定自定义容忍,请将 --system-component-tolerations 标志添加到 gcloud container attached clusters register 命令:

gcloud container attached clusters register CLUSTER_NAME \
  --location=GOOGLE_CLOUD_REGION \
  ...
  --system-component-tolerations=COMPONENT_TOLERATION \

替换以下内容:

  • CLUSTER_NAME:您的集群的名称。
  • GOOGLE_CLOUD_REGION:要从中管理集群的 Google Cloud 区域
  • COMPONENT_TOLERATION:要添加的容忍的逗号分隔列表。您可以按以下格式提供键、值、运算符和效果:

    • Equal 运算符:请使用 key=value:operator:effect 格式,例如 workload=hpc:Equal:NoSchedule。此设置意味着,仅当污点与 workload=hpc 的键和值完全相同时,Pod 才会容忍该污点。
    • Exists 运算符:请使用 key:operator:effect 格式,例如 workload:Exists:NoSchedule。此设置意味着 Pod 可容忍节点上具有 workload 键的任何污点,而不管值如何。
    • 在任何节点上进行调度:使用 :operator:effect 格式,例如 :Exists:NoSchedule。此设置意味着 Pod 可以容忍节点上具有 NoSchedule 效果的任何污点,并忽略污点的键或值。

    如需查看可使用的运算符和效果列表,请参阅 Kubernetes 文档中的污点和容忍

添加自定义标签

如需指定自定义标签,请将 --system-component-labels 标志添加到 gcloud container attached clusters register 命令:

gcloud container attached clusters register CLUSTER_NAME \
  --location=GOOGLE_CLOUD_REGION \
  ...
  --system-component-labels=COMPONENT_LABEL \

替换以下内容:

  • CLUSTER_NAME:您的集群的名称。
  • GOOGLE_CLOUD_REGION:要从中管理集群的 Google Cloud 区域
  • COMPONENT_LABEL:要添加的一个或多个标签的逗号分隔列表。您以 key=value 格式提供标签和值。例如 env=production,region=us-east-1。虽然每个标签都必须有键,但与该键关联的值可以为空。例如 backend=""

后续步骤