すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Terraform を使用したコンポーネントの管理

最終更新日:Dec 23, 2025

Container Service for Kubernetes は、クラスターの機能を拡張するための豊富なコンポーネントセットを提供します。このトピックでは、Terraform を使用してコンポーネントを設定し、さまざまなシナリオでビジネスを管理する方法について説明します。

コンポーネントの種類

ACK は、システムコンポーネントとオプションコンポーネントの 2 種類のクラスターコンポーネントを管理します。コンポーネントの詳細については、「コンポーネント」をご参照ください。

システムコンポーネント

システムコンポーネントは、ACK クラスターを実行するために必要な基本コンポーネントです。クラスターの作成時にデフォルトでインストールされます。例は次のとおりです。

  • kube-apiserver

  • kube-controller-manager

  • cloud-controller-manager

  • kube-proxy

  • CoreDNS

オプションコンポーネント

オプションコンポーネントはデプロイに必須ではありません。これらをインストールすることで、クラスターの機能を拡張できます。オプションコンポーネントは、アプリケーション管理、ログとモニタリング、ストレージ、ネットワーク、およびセキュリティコンポーネントに分類されます。

コンソールでのコンポーネント管理用の Terraform 呼び出しパラメーターの生成

コンソールでコンポーネントの Terraform 呼び出しパラメーター設定を生成して、コンポーネント管理の効率と使いやすさを向上させることができます。

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、アドオン管理 をクリックします。

  3. [コンポーネント管理] ページで、コンポーネントを検索します。コンポーネントカードで、必要に応じて [インストール] または [設定] をクリックします。

  4. 表示されるダイアログボックスで、[等価なコード] をクリックします。右側に表示されるパネルで、[Terraform] タブをクリックします。タブには、コンポーネントのインストールまたは設定のためのパラメーターが表示されます。これらのパラメーターをコピーして使用できます。

コンポーネント管理の実践

Terraform を使用して、クラスター作成時にインストールするコンポーネントを指定できます。クラスターが作成された後、コンポーネントの完全なライフサイクルを管理できます。このセクションでは、クラスターコンポーネントのライフサイクルを管理する方法と、さまざまなシナリオでのベストプラクティスについて説明します。

クラスター作成時にインストールするコンポーネントの指定

クラスター作成時にインストールするコンポーネントを指定できます。クラスターを作成する際には、次のリソースが関与します。

  • ACK マネージドクラスター:alicloud_cs_managed_kubernetes

  • ACK 専用クラスター:alicloud_cs_kubernetes

  • ACK エッジクラスター:alicloud_cs_edge_kubernetes

  • ACK Serverless クラスター:alicloud_cs_serverless_kubernetes

これらのリソースの addons 属性を使用して、クラスター作成時にインストールするコンポーネントを定義できます。addons 属性は次のように定義されます。

# マネージドクラスターを例にとります。
resource "alicloud_cs_managed_kubernetes" "default" {
  # その他のパラメーター。
  # ...

  # addons 属性はリストです。リソースで addons 属性を定義して、クラスター作成時にコンポーネントをインストールします。
  addons {
    # コンポーネントの名前。データソースで alicloud_cs_kubernetes_addons を使用してクエリできます。
    # 現在のクラスターにインストール済みおよびインストール可能なコンポーネントとそのバージョン情報。
    name = "XXX"

    # コンポーネントのカスタムパラメーター。一部のクラスターコンポーネントはカスタムパラメーター設定をサポートしています。このフィールドを使用して、コンポーネントのカスタムパラメーターを指定できます。パラメーターの指定方法の詳細については、「クラスターコンポーネントのカスタム設定パラメーターの変更」セクションをご参照ください。
    config = jsonencode(
      {
        ....
      }
    )

    # このパラメーターのデフォルト値は false (ブール値) です。ACK は、クラスター管理を容易にするために、デフォルトで一部のコンポーネントをインストールします。クラスター作成時にこれらのコンポーネントをインストールしたくない場合は、disabled を true に設定します。
    disabled = XXX
  }
}
重要

クラスターリソースで `addons` を指定してコンポーネントをインストールできるのは、クラスター作成時のみです。クラスターが作成された後は、`addons` コードブロックの属性を変更してコンポーネントのライフサイクルを管理することはできません。たとえば、コンポーネントのアップグレード、アンインストール、または設定の更新はできません。クラスター作成後にコンポーネントのライフサイクルを管理するには、「クラスター作成後のコンポーネントのライフサイクル管理」をご参照ください。

次の表に、ACK でのコンポーネントの設定方法を示します。

コンポーネント名

コンポーネントの種類

コンポーネントの説明

Terraform の設定

appcenter

アプリケーション管理

複数クラスターのアプリケーションデプロイメントとアプリケーションライフサイクルを統合管理するアプリケーションセンターコンポーネント。

addon { name = "appcenter" }

progressive-delivery-tool

アプリケーション管理

アプリケーションに段階的リリースを提供するコンポーネント。

addon { name = "progressive-delivery-tool" }

alicloud-monitor-controller

ログとモニタリング

