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 をインストールします。階層型オブザーバビリティや階層型リソース割り当てを有効にしない場合は、指定の行をコメントアウトします。
(省略可)限定公開クラスタを使用している場合は、各クラスタのプロジェクトにファイアウォール ルールを追加して、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 クラスタ内のすべてのノードに適用されるタグ。
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 を追加します。
いくつかのワークロードがデプロイされると、Hierarchy Controller がクラスタで使用可能になります。完了するまでに 1 分ほどかかることがあります。
kubectl
次の手順に沿って Config Sync を構成し、すべてのオプション コンポーネントを含めて Hierarchy Controller をインストールします。階層型オブザーバビリティや階層型リソース割り当てを有効にしない場合は、指定の行をコメントアウトします。
(省略可)限定公開クラスタを使用している場合は、各クラスタのプロジェクトにファイアウォール ルールを追加して、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 クラスタ内のすべてのノードに適用されるタグ。
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...
構成を適用します。
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 をアンインストールするには:
apply-spec.yaml
ファイル内で Hierarchy Controller の構成を編集し、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 を追加します。
Hierarchy Controller が hierarchycontroller.configmanagement.gke.io
ファイナライザを削除すると、アンインストールが完了します。
kubectl
Hierarchy Controller をアンインストールするには、config-management.yaml
ファイルで Config Sync の構成を編集し、hierarchyController.enabled
を false
に設定します。Config Sync によって hierarchycontroller.configmanagement.gke.io
ファイナライザが削除されると、アンインストールが完了します。
Config Sync を完全にアンインストールする場合は、クラスタから Config Sync をアンインストールするをご覧ください。
次のステップ
- Hierarchy Controller の詳細を確認する
- 階層型リソース割り当てを適用する
- 階層型ワークロードを監視する
- 階層型 Namespace の基本的な機能について調べる
- 高度な階層型 Namespace 機能について調べる