利用层次结构控制器,您可以将 Kubernetes 命名空间整理成层次结构,为其应用政策(如 RBAC 和分层资源配额),并从相关命名空间观察工作负载。
本页面介绍了如何安装、配置和卸载层次结构控制器。
准备工作
在开始之前,请确保您已执行以下任务:
安装并初始化 Google Cloud CLI,它提供了以下说明中使用的
gcloud
和kubectl
命令。如果您使用 Cloud Shell,则系统会预安装 Google Cloud CLI。拥有运行 Kubernetes 1.16.x 版或更高版本的集群。
层次结构控制器旨在与 Config Sync 紧密协作,可让您通过 Git 代码库管理分层命名空间和政策。如果您选择这样做,建议您在安装 Config Sync 时选择非结构化代码库,以便在保留分层政策优势的同时按照所需的方式整理代码库。相比之下,分层代码库可能与层次结构控制器冲突;不建议同时使用这两者。
或者,您也可以选择安装层次结构控制器,而无需配置 Config Sync 代码库;分层命名空间可以通过 Kubernetes API 完全在集群上定义。如果您不打算使用 Git,则无需按照下文所述,向 Operator 授予对 Git 的访问权限或以任何方式配置 Git。
启用层次结构控制器
请按照以下步骤配置 Config Sync 以安装层次结构控制器。
gcloud
按照以下步骤配置 Config Sync 以安装层次结构控制器(包括所有可选组件)。如果您不想启用分层可监测性或分层资源配额,请对指定行进行注释。
(可选)如果您使用的是专用集群,请向每个集群的项目添加防火墙规则,以允许 GKE 集群控制层面连接到端口
9443
上的层次结构控制器 webhook:gcloud compute firewall-rules create allow-cluster-control-plane-tcp-9443 \ --allow tcp:9443 \ --network default \ --source-ranges CONTROL_PLANE_CIDR \ --target-tags NODE_TAG
请替换以下内容:
CONTROL_PLANE_CIDR
:GKE 集群控制层面的 IP 地址范围,例如172.16.0.16/28
。NODE_TAG
:应用于 GKE 集群中所有节点的标记。
在 gcloud 配置文件中将
spec.hierarchyController
对象中的以下值设置为true
:# apply-spec.yaml applySpecVersion: 1 spec: hierarchyController: # Set to true to enable hierarchical namespaces enabled: true # Comment to disable hierarchical quota: enableHierarchicalResourceQuota: true # Comment to disable hierarchical observability: enablePodTreeLabels: true # ...other fields...
应用
apply-spec.yaml
文件:gcloud beta container fleet config-management apply \ --membership=CLUSTER_NAME \ --config=CONFIG_YAML \ --project=PROJECT_ID
请替换以下内容:
- CLUSTER_NAME:添加您要将此配置应用于的已注册集群。
- CONFIG_YAML:添加
apply-spec.yaml
文件的路径。 - PROJECT_ID:添加您的项目 ID。
几项工作负载得到部署,然后层次结构控制器在集群上变得可用。此过程最多可能需要一分钟才能完成。
kubectl
按照以下步骤配置 Config Sync 以安装层次结构控制器(包括所有可选组件)。如果您不想启用分层可监测性或分层资源配额,请对指定行进行注释。
(可选)如果您使用的是专用集群,请向每个集群的项目添加防火墙规则,以允许 GKE 集群控制层面连接到端口
9443
上的层次结构控制器 webhook:gcloud compute firewall-rules create allow-cluster-control-plane-tcp-9443 \ --allow tcp:9443 \ --network default \ --source-ranges CONTROL_PLANE_CIDR \ --target-tags NODE_TAG
请替换以下内容:
CONTROL_PLANE_CIDR
:GKE 集群控制层面的 IP 地址范围,例如172.16.0.16/28
。NODE_TAG
:应用于 GKE 集群中所有节点的标记。
在 Operator 的配置文件中的
spec.hierarchyController
对象中,将enabled
的值设置为true
:# config-management.yaml apiVersion: configmanagement.gke.io/v1 kind: ConfigManagement metadata: name: config-management spec: # Set to true to enable hierarchical namespaces hierarchyController: enabled: true # Comment to disable hierarchical quota: enableHierarchicalResourceQuota: true # Comment to disable hierarchical observability: enablePodTreeLabels: true # ...other fields...
应用配置:
kubectl apply -f config-management.yaml
几项工作负载得到部署,然后层次结构控制器在集群上变得可用。此过程最多可能需要一分钟才能完成。
安装 kubectl
插件
您可以完全通过 Kubernetes 客户端工具(如 kubectl
)与层次控制器进行交互。不过,开源 kubectl-hns
kubectl 插件极大地简化了多项任务。此插件是分层命名空间控制器 (HNC) 的一部分,后者是层次结构控制器的一个组件。
此插件由 OSS 社区分发,目前适用于 Linux 和 macOS。如需在工作站上安装该插件,请参阅 Config Sync 文档中的安装 kubectl
插件。
验证安装
安装层次结构控制器后,您可以验证安装是否已成功完成。
gcloud
运行以下命令:
gcloud beta container fleet config-management status \
--project=PROJECT_ID
将 PROJECT_ID
替换为您的项目 ID。
您应该会看到类似于以下示例的输出:
Name ...other columns... Hierarchy_Controller
CLUSTER_NAME ...other fields ... INSTALLED
成功安装的 Hierarchy_Controller
列中的状态为 INSTALLED
。启用层次结构控制器后,状态可能需要几分钟才能显示。
kubectl
如果层次结构控制器已正确安装,则其 Pod 将运行。Pod 在可用之前可能会重启几次。
由于层次结构控制器 pod 在 hnc-system
命名空间中运行,因此您可以通过运行以下命令来查看其状态:
kubectl get pods -n hnc-system
您应该会看到类似于以下示例的输出:
NAME READY STATUS RESTARTS AGE gke-hc-controller-manager-6f4dbb484d-t8tdm 2/2 Running 1 1m hnc-controller-manager-7b75655894-tzqvx 2/2 Running 1 1m
升级层次结构控制器
每当升级 Config Sync 时,层次结构控制器也会升级。如需了解详情,请参阅升级 Config Sync。
卸载层次结构控制器
请按照以下步骤从集群中卸载层次结构控制器。
gcloud
如需卸载层次结构控制器,请执行以下操作:
修改
apply-spec.yaml
文件中的层次结构控制器配置,并将hierarchyController.enabled
设置为false
。在
apply-spec.yaml
文件中应用更改:gcloud beta container fleet config-management apply \ --membership=CLUSTER_NAME \ --config=CONFIG_YAML \ --project=PROJECT_ID
请替换以下内容:
- CLUSTER_NAME:添加您要将此配置应用于的已注册集群。
- CONFIG_YAML:添加
apply-spec.yaml
文件的路径。 - PROJECT_ID:添加您的项目 ID。
在层次结构控制器移除 hierarchycontroller.configmanagement.gke.io
终结器后,卸载即告完成。
kubectl
如需卸载层次结构控制器,请在 config-management.yaml
文件中修改 Config Sync 配置,并将 hierarchyController.enabled
设置为 false
。在 Config Sync 移除 hierarchycontroller.configmanagement.gke.io
终结器后,卸载即完成。
若要完全卸载 Config Sync,请参阅从集群中卸载 Config Sync。