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

Container Service for Kubernetes:Terraform を使用したアドオンの管理

最終更新日:Dec 19, 2025

Container Service for Kubernetes (ACK) は、クラスターの機能を拡張するための豊富なアドオンセットを提供しています。このトピックでは、Terraform でアドオンを構成して、さまざまなシナリオでワークロードを管理する方法について説明します。

アドオンのタイプ

ACK は、システムアドオンとオプションアドオンの 2 種類のアドオンを管理します。アドオンの詳細については、「アドオン」をご参照ください。

システムアドオン

システムアドオンは、ACK クラスターを実行するために必要な必須コンポーネントです。クラスターを作成する際にデフォルトでインストールされます。例として、以下のようなものがあります。

  • kube-apiserver

  • kube-controller-manager

  • cloud-controller-manager

  • kube-proxy

  • CoreDNS

オプションアドオン

オプションアドオンは、ACK が提供する必須ではないコンポーネントで、クラスターの機能を拡張するために任意でインストールできます。これらは、アプリケーション管理、ロギングとモニタリング、ストレージ、ネットワーキング、セキュリティなどのカテゴリに分類されます。

コンソールを使用したアドオン管理用の Terraform パラメーターの生成

コンソールを使用して、アドオン用の Terraform パラメーター構成を生成できます。これにより、アドオン管理の効率と使いやすさが向上します。

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

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

  3. [アドオン] ページで、対象のアドオンを検索して見つけます。アドオンカードで、必要に応じて [インストール] または [構成] をクリックします。

  4. 表示されたダイアログボックスで、[同等のコード] をクリックします。右側のパネルで、[Terraform] タブをクリックして、アドオンのインストールまたは構成に関連するパラメーターを表示します。その後、これらのパラメーターをコピーして使用できます。

アドオンの管理プラクティス

Terraform を使用して、クラスター作成時にインストールするアドオンを指定し、クラスター作成後に完全なライフサイクル管理を実行できます。以降のセクションでは、クラスターアドオンのライフサイクルを管理する方法と、一般的なシナリオでのベストプラクティスについて説明します。

クラスター作成時にインストールするアドオンの指定

クラスターを作成する際にインストールするアドオンを指定できます。以下のリソースが関連します。

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

  • ACK Dedicated クラスター:alicloud_cs_kubernetes

  • ACK Edge クラスター:alicloud_cs_edge_kubernetes

  • ACK Serverless クラスター:alicloud_cs_serverless_kubernetes

上記すべてのリソースは、addons 属性を使用して、クラスター作成時にインストールするアドオンを定義することをサポートしています。addons 属性は次のように定義されます。

# マネージド Kubernetes クラスターの例
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

ロギングとモニタリング

オープンソースコミュニティのメトリクスコンポーネントの拡張版です。モニタリングデータを収集し、データ消費と Horizontal Pod Autoscaler (HPA) 機能のための Metrics API を提供します。

addon { name = "metrics-server" }

ack-node-problem-detector

ロギングとモニタリング

ノードの異常イベントを監視し、サードパーティのモニタリングプラットフォームと統合するためのオープンソースコミュニティプロジェクトの拡張版です。

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 (SLS) を使用して 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

ストレージ

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

addons { name = "flexvolume" }

nginx-ingress-controller

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

Nginx Ingress Controller は Ingress 転送ルールを解析します。リクエストを受信すると、Ingress ルールに一致させ、トラフィックをバックエンドサービスに転送します。

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

terway-eniip

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

VPC に基づくオープンソースの Alibaba Cloud 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 のデフォルト版または 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

セキュリティ

Pod の IP を Alibaba Cloud プロダクトのホワイトリストに動的に追加または削除する Kubernetes コンポーネントで、手動での構成を不要にします。

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

ack-arena

その他

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

addons { name = "ack-arena" }

ack-cost-exporter

その他

ACK コスト分析におけるデータ処理のためのプラグインです。

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

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 のシステムコンポーネントで、エンクレーブの起動サポート、キープロビジョニング、リモートアテステーションサービスを提供します。

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

その他

サンドボックスコンテナの診断および運用管理のためのコンポーネントです。

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

sgx-device-plugin

その他

Alibaba Cloud Container Service チームと Ant Financial セキュアコンピューティングチームが共同開発した Intel SGX 用の Kubernetes Device Plugin です。コンテナでの 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 文字列を直接指定します (適切にエスケープする必要があります)。一部のアドオンはカスタムパラメーターをサポートしています。詳細については、「クラスターアドオンのカスタム構成パラメーターの変更」セクションをご参照ください。
  config = jsonencode(
    {
      ....
    }
  )
}

カスタムパラメーターは JSON 文字列を直接指定して構成できますが、特殊文字をエスケープする必要があります。たとえば、nginx-ingress-controller アドオンは、次の 2 つの構成方法をサポートしています。

  • jsonencode を使用してパラメーターを構成する:

    config = jsonencode(   
      {       
        IngressSlbNetworkType="internet"       
        IngressSlbSpec="slb.s2.small"     
      }  
    )
  • 直接文字列を使用してパラメーターを構成する:

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

既存のクラスターアドオンの Terraform 管理へのインポート

クラスターに既にインストールされているアドオンについては、terraform import を使用して Terraform の管理下に置くことができます。次の例は、nginx-ingress-controller アドオンをインポートする方法を示しています。

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

    alicloud_cs_kubernetes_addon リソースはクラスターアドオンを管理します。現時点では空のままにしておきます。

    resource "alicloud_cs_kubernetes_addon" "nginx-ingress-controller" {
    }
  2. 次のコマンドを実行して、クラスターに既にインストールされている nginx-ingress-controller アドオンをインポートします。

    Terraform はクラスターからアドオン構成をプルし、.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_addons リソースを使用して、アドオン構成を更新できます。gatekeeper アドオンの場合、config フィールドを変更して設定を変更できます。