ACK が提供する、CloudMonitor に接続するためのシステムコンポーネント。

addon { name = "alicloud-monitor-controller" }

metrics-server

ログとモニタリング

ACK がオープンソースのモニタリングコンポーネントをベースに修正・強化したモニタリングおよびオフラインコンポーネント。データ消費用の Metrics API を提供し、Horizontal Pod Autoscaler (HPA) をサポートします。

addon { name = "metrics-server" }

ack-node-problem-detector

ログとモニタリング

ACK がオープンソースプロジェクトをベースに修正・強化したクラスターノード異常監視コンポーネント。サードパーティのモニタリングプラットフォームに接続できます。

addons { name = "ack-node-problem-detector" }

ags-metrics-collector

ログとモニタリング

遺伝子コンピューティングのお客様向けのモニタリングサービスコンポーネント。このコンポーネントを使用して、遺伝子ワークフロー内の各ノードのリソース使用量の詳細を監視できます。

addons { name = "ags-metrics-collector" }

ack-arms-prometheus

ログとモニタリング

Alibaba Cloud Prometheus を使用して ACK クラスターを監視します。

addons { name = "arms-prometheus" }

loongcollector

ログとモニタリング

Simple Log Service を使用して Kubernetes コンテナーログを収集します。

addons { name = "loongcollector" }

csi-plugin

ストレージコンポーネント

ボリュームのアタッチとデタッチをサポートします。クラスター作成時に CSI プラグインを選択して Alibaba Cloud ストレージに接続すると、このコンポーネントはデフォルトでインストールされます。

addons { name = "csi-plugin" }

csi-provisioner

ストレージコンポーネント

ボリュームの自動作成をサポートします。クラスター作成時に CSI プラグインを選択して Alibaba Cloud ストレージに接続すると、このコンポーネントはデフォルトでインストールされます。

addons { name = "csi-plugin" }

storage-operator

ストレージコンポーネント

ストレージコンポーネントのライフサイクルを管理します。

addons { name = "storage-operator" }

alicloud-disk-controller

ストレージコンポーネント

ディスクボリュームの自動作成をサポートします。

addons { name = "alicloud-disk-controller" }

flexvolume

ストレージコンポーネント

Kubernetes コミュニティによって実装された初期のストレージボリューム拡張メカニズム。FlexVolume はボリュームのアタッチとデタッチをサポートします。クラスター作成時に FlexVolume プラグインを選択して Alibaba Cloud ストレージに接続すると、このコンポーネントはデフォルトでインストールされます。

addons { name = "flexvolume" }

nginx-ingress-controller

ネットワークコンポーネント

Nginx Ingress コントローラーは Ingress の転送ルールを解析します。Ingress コントローラーがリクエストを受信すると、一致した Ingress 転送ルールに基づいてバックエンドサービスにリクエストを転送します。

addons { name = "nginx-ingress-controller" }

terway-eniip

ネットワークコンポーネント

Alibaba Cloud が VPC (Virtual Private Cloud) をベースに開発したオープンソースの Container Network Interface (CNI) プラグイン。Kubernetes ネイティブのネットワークポリシーをサポートし、コンテナー間のアクセスポリシーを定義します。Terway ネットワークコンポーネントを使用して、Kubernetes クラスター内のネットワーク通信を有効にできます。クラスター作成時に Terway ネットワークプラグインを選択してクラスター内のネットワーク通信を有効にすると、このコンポーネントはデフォルトでインストールされます。

addons { name = "terway-eniip" }

ack-node-local-dns

ネットワークコンポーネント

オープンソースプロジェクト NodeLocal DNSCache に基づく DNS ローカルキャッシュソリューション。

addons { name = "ack-node-local-dns" }

aliyun-acr-credential-helper

セキュリティコンポーネント

ACK クラスター内でパスワードなしで ACR Personal Edition または Enterprise Edition からプライベートイメージをプルできるコンポーネント。

addons { name = "aliyun-acr-credential-helper" }

gatekeeper

セキュリティコンポーネント

クラスター内で Open Policy Agent (OPA) ポリシーを管理・適用し、名前空間のラベル管理などの機能を実現します。

addons { name = "gatekeeper" }

kritis-validation-hook

セキュリティコンポーネント

信頼できるコンテナーをデプロイする際のコンテナイメージ署名検証のための主要コンポーネント。

addons { name = "kritis-validation-hook" }

security-inspector

セキュリティコンポーネント

セキュリティ検査を実装するための主要コンポーネント。

addons { name = "security-inspector" }

ack-kubernetes-webhook-injector

セキュリティコンポーネント

さまざまな Alibaba Cloud プロダクトのホワイトリストに Pod の IP アドレスを動的に追加または削除できる Kubernetes コンポーネント。これにより、クラウドプロダクトのホワイトリストに Pod の IP アドレスを手動で設定する必要がなくなります。

addons { name = "ack-kubernetes-webhook-injector" }

ack-arena

その他

オープンソースの Arena のインストールをさらに簡素化し、コンソールでワンクリックで Arena をインストールできます。

addons { name = "ack-arena" }

