Hierarchy Controller をインストールする

Hierarchy Controller を使用すると、Kubernetes Namespace を階層的に整理し、それらにポリシー(RBAC や階層的なリソース割り当てなど)を適用して、関連する Namespace からのワークロードを監視できます。

このページでは、Hierarchy Controller のインストール、構成、アンインストールの方法について説明します。

始める前に

作業を始める前に、次のことを確認してください。

  • この手順で使用する gcloud コマンドと kubectl コマンドを含む Google Cloud CLI をインストールして初期化します。Cloud Shell を使用する場合、Google Cloud CLI がプリインストールされています。

  • 1.16.x 以降のバージョンの Kubernetes を実行しているクラスタがある。

Hierarchy Controller は Config Sync と緊密に連携して、Git リポジトリを介して階層的な Namespace とポリシーを管理できるように設計されています。この方法を行う場合は、Config Sync のインストール時に非構造化リポジトリを選択することをおすすめします。これにより、階層型ポリシーのメリットを活用しながら、希望どおりにリポジトリを整理できます。これとは対照的に、階層リポジトリは Hierarchy Controller と競合する可能性があるため、この 2 つを併用することは推奨されません。

または、Config Sync リポジトリを構成せずに Hierarchy Controller をインストールすることもできます。階層型 Namespace は、Kubernetes API を介してクラスタ全体で定義できます。Git を使用する予定がない場合は、次のセクションで説明するような場合を除き、Operator に Git へのアクセス権を付与する、または構成する必要はありません。

Hierarchy Controller を有効にする

Hierarchy Controller をインストールするように Config Sync を設定する手順は次のとおりです。

gcloud

次の手順に沿って Config Sync を構成し、すべてのオプション コンポーネントを含めて Hierarchy Controller をインストールします。階層型オブザーバビリティ階層型リソース割り当てを有効にしない場合は、指定の行をコメントアウトします。

  1. (省略可)限定公開クラスタを使用している場合は、各クラスタのプロジェクトにファイアウォール ルールを追加して、GKE クラスタ コントロール プレーンがポート 9443 上の Hierarchy Controller 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 を追加します。

    いくつかのワークロードがデプロイされると、Hierarchy Controller がクラスタで使用可能になります。完了するまでに 1 分ほどかかることがあります。

kubectl

次の手順に沿って Config Sync を構成し、すべてのオプション コンポーネントを含めて Hierarchy Controller をインストールします。階層型オブザーバビリティ階層型リソース割り当てを有効にしない場合は、指定の行をコメントアウトします。

  1. (省略可)限定公開クラスタを使用している場合は、各クラスタのプロジェクトにファイアウォール ルールを追加して、GKE クラスタ コントロール プレーンがポート 9443 上の Hierarchy Controller 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. spec.hierarchyController オブジェクト内の Operator の構成ファイルで、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
    

    いくつかのワークロードがデプロイされると、Hierarchy Controller がクラスタで使用可能になります。完了するまでに 1 分ほどかかることがあります。

kubectl プラグインをインストールする

kubectl などの Kubernetes クライアント ツールを介するだけでも Hierarchy Controller を操作できます。ただし、オープンソースの kubectl-hns kubectl プラグインを使用すると、いくつかのタスクが大幅に簡素化されます。このプラグインは、Hierarchy Controller のコンポーネントである Hierarchical Namespace Controller(HNC)の一部です。

このプラグインは、OSS コミュニティで配布されており、現在は Linux と macOS で利用可能です。ワークステーションにインストールするには、Config Sync ドキュメントの kubectl プラグインのインストールをご覧ください。

インストールを確認する

Hierarchy Controller をインストールした後、インストールが正常に完了したことを確認できます。

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 になります。Hierarchy Controller を有効にしてからステータスが表示されるまでに数分かかる場合があります。

kubectl

Hierarchy Controller が正しくインストールされている場合、その Pod が実行されます。Pod が使用可能になるまでに、何度か再起動される場合があります。

Hierarchy Controller 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

Hierarchy Controller をアップグレードする

Config Sync をアップグレードすると、Hierarchy Controller もアップグレードされます。詳細については、Config Management のアップグレードをご覧ください。

Hierarchy Controller をアンインストールする

クラスタから Hierarchy Controller をアンインストールする手順は次のとおりです。

gcloud

Hierarchy Controller をアンインストールするには:

  1. apply-spec.yaml ファイル内で Hierarchy Controller の構成を編集し、hierarchyController.enabledfalse に設定します。

  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 を追加します。

Hierarchy Controller が hierarchycontroller.configmanagement.gke.io ファイナライザを削除すると、アンインストールが完了します。

kubectl

Hierarchy Controller をアンインストールするには、config-management.yaml ファイルで Config Sync の構成を編集し、hierarchyController.enabledfalse に設定します。Config Sync によって hierarchycontroller.configmanagement.gke.io ファイナライザが削除されると、アンインストールが完了します。

Config Sync を完全にアンインストールする場合は、クラスタから Config Sync をアンインストールするをご覧ください。

次のステップ