安装层次结构控制器

利用层次结构控制器,您可以将 Kubernetes 命名空间整理成层次结构,为其应用政策(如 RBAC 和分层资源配额),并从相关命名空间观察工作负载

本页面介绍了如何安装、配置和卸载层次结构控制器。

准备工作

在开始之前,请确保您已执行以下任务:

  • 安装并初始化 Google Cloud CLI,它提供了以下说明中使用的 gcloudkubectl 命令。如果您使用 Cloud Shell,则系统会预安装 Google Cloud CLI。

  • 拥有运行 Kubernetes 1.16.x 版或更高版本的集群。

层次结构控制器旨在与 Config Sync 紧密协作,可让您通过 Git 代码库管理分层命名空间和政策。如果您选择这样做,建议您在安装 Config Sync 时选择非结构化代码库,以便在保留分层政策优势的同时按照所需的方式整理代码库。相比之下,分层代码库可能与层次结构控制器冲突;不建议同时使用这两者。

或者,您也可以选择安装层次结构控制器,而无需配置 Config Sync 代码库;分层命名空间可以通过 Kubernetes API 完全在集群上定义。如果您不打算使用 Git,则无需按照下文所述,向 Operator 授予对 Git 的访问权限或以任何方式配置 Git。

启用层次结构控制器

请按照以下步骤配置 Policy Controller、Config Sync 和 Config Controller,以安装层次结构控制器。

gcloud

请按照以下步骤配置 Policy Controller、Config Sync 和 Config Controller,以安装层次结构控制器(包括所有可选组件)。如果您不想启用分层可监测性分层资源配额,请对指定行进行注释。

  1. (可选)如果您使用的是专用集群,请向每个集群的项目添加防火墙规则,以允许 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 集群中所有节点的标记。
  2. 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...
    
  3. 应用 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

请按照以下步骤配置 Policy Controller、Config Sync 和 Config Controller,以安装层次结构控制器(包括所有可选组件)。如果您不想启用分层可监测性分层资源配额,请对指定行进行注释。

  1. (可选)如果您使用的是专用集群,请向每个集群的项目添加防火墙规则,以允许 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 集群中所有节点的标记。
  2. 在 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 hierarhical quota:
        enableHierarchicalResourceQuota: true
        # Comment to disable hierarchical observability:
        enablePodTreeLabels: true
       # ...other fields...
    
  3. 应用配置:

      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

升级层次结构控制器

每当升级 Policy Controller、Config Sync 和 Config Controller 时,层次结构控制器都会升级。如需了解详情,请参阅升级 Policy Controller、Config Sync 和 Config Controller

卸载层次结构控制器

请按照以下步骤从集群中卸载层次结构控制器。

gcloud

如需卸载层次结构控制器,请执行以下操作:

  1. 修改 apply-spec.yaml 文件中的层次结构控制器配置,并将 hierarchyController.enabled 设置为 false

  2. 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 文件中修改 Policy Controller、Config Sync 和 Config Controller 配置,并将 hierarchyController.enabled 设置为 false。在 Policy Controller 之后,Config Sync 和 Config Controller 会移除 hierarchycontroller.configmanagement.gke.io 终结器,卸载完成。

如果您要完全卸载 Policy Controller、Config Sync 和 Config Controller,请参阅从集群中卸载 Policy Controller、Config Sync 和 Config Controller

后续步骤