ack-cost-exporter

その他

ACK コスト分析機能におけるデータ処理用のプラグイン。

addons { name = "ack-cost-exporter" }

ack-kubernetes-cronhpa-controller

その他

ack-kubernetes-cronhpa-controller を使用して、アプリケーションワークロードのスケジュールされたスケーリングを実装します。

addons { name = "ack-kubernetes-cronhpa-controller" }

ack-virtual-node

その他

オープンソースプロジェクト Virtual Kubelet に基づいて、このコンポーネントは Aliyun Provider のサポートを拡張し、Kubernetes と Elastic Container Instance (ECI) をシームレスに接続するために高度に最適化されています。

addons { name = "ack-virtual-node" }

aesm

その他

Intel® SGX Architectural Enclave Service Manager (Intel® SGX AESM) は、Intel® SGX のシステムコンポーネントです。SGX Enclave の起動サポート、キー設定、リモート認証などのサービスを提供します。

addons { name = "aesm" }

aliyun-acr-acceleration-suite

その他

オンデマンドローディングに基づくイメージアクセラレーションを提供するクライアントプラグイン。ワーカーノードに DaemonSet としてデプロイされます。

addons { name = "aliyun-acr-acceleration-suite" }

migrate-controller

その他

オープンソースプロジェクト Velero に基づいて開発された Kubernetes アプリケーション移行コンポーネント。

addons { name = "migrate-controller" }

resource-controller

その他

Pod リソースを動的に制御する主要コンポーネント。ACK Pro クラスターで CPU トポロジー対応スケジューリングを使用するには、このコンポーネントをインストールする必要があります。

addons { name = "resource-controller" }

sandboxed-container-controller

その他

サンドボックス化されたコンテナーランタイムが提供する専用コントローラーコンポーネントで、サンドボックス化されたコンテナーの基本機能を強化・拡張します。

addons { name = "sandboxed-container-controller" }

sandboxed-container-helper

その他

サンドボックス化されたコンテナーの診断と O&M を提供するコンポーネント。

addons { name = "sandboxed-container-helper" }

sgx-device-plugin

その他

Alibaba Cloud Container Service チームと Ant Financial セキュアコンピューティングチームが共同開発した Intel SGX 用の Kubernetes デバイスプラグイン。コンテナー内で SGX をより便利に使用できます。

addons { name = "sgx-device-plugin" }

クラスター作成後のコンポーネントのライフサイクル管理

コンポーネントのライフサイクルを管理する前に、Kubernetes クラスターが必要です。クラスターがない場合は、まずクラスターを作成してください。

クラスター内のコンポーネントについては、alicloud_cs_kubernetes_addon リソースを使用して、インストール、アップグレード、アンインストール、カスタム設定の変更など、そのライフサイクルを管理できます。alicloud_cs_kubernetes_addon の属性と定義は次のとおりです。

resource "alicloud_cs_kubernetes_addon" "addon-example" {
  # クラスター ID。
  cluster_id = "XXXX"

  # コンポーネントの名前。データソースで alicloud_cs_kubernetes_addons を使用して、現在のクラスターにインストール済みおよびインストール可能なすべてのコンポーネントとそのバージョン情報をクエリできます。
  name = "XXXX"

  # コンポーネントのバージョン。
  version = "XXXX"

  # JSON 文字列形式のコンポーネントのカスタムパラメーター。Terraform の組み込み jsonencode メソッドまたは JSON 文字列を使用してパラメーターを設定できます。JSON 文字列を使用する場合は、エスケープ文字に注意してください。一部のクラスターコンポーネントはカスタムパラメーター設定をサポートしています。このフィールドを使用して、コンポーネントのカスタムパラメーターを指定できます。パラメーターの指定方法の詳細については、「クラスターコンポーネントのカスタム設定パラメーターの変更」セクションをご参照ください。
  config = jsonencode(
    {
      ....
    }
  )
}

JSON 文字列を記述することで、コンポーネントのカスタムパラメーターを設定できます。エスケープ文字に注意してください。たとえば、次のいずれかの方法で nginx-ingress-controller コンポーネントを設定できます。

  • jsonencode を使用したパラメーターの設定:

    config = jsonencode(   
      {       
        IngressSlbNetworkType="internet"       
        IngressSlbSpec="slb.s2.small"     
      }  
    )
  • 文字列を使用したパラメーターの設定:

    config = "{\"IngressSlbNetworkType\":\"internet\",\"IngressSlbSpec\":\"slb.s2.small\"}"

クラスターにインストールされたコンポーネントの Terraform へのインポートによる管理