詳細を表示するには展開

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 "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 モードで使用します。
# IPVlan + eBPF を使用して共有 ENI 仮想化を行います。Alibaba Cloud Linux 2 が必要です。
resource "alicloud_cs_managed_kubernetes" "default" {
  # その他のパラメーター
  # ...

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

# Terway を IPVlan モードで使用し、NetworkPolicy サポートを有効にします。
# IPVlan + eBPF を使用して共有 ENI 仮想化を行います。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) に基づくストレージアドオンを提供します。FlexVolume は非推奨であり、ACK は主に CSI ストレージアドオンを維持しています。Terraform でクラスターを作成する際にストレージアドオンを指定しない場合、CSI がデフォルトでインストールされます。Terraform でストレージアドオンを次のように定義できます。

詳細を表示するには展開

# 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 プロジェクトを自動的に作成する。

これらのシナリオでは構成が異なります。次の 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****\"}"
  }
}

# Event Hub 用に ack-node-problem-detector をインストールして構成します。
# Event Hub ログストレージ用に SLS プロジェクトを自動的に作成します。
resource "alicloud_cs_managed_kubernetes" "default" {
  # その他のパラメーター
  # ...

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

# Event Hub 用に ack-node-problem-detector をインストールして構成します。
# Event Hub ログストレージに既存の 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 で install_cloud_monitor パラメーターを設定することで、ECS ノードに CloudMonitor エージェントをインストールできます。

詳細を表示するには展開

# Prometheus モニタリングをインストールします。
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 つのトラフィックイングレスソリューションを提供します。

  • Nginx Ingress:コミュニティの ingress-nginx の最適化バージョンで、Kubernetes クラスターに柔軟で信頼性の高いルーティングを提供します。詳細については、「Nginx Ingress の概要」をご参照ください。

  • ALB Ingress:完全に管理された高信頼性の ALB Ingress で、Kubernetes クラスターに柔軟で信頼性の高いルーティングを提供します。詳細については、「ALB Ingress を介したサービスへのアクセス」をご参照ください。

次の例は、Terraform を使用してルーティングアドオンを構成する方法を示しています。

詳細の表示

# nginx-ingress-controller ルーティングを使用します。
# インターネット向け SLB の場合、IngressSlbNetworkType を "internet" に設定します。
# 内部 SLB の場合、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}}" # 新しい ALB を作成します (少なくとも 2 つのゾーンを選択)。
  }
}

デフォルトアドオンの無効化

クラスター管理を簡素化するために、ACK は特定のアドオンをデフォルトでインストールします。クラスター作成時にアドオンが不要な場合は、disabled = true を設定して無効にできます。次の例では、nginx-ingress-controller を無効にします。

# nginx-ingress-controller のインストールを防止します。

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

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

アドオンが指定されていない場合にインストールされるデフォルトアドオン

クラスターを作成する際にアドオンを指定しない場合、次のアドオンがデフォルトでインストールされます。

クラスタータイプ

アドオンタイプ

デフォルトのアドオン名

説明

ACK クラスター

システムコンポーネント

kube-scheduler

Kube Scheduler を使用してクラスターリソースのスケジューリングを行います。

cloud-controller-manager

Cloud Controller Manager を使用して K8s アプリケーションのロードバランサーを作成し、ノードのルートエントリを管理します。

kube-apiserver

APIServer は K8s クラスターのバスおよびイングレスゲートウェイです。

kube-controller-manager

KCM は K8s クラスター内の内部リソースを管理します。

ロギングとモニタリング

alicloud-monitor-controller

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

metrics-server

Metrics Server は、アプリケーションコンテナのリソースモニタリングメトリクスを提供し、クラスターの自動スケーリングをサポートします。

ストレージ

csi-plugin

csi-plugin を使用してボリュームのライフサイクルを管理します (推奨)。

csi-provisioner

csi-provisioner を使用してボリュームの作成と削除を行います (推奨)。

storage-operator

storage-operator を使用してストレージの運用管理を行います (推奨)。

ネットワーキング

CoreDNS

Kubernetes クラスターの DNS サーバ。

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 を使用して K8s アプリケーションのロードバランサーを作成し、ノードのルートエントリを管理します。

kube-apiserver

APIServer は K8s クラスターのバスおよびイングレスゲートウェイです。

kube-controller-manager

KCM は K8s クラスター内の内部リソースを管理します。

ネットワーキング

CoreDNS

K8s クラスターの DNS サーバ。

ACK Edge クラスター

システム

kube-scheduler

Kube Scheduler を使用してクラスターリソースのスケジューリングを行います

cloud-controller-manager

Cloud Controller Manager を使用して K8s アプリケーションのロードバランサーを作成し、ノードのルートエントリを管理します。

kube-apiserver

APIServer は K8s クラスターのバスおよびイングレスゲートウェイです。

kube-controller-manager

KCM は K8s クラスター内の内部リソースを管理します。

ロギングとモニタリング

alicloud-monitor-controller

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

metrics-server

Metrics Server は、アプリケーションコンテナのリソースモニタリングメトリクスを提供し、クラスターの自動スケーリングをサポートします

ネットワーキング

CoreDNS

Kubernetes クラスターの DNS サーバ。

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 を選択する。

  • ストレージに Container Storage Interface (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]\"}"
  }
}