Terraform を使用してユーザー クラスタを管理する

このページはプラットフォーム管理者を対象としています。

このページでは、Terraform を使用してユーザー クラスタを管理する方法について説明します。

前提条件

管理クラスタにアクセスできるアカウントが必要です。このアカウントには、ユーザー クラスタを管理するための適切な権限が必要です。このアカウントには、プラットフォーム管理者のアクセス権のサブセットと、apiextensions.k8s.io API グループの customresourcedefinitions に対する「list」アクセス権が必要です。このアカウントを使用して、Terraform Kubernetes プロバイダを構成して、ユーザー クラスタ関連のリソースを管理できるようにします。このアカウントには次の固有の権限が必要です。

  • 管理クラスタ内のユーザー クラスタの名前空間に対する完全アクセス権(例: cluster-user-cluster2
  • baremetal.cluster.gke.ioclustersnodepools に対する完全なアクセス権
  • managementcenter.anthos.cloud.google.combootstrapservicebindingsconfigmanagementfeaturespecsconfigmanagementbindingsservicemeshfeaturespecsservicemeshbindings に対する完全なアクセス権
  • apiextensions.k8s.iocustomresourcedefinitions に対する list のアクセス権
  • Anthos Config Management と Anthos Service Mesh をインストールする必要がある場合は、管理クラスタのユーザー クラスタ名前空間の Secret を取得して、ユーザー クラスタに接続するための認証情報を取得する必要があります。

Terraform スクリプトをダウンロードする

Anthos Management Center Console の [サポート] タブから、Terraform スクリプトの tarball ファイルをダウンロードします。ファイルからスクリプトを抽出します。

tar xvf terraform-scripts.tar.gz

Terraform の init を実行して認証を設定する

Terraform の Kubernetes プロバイダを設定して、管理クラスタ API で認証する方法は多数あります。プロバイダの設定に記載されたユースケースに最適な方法を選択してください。管理クラスタに十分な権限がない場合は、インフラストラクチャ オペレータに相談してください。

cd cluster
terraform init

(# TODO 認証)をプロバイダの設定の認証方法の内のいずれかに置き換えます。

ユーザー クラスタを作成する

  1. すべての変数を cluster/terraform.tfvars で指定します。root 権限が付与されていない場合は、login_user_name を指定してください。例:

    admin_cluster_endpoint = "https://10.200.0.100:443"
    cluster_name      = "user-cluster2"
    control_plane_nodes = [
      { "address" = "10.200.0.26" },
      { "address" = "10.200.0.21" },
      { "address" = "10.200.0.22" },
    ]
    control_plane_vip = "10.200.0.110"
    nodepool_nodes = [
      { "address" = "10.200.0.23" },
      { "address" = "10.200.0.25" },
      { "address" = "10.200.0.24" },
    ]
    address_pools = [
      {
        "addresses" = ["10.200.0.111-10.200.0.119"]
        "name"      = "pool1"
      },
    ]
    bootstrap_service            = ["test-bootstrapservice", "test-bootstrapservice-2"]
    anthos_baremetal_version     = "1.9.0"
    
  2. 変更を適用します。コマンドが正常に完了すると、ユーザー クラスタが作成されます。

    terraform apply
    

ユーザー クラスタの破棄

ユーザー クラスタを破棄するには、次のコマンドを使用します。

terraform destroy

リソースの破棄を制御するため、待ち時間を設定します。wait_duration 変数を更新して調整することをおすすめします。待ち時間を設定する理由は、Kubernetes のプロバイダに機能がないためです(この機能のリクエストをご覧ください)。

問題によりユーザー クラスタの作成が保留中の場合は、terraform destroy を使用しないでください。代わりに、手動でインストールをクリーンアップします。

  1. terraform コマンドを停止します。

  2. Management Center Console からユーザー クラスタを削除します。

  3. terraform.tfstate ファイルを削除します。

Anthos Config Management と Anthos Service Mesh を有効にする

Anthos Config Management と Anthos Service Mesh を有効にするには、次の手順を行います。

  1. features Terraform プロジェクトのため、Terraform を init します。

      cd features
      terraform init
    
  2. 管理クラスタに認証を設定します。

  3. /etc/ssh-key/key 内の git リポジトリに秘密鍵を配置します。

  4. activate_acmactivate_asm を true に設定し、関連するすべての変数を定義します。例:

    cluster_name                 = "user-cluster2"
    admin_cluster_endpoint       = "https://10.200.0.100:443"
    user_cluster_ca_certificate  = ""
    activate_acm                 = true
    version_acm                  = "1.7.1"
    enable_acm_policy_controller = true
    acm_git_repo = {
      git_repo_url    = "git@github.com:example/example.git"
      git_repo_branch = "main"
      git_policy_dir  = "."
      git_secret_type = "ssh"
    }
    activate_asm = true
    version_asm  = "1.9.6-asm.1"
    
  5. 変更を適用します。

    terraform apply
    
  6. (省略可)必要に応じて、Anthos Service Mesh の待機時間を調整します。これを行うには、wait_duration 変数を更新します。

Anthos Config Management と Anthos Service Mesh を無効にする

Anthos Config Management を削除する前に、Anthos Config Management によりクラスタ内で同期されているすべてのリソースを削除することをおすすめします。

tfstate から git-creds シークレットと config-management-system を削除します。Anthos Config Management Operator は、ConfigManagementBindingConfigManagementFeatureSpec が削除された後にユーザー クラスタ内のリソースを削除します。Anthos Config Management は、直ちには Management Center でアンインストール済みとして表示されません。オペレーターがすべてを削除するまでに 5~10 分を要する場合があります。

terraform state rm kubernetes_namespace.config-management-system
terraform state rm kubernetes_secret.git-creds
terraform destroy

既知の問題

  • 現在、クラスタを更新することはできません。問題 1378 により、プロバイダは更新をリリースするときに、既存リソースのファイナライザの削除を試みます。

  • 問題 1357 により、ユーザー クラスタと Anthos Service Mesh の破棄コマンドは、待ち時間に依存します。クラスタのサイズによっては、待ち時間の調整が必要になることがあります。

  • クラスタが Management Center よりも早く Terraform に準備完了と表示されます(プロバイダによる kubernetes_manifest データのサポートによってブロックされるため)。

  • terraform destroy を使用して Anthos Config Management を削除するには、まず tfstate からリソースを削除する必要があります。詳細については、Anthos Config Management と Anthos Service Mesh を無効にするをご覧ください。Anthos Config Management は直ちには Management Center でアンインストール済みとして表示されません。オペレーターがすべての項目を削除するまでに 5~10 分を要する場合があります。

  • terraform destroy コマンドは、ユーザー クラスタの名前空間を削除します。プラットフォーム管理者には、管理クラスタ内の名前空間を削除する権限がありません。このため、コマンドが失敗する可能性があります。

制限事項

  • 現在のコードは単一のユーザー クラスタを作成するものです。

  • 現在のコードには、OIDC を構成する機能は含まれていません。このパートでは、kubernetes_manifest リソースの Kubernetes プロバイダのパッチ機能が必要です。

次のステップ