クラスターにすでにインストールされているコンポーネントについては、terraform import を使用して Terraform にインポートして管理できます。次の例は、インストール済みの nginx-ingress-controller コンポーネントを Terraform にインポートして管理する方法を示しています。

  1. .tf 拡張子のファイルを作成するか、既存の .tf ファイルを使用して、リソースを定義します。

    リソース内の alicloud_cs_kubernetes_addon は、クラスターのアドオンを管理するために使用されます。このステップでは、何も入力する必要はありません。

    resource "alicloud_cs_kubernetes_addon" "nginx-ingress-controller" {
    }
  2. 次のコマンドを実行して、インストール済みのクラスターの nginx-ingress-controller コンポーネントをインポートします。

    Terraform はクラスター内の nginx-ingress-controller コンポーネントの設定をプルし、.state 拡張子のファイルに書き込みます。

    terraform import alicloud_cs_kubernetes_addon.nginx-ingress-controller <cluster_id>:nginx-ingress-controller
  3. terraform plan コマンドを実行します。出力に基づいて、クラスター内の nginx-ingress-controller コンポーネントの設定と定義されたリソースとの違いを確認できます。

    違いと .state 拡張子のファイルの内容に基づいて、ステップ 1 で定義したリソースを更新します。terraform plan コマンドがローカル設定とクラスター内のコンポーネント設定の間に違いがないことを示すまで、このプロセスを繰り返します。これは、コンポーネントがインポートされたことを示します。

    resource "alicloud_cs_kubernetes_addon" "nginx-ingress-controller" {
      cluster_id = "XXXXX"
      name = "nginx-ingress-controller"
      version = "v1.2.1-aliyun.1"
      config = jsonencode(
        {
          IngressSlbNetworkType = "internet"
          IngressSlbSpec        = "slb.s2.small"
        }
      )
    }

クラスターコンポーネントのインストール

alicloud_cs_kubernetes_addon リソースを使用して、既存のクラスターにコンポーネントをインストールできます。次の例は、gatekeeper コンポーネントをインストールする方法を示しています。

  1. .tf ファイルにインストールするコンポーネントに関する情報を定義します。次の情報を指定する必要があります。

    • クラスター ID。

    • コンポーネント名とバージョン:

      データソースで alicloud_cs_kubernetes_addons を使用して、クラスターにインストール可能なコンポーネントの名前とバージョンをクエリできます。クエリ結果は、各コンポーネントの最新のインストール可能なバージョンのみを返します。コンポーネントの過去のバージョンをインストールする場合は、コンポーネントのリリースログを表示し、対応するバージョン番号を指定します。

    • (オプション) コンポーネントのカスタム設定:

      config フィールドを変更して、コンポーネント設定をカスタマイズします。Terraform の組み込み jsonencode メソッドを使用して、必要な設定を構築できます。データソースで alicloud_cs_kubernetes_addon_metadata を使用して、コンポーネントの設定可能なパラメーターをクエリできます。詳細については、「クラスターコンポーネントのカスタム設定パラメーターの変更」をご参照ください。

    クリックして詳細を表示

    resource "alicloud_cs_kubernetes_addon" "gatekeeper" {
      cluster_id = "ce36b7c61e126430b8b245730ca6d****"
      name = "gatekeeper"
      version = "v3.8.1.113-geb7947ef-aliyun"
      config = jsonencode(
        {
          AdmissionPodCpuLimit      = "1000m"
          AdmissionPodCpuRequest    = "100m"
          AdmissionPodMemoryLimit   = "512Mi"
          AdmissionPodMemoryRequest = "256Mi"
          AdmissionPodNumber        = 3
          AuditInterval             = 1800
          AuditPodCpuLimit          = "1000m"
          AuditPodCpuRequest        = "100m"
          AuditPodMemoryLimit       = "512Mi"
          AuditPodMemoryRequest     = "256Mi"
          EnableAuditPod            = false
          EnableMutatingWebhook     = false
        }
      )
    }
  2. 次のコマンドを実行して、コンポーネントをクラスターにインストールします。

    terraform apply

    期待される出力:

    Plan: 1 to add, 0 to change, 0 to destroy.
    
    Do you want to perform these actions?
      Terraform will perform the actions described above.
      Only 'yes' will be accepted to approve.
    
      Enter a value: yes
    
    alicloud_cs_kubernetes_addon.gatekeeper: Creating...
    alicloud_cs_kubernetes_addon.gatekeeper: Still creating... [10s elapsed]
    alicloud_cs_kubernetes_addon.gatekeeper: Creation complete after 16s [id=XXXXX:gatekeeper]
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

    Apply complete! が表示されると、コンポーネントはインストールされています。

クラスターコンポーネントのアップグレード

データソースで alicloud_cs_kubernetes_addons を使用して、コンポーネントのアップグレード可能なバージョンをクエリできます。新しいバージョンが利用可能な場合は、バージョン番号を変更することでコンポーネントをアップグレードできます。次の例は、gatekeeper コンポーネントをアップグレードする方法を示しています。

クリックして詳細を表示

resource "alicloud_cs_kubernetes_addon" "gatekeeper" {
  cluster_id = "ce36b7c61e126430b8b245730ca6d****"
  name = "gatekeeper"

  # バージョンを指定されたアップグレード可能なバージョンに変更します。
  version = "XXXXXXXXX"
  config = jsonencode(
    {
      AdmissionPodCpuLimit      = "1000m"
      AdmissionPodCpuRequest    = "100m"
      AdmissionPodMemoryLimit   = "512Mi"
      AdmissionPodMemoryRequest = "256Mi"
      AdmissionPodNumber        = 3
      AuditInterval             = 1800
      AuditPodCpuLimit          = "1000m"
      AuditPodCpuRequest        = "100m"
      AuditPodMemoryLimit       = "512Mi"
      AuditPodMemoryRequest     = "256Mi"
      EnableAuditPod            = false
      EnableMutatingWebhook     = false
    }
  )
}

terraform apply コマンドを実行してコンポーネントをアップグレードします。コマンドが正常に実行されると、コンポーネントはアップグレードされます。

クラスターコンポーネントのカスタム設定パラメーターの変更

一部の ACK コンポーネントは、カスタムパラメーター設定をサポートしています。alicloud_cs_kubernetes_addon リソースを使用して、コンポーネントの設定を更新できます。たとえば、config フィールドを変更して、gatekeeper コンポーネントの設定を変更できます。

クリックして詳細を表示

resource "alicloud_cs_kubernetes_addon" "gatekeeper" {
  cluster_id = "ce36b7c61e126430b8b245730ca6d****"
  name = "gatekeeper"
  version = "v3.8.1.113-geb7947ef-aliyun"

  # Config の属性を変更して適用することで、クラスターコンポーネントの設定を変更できます。

}

コンポーネントでサポートされているすべての設定可能なパラメーターを表示するには、データソースで alicloud_cs_kubernetes_addon_metadata を使用してクエリできます。返される結果は JSON Schema 形式です。たとえば、gatekeeper コンポーネントのパラメーターをクエリするには、次の内容を .tf ファイルに追加します。

# データソースを定義して、gatekeeper コンポーネントの設定可能なパラメーター スキーマを取得します。
data "alicloud_cs_kubernetes_addon_metadata" "default" {
  cluster_id = "ce36b7c61e126430b8b245730ca6d****"
  name       = "gatekeeper"
  version    = "v3.8.1.113-geb7947ef-aliyun"
}

# Output を使用して出力を生成します。
output "addon_config_schema" {
  value = data.alicloud_cs_kubernetes_addon_metadata.default.config_schema
}

terraform apply コマンドを実行します。返される結果は JSON Schema 形式です。properties 属性は、サポートされているすべての設定パラメーターを定義します。返されたスキーマに基づいて、サポートされている任意の設定パラメーターを指定できます。設定可能なパラメーターは次のように説明されます。

  • default:デフォルト値。

  • description:パラメーターの説明。

  • pattern:値の形式の正規表現。

  • type:フィールドの型。

クリックして詳細を表示

addon_config_schema = <<EOT
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "AdmissionPodCpuLimit": {
      "default": "1000m",
      "description": "cpu limit for gatekeeper",
      "pattern": "^(|[1-9][0-9]*(m|\\.\\d+)?)$",
      "type": "string"
    },
    "AdmissionPodCpuRequest": {
      "default": "100m",
      "description": "cpu request for gatekeeper",
      "pattern": "^[1-9][0-9]*(m|\\.\\d+)?$",
      "type": "string"
    },
    "AdmissionPodMemoryLimit": {
      "default": "512Mi",
      "description": "memory limit for gatekeeper",
      "pattern": "^(|[1-9][0-9]*(\\.\\d+)?(K|Ki|M|Mi|G|Gi|T|Ti)?)$",
      "type": "string"
    },

    ......
  },
  "title": "Config",
  "type": "object"
}
EOT

ネットワークコンポーネントの設定

ACK では、Terway ネットワークモードを使用してコンテナーネットワーク機能を実現できます。詳細については、「ネットワーク」をご参照ください。

次の例は、Terraform を使用してネットワークコンポーネントを設定する方法を示しています。

クリックして詳細を表示

# Terway をネットワークコンポーネントとして使用し、Pod には排他的 ENI モードを使用します。これはデフォルトモードです。
# このモードでは、ノード上の Pod の数は ECS インスタンスの ENI クォータによって制限されます。

resource "alicloud_cs_managed_kubernetes" "default" {
  # その他のパラメーター。
  # ...

  addons {
    name = "terway-eni"
  }
}

# Terway をネットワークコンポーネントとして使用し、IPVlan モードを使用します。
# このモードは、ENI 共有の仮想化技術として IPVlan と eBPF を使用し、Alibaba Cloud Linux 2 でのみ使用できます。
resource "alicloud_cs_managed_kubernetes" "default" {
  # その他のパラメーター。
  # ...

  addons {
    name   =  "terway-eniip"
    config = "{\"IPVlan\":\"true\",\"NetworkPolicy\":\"false\"}"
  }
}

# Terway をネットワークコンポーネントとして使用し、IPVlan モードでネットワークポリシーのサポートを有効にします。
# このモードは、ENI 共有の仮想化技術として IPVlan と eBPF を使用し、Alibaba Cloud Linux 2 でのみ使用できます。
# IPVlan モードでは、ポリシーベースのネットワーク制御が提供されます。
resource "alicloud_cs_managed_kubernetes" "default" {
  # その他のパラメーター。
  # ...

  addons {
    name   =  "terway-eniip"
    config = "{\"IPVlan\":\"true\",\"NetworkPolicy\":\"true\"}"
  }
}

ストレージコンポーネントの設定

ACK は、FlexVolume と Container Storage Interface (CSI) の 2 種類のストレージコンポーネントを提供します。FlexVolume はメンテナンスされなくなりました。ACK は CSI ストレージコンポーネントをメンテナンスしています。Terraform を使用してクラスターを作成する際にストレージコンポーネントを指定しない場合、CSI がデフォルトでインストールされます。Terraform でストレージコンポーネントを次のように定義できます。

クリックして詳細を表示

# CSI をストレージコンポーネントとして使用する場合、CSI には csi-plugin と csi-provisioner が含まれます。デフォルトの NAS ファイルシステムと CNFS 動的ストレージクラスの作成も有効にしたい場合は、storage-operator コンポーネントもインストールする必要があります。
resource "alicloud_cs_managed_kubernetes" "default" {
  # その他のパラメーター。
  # ...

  addons {
    name = "csi-plugin"
  }
  addons {
    name = "csi-provisioner"
  }
  addons {
    name   = "storage-operator"
    config = "{\"CnfsOssEnable\":\"false\",\"CnfsNasEnable\":\"true\"}"
  }
}

ログコンポーネントの設定

ACK が提供するログ収集コンポーネントは、収集したログを Simple Log Service (SLS) に保存します。ログコンポーネントは、次の 2 つのログ保存方法をサポートしています。

  • 既存の SLS プロジェクトにログを保存する。

  • クラスター作成時にログを保存するための新しい SLS プロジェクトを自動的に作成する。

2 つのシナリオでは設定が異なります。次の Terraform の例で詳細を説明します。

クリックして詳細を表示

# ログを保存するための SLS プロジェクトを自動的に作成します。
resource "alicloud_cs_managed_kubernetes" "default" {
  # その他のパラメーター。
  # ...

  addons {
    name = "loongcollector"
  }
}

# ログを保存するための SLS プロジェクトを自動的に作成します。また、Ingress ダッシュボードの自動作成を有効にします。
resource "alicloud_cs_managed_kubernetes" "default" {
  # その他のパラメーター。
  # ...

  addons {
    name = "loongcollector"
    config = "{\"IngressDashboardEnabled\":\"true\"}"
  }
}


# 既存の SLS プロジェクトを使用してログを保存します。また、Ingress ダッシュボードの自動作成を有効にします。
resource "alicloud_cs_managed_kubernetes" "default" {
  # その他のパラメーター。
  # ...

  addons {
    name = "loongcollector"
    config = "{\"IngressDashboardEnabled\":\"true\",\"sls_project_name\":\"k8s-log-c55c35ff493df47b88783bea48827****\"}"
  }
}

# node-problem-detector イベントセンターをインストールして設定します。
# イベントセンターのログを保存するための SLS プロジェクトを自動的に作成します。
resource "alicloud_cs_managed_kubernetes" "default" {
  # その他のパラメーター。
  # ...

  addons {
    name   = "ack-node-problem-detector"
    config = "{\"sls_project_name\":\"\"}"
  }
}

# node-problem-detector イベントセンターをインストールして設定します。
# 既存の SLS プロジェクトを使用してイベントセンターのログを保存します。このプロジェクトは loongcollector と Logstore を共有できます。
resource "alicloud_cs_managed_kubernetes" "default" {
  # その他のパラメーター。
  # ...

  addons {
    name   = "ack-node-problem-detector"
    config = "{\"sls_project_name\":\"k8s-log-c55c35ff493df47b88783bea48827****\"}"
  }
}

モニタリングコンポーネントの設定

ACK が提供するモニタリングコンポーネントには、ECS ノードにインストールされる CloudMonitor エージェントと Prometheus Service があります。Terraform では、ECS ノードへの CloudMonitor エージェントのインストールは install_cloud_monitor パラメーターによって制御されます。

クリックして詳細を表示

# Prometheus Service をインストールします。
resource "alicloud_cs_managed_kubernetes" "default" {
  # その他のパラメーター。
  # ...
  addons {
    name = "arms-prometheus"
  }
}
# ECS ノードに CloudMonitor エージェントをインストールします。
resource "alicloud_cs_kubernetes_node_pool" "default" {
  # その他のパラメーター。
  # ...
  install_cloud_monitor = true
}

Ingress ルーティングコンポーネントの設定

ACK は、Nginx Ingress と ALB Ingress の 2 つのトラフィック Ingress ソリューションを提供します。

  • Nginx Ingress コンポーネント:このコンポーネントは、コミュニティ版の ingress-nginx に基づいて最適化されており、Kubernetes クラスターに柔軟で信頼性の高いルーティングサービスを提供します。詳細については、「Nginx Ingress の概要」をご参照ください。

  • ALB Ingress コンポーネント:これは、完全マネージド型で信頼性の高い ALB Ingress コンポーネントであり、Kubernetes クラスターに柔軟で信頼性の高いルーティングサービスを提供します。詳細については、「ALB Ingress を使用したサービスへのアクセス」をご参照ください。

次の例は、Terraform を使用してルーティングコンポーネントを設定する方法を示しています。

クリックして詳細を表示

# nginx-ingress-controller をルーティングに使用します。
# パブリック向けの SLB インスタンスを使用する場合は、Config で IngressSlbNetworkType を internet に設定します。
# イントラネット向けの SLB インスタンスを使用する場合は、Config で IngressSlbNetworkType を intranet に設定します。
resource "alicloud_cs_managed_kubernetes" "default" {
  # その他のパラメーター。
  # ...

  addons {
    name   =  "nginx-ingress-controller"
    config = "{\"IngressSlbNetworkType\":\"internet\",\"IngressSlbSpec\":\"slb.s2.small\"}"
  }
}

# ALB Ingress をルーティングに使用します。
resource "alicloud_cs_managed_kubernetes" "default" {
  # その他のパラメーター。
  # ...

  addons {
    name   = "alb-ingress-controller"
    config = "{\"albIngress\":{\"CreateDefaultALBConfig\":false}}"  # 現時点では作成しません。
#   config = "{\"albIngress\":{\"LoadBalancerId\":\"alb-vl8uiXXXXXxdr\",\"CreateDefaultALBConfig\":true}}" # 既存の ALB インスタンスを指定します。
#   config = "{\"albIngress\":{\"AddressType\":\"Internet\",\"ZoneMappings\":{\"cn-hangzhou-l\":[\"vsw-uf6XXXXXoyb4qe\"],\"cn-hangzhou-m\":[\"vsw-uf6XXXX0rlkiq\"]},\"CreateDefaultALBConfig\":true}}" # 新規に作成します。少なくとも 2 つのゾーンを選択する必要があります。
  }
}

デフォルトコンポーネントの無効化

ACK は、クラスター管理を容易にするために、デフォルトで一部のコンポーネントをインストールします。クラスター作成時にこれらのコンポーネントをインストールしたくない場合は、disabled = true フィールドを設定して無効にすることができます。次の例は、nginx-ingress-controller を無効にする方法を示しています。

# nginx-ingress-controller コンポーネントのインストールを無効にします。

resource "alicloud_cs_managed_kubernetes" "default" {
  # その他のパラメーター。
  # ...

  addons {
    name     =  "nginx-ingress-controller"
    disabled = true
  }
}

addons が指定されていない場合にデフォルトでインストールされるコンポーネント

クラスター作成時に `addons` を指定しない場合、以下のコンポーネントがデフォルトでインストールされます。

クラスターの種類

コンポーネントの種類

デフォルトのコンポーネント名

コンポーネントの説明

ACK クラスター

システムコンポーネント

kube-scheduler

Kube Scheduler を使用してクラスターリソースをスケジュールします。

cloud-controller-manager

cloud-controller-manager を使用して、Kubernetes アプリケーション用の Server Load Balancer (SLB) インスタンスを作成し、ノードのルートエントリを管理します。

kube-apiserver

kube-apiserver は、Kubernetes クラスターのバスおよびイングレスゲートウェイです。

kube-controller-manager

kube-controller-manager は、Kubernetes クラスター内のリソースマネージャーです。

ログとモニタリング

alicloud-monitor-controller

アプリケーションコンテナーのライフサイクルとステータスの変更を監視します。

metrics-server

Metrics Server は、クラスターの自動スケーリングメカニズムのために、アプリケーションコンテナーのリソース監視メトリックを提供します。

ストレージ

csi-plugin

csi-plugin プラグインを使用して、ストレージボリュームのライフサイクルを管理します (推奨)。

csi-provisioner

csi-provisioner プラグインを使用して、ストレージボリュームを作成および削除します (推奨)。

storage-operator

storage-operator プラグインを使用して、ストレージの O&M を管理します (推奨)。

ネットワーク

CoreDNS

Kubernetes クラスターのドメイン名解決サーバー。

Gateway API

Gateway API ゲートウェイリソースモデル。

terway-eniip

Terway ネットワークプラグイン。

nginx-ingress-controller (Pro 版でデフォルトでインストール)

Nginx トラフィック転送に基づく Ingress コントローラー。

ACK Serverless クラスター

システムコンポーネント

kube-scheduler

Kube Scheduler を使用してクラスターリソースをスケジュールします。

ack-virtual-node

仮想ノードと ECI のエラスティック機能を使用します。

cloud-controller-manager

cloud-controller-manager を使用して、Kubernetes アプリケーション用の SLB インスタンスを作成し、ノードのルートエントリを管理します。

kube-apiserver

kube-apiserver は、Kubernetes クラスターのバスおよびイングレスゲートウェイです。

kube-controller-manager

kube-controller-manager は、Kubernetes クラスター内のリソースマネージャーです。

ネットワーク

CoreDNS

Kubernetes クラスターのドメイン名解決サーバー。

ACK エッジクラスター

システムコンポーネント

kube-scheduler

Kube Scheduler を使用してクラスターリソースをスケジュールします

cloud-controller-manager

cloud-controller-manager を使用して、Kubernetes アプリケーション用の SLB インスタンスを作成し、ノードのルートエントリを管理します。

kube-apiserver

kube-apiserver は、Kubernetes クラスターのバスおよびイングレスゲートウェイです。

kube-controller-manager

kube-controller-manager は、Kubernetes クラスター内のリソースマネージャーです。

ログとモニタリング

alicloud-monitor-controller

アプリケーションコンテナーのライフサイクルとステータスの変更を監視します。

metrics-server

Metrics Server は、クラスターの自動スケーリングメカニズムのために、アプリケーションコンテナーのリソース監視メトリックを提供します

ネットワーク

CoreDNS

Kubernetes クラスターのドメイン名解決サーバー。

terway-eniip

Terway ネットワークプラグイン。

その他

edge-controller-manager

-

edge-tunnel-agent

edge-tunnel はクライアントサーバーアーキテクチャを使用して、クラウドとエッジの間にリバース O&M チャネルを構築します。

edge-tunnel-server

edge-tunnel はクライアントサーバーアーキテクチャを使用して、クラウドとエッジの間にリバース O&M チャネルを構築します。

yurt-app-manager

yurt-app-manager を使用して、ACK@Edge にノードプールとユニットベースのデプロイ機能を提供します。

一般的な設定例

以下のセクションでは、参考のために一般的な例を示します。

  • ネットワークコンポーネントとして Terway を選択します。

  • ストレージコンポーネントとして CSI または FlexVolume のいずれかを選択します。FlexVolume はメンテナンスされなくなったため、CSI の使用を推奨します。

  • 要件に応じて、ルーティングコンポーネントとして Nginx Ingress または ALB Ingress のいずれかを選択します。

  • 要件に応じて、他のコンポーネントをインストールして組み合わせることができます。

例 1:コンポーネントを設定しない

# クラスター作成時にコンポーネントを設定しない場合、デフォルトのコンポーネントのみがインストールされます。
# これはクラスターの最も単純な設定です。変数をカスタム変数に置き換えてください。
resource "alicloud_cs_managed_kubernetes" "default" {
  name                         = var.name
  cluster_spec                 = "ack.pro.small"
  is_enterprise_security_group = true
  pod_cidr                     = "172.20.0.0/16"
  service_cidr                 = "172.21.0.0/20"
  worker_vswitch_ids           = [var.vswitch_id]
}

例 2:Terway ネットワークの使用

# Terway ネットワークを使用するクラスターを作成します。
# Pod には排他的 ENI モードを使用します。

resource "alicloud_cs_managed_kubernetes" "default" {
  name                         = var.name
  cluster_spec                 = "ack.pro.small"
  is_enterprise_security_group = true
  pod_vswitch_ids              = [var.vswitch_id]
  service_cidr                 = "172.21.0.0/20"
  worker_vswitch_ids           = [var.vswitch_id]

  addons {
    name = "terway-eni"
  }
}

# Terway ネットワークを使用するクラスターを作成します。
# IPVlan モードを使用し、ネットワークポリシーを有効にします。
resource "alicloud_cs_managed_kubernetes" "default" {
  name                         = var.name
  cluster_spec                 = "ack.pro.small"
  is_enterprise_security_group = true
  service_cidr                 = "172.21.0.0/20"
  pod_vswitch_ids              = [var.vswitch_id]
  worker_vswitch_ids           = [var.vswitch_id]

  addons {
    name   =  "terway-eniip"
    config = "{\"IPVlan\":\"true\",\"NetworkPolicy\":\"true\"}"
  }
}

例 3:Terway、CSI、および nginx-ingress の一般テンプレート

# Terway、CSI、および nginx-ingress の一般テンプレート。

resource "alicloud_cs_managed_kubernetes" "default" {
  name                         = var.name
  cluster_spec                 = "ack.pro.small"
  is_enterprise_security_group = true
  service_cidr                 = "172.21.0.0/20"
  pod_vswitch_ids              = [var.vswitch_id]
  worker_vswitch_ids           = [var.vswitch_id]

  addons {
    name = "terway-eniip"
    config = "{\"IPVlan\":\"true\",\"NetworkPolicy\":\"false\"}"
  }
  addons {
    name = "csi-plugin"
  }
  addons {
    name = "csi-provisioner"
  }
  addons {
    name = "storage-operator"
    config = "{\"CnfsOssEnable\":\"false\",\"CnfsNasEnable\":\"true\"}"
  }
  addons {
    name = "loongcollector"
    config = "{\"IngressDashboardEnabled\":\"true\"}"
  }
  addons {
    name = "ack-node-problem-detector"
    config = "{\"sls_project_name\":\"\"}"
  }
  addons {
    name = "nginx-ingress-controller"
    config = "{\"IngressSlbNetworkType\":\"internet\",\"IngressSlbSpec\":\"slb.s2.small\"}"
  }
  addons {
    name = "ack-node-local-dns"
  }
  addons {
    name = "arms-prometheus"
  }
  addons {
    name = "alicloud-monitor-controller"
    config = "{\"group_contact_ids\":\"[10619]\"}"
  }
}