Container Service for Kubernetes (ACK) のアドオンはクラスターの機能を拡張するもので、クラスター作成時に指定し、その後は Terraform を使用してライフサイクルを管理します。
アドオンの種類
ACK アドオンには、システムアドオンとオプションアドオンがあります。「アドオン」をご参照ください。
システムアドオン
システムアドオンは、クラスター作成時にデフォルトでインストールされる基盤となるサービスです。
例:
kube-apiserver
kube-controller-manager
cloud-controller-manager
kube-proxy
-
CoreDNS
オプションアドオン
オプションアドオンは必須ではありませんが、インストールすることでクラスターの機能を拡張できます。これらは、次のようなカテゴリに分けられます:
-
アプリケーション管理
-
ロギングとモニタリング
-
ストレージ
-
ネットワーキング
-
セキュリティ
コンソールでの Terraform 設定パラメーターの生成
ACK コンソールでは、クラスターアドオンを管理するための Terraform 設定を自動生成できます。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
-
[アドオン] ページで、対象のアドオンを選択し、[インストール] または [設定] をクリックします。
-
表示されたダイアログボックスで [Console-to-Code] をクリックします。[Terraform] タブをクリックし、表示された設定をコピーします。
アドオン管理のベストプラクティス
クラスター作成時にアドオンを指定し、そのライフサイクルを管理します。以降のセクションでは、さまざまなシナリオにおけるライフサイクル管理とベストプラクティスについて説明します。
クラスター作成時のアドオン指定
次の Terraform リソースは、異なるクラスタータイプに対応しています:
-
ACK マネージドクラスター:alicloud_cs_managed_kubernetes
-
ACK 専用クラスター:alicloud_cs_kubernetes
-
ACK エッジクラスター:alicloud_cs_edge_kubernetes
-
ACK サーバーレスクラスター:alicloud_cs_serverless_kubernetes
アドオンを指定するには、リソースで addons オブジェクトを設定します。次のコードブロックに、addons オブジェクトの属性を示します。
# この例では ACK マネージドクラスターを使用します。
resource "alicloud_cs_managed_kubernetes" "default" {
# その他のパラメーター。
# ...
# addons オブジェクトはリストです。リソース内で addons オブジェクトを設定して、クラスター作成時にインストールするアドオンを指定できます。
addons {
# アドオン名。データソース alicloud_cs_kubernetes_addons を使用してアドオン名を照会できます。
# クラスターにすでにインストールされているアドオン、インストール可能なアドオン、および各アドオンのバージョン。
name = "XXX"
# アドオンのカスタムパラメーター。カスタムパラメーターをサポートするクラスターアドオンの場合、この属性を設定できます。詳細については、「クラスターアドオンのカスタムパラメーターの変更」をご参照ください。
config = jsonencode(
{
....
}
)
# 値はブール型で、デフォルトは false です。デフォルトでは、ACK はクラスターを管理するための特定のアドオンを自動的にインストールします。ACK がクラスターを作成する際にアドオンをインストールしない場合は、disabled=true を設定します。
disabled = XXX
}
}
addons オブジェクトはクラスター作成時にのみ適用されます。クラスター作成後にこのオブジェクトを変更しても、アドオンの更新、アンインストール、再設定はできません。クラスター作成後のアドオンの管理をご参照ください。
次の表に、Terraform で設定可能なアドオンを示します。
|
アドオン |
アドオンタイプ |
説明 |
Terraform を使用した設定方法 |
|
appcenter |
アプリケーション管理 |
クラスター間でアプリケーションのデプロイとライフサイクルを一元管理します。 |
|
|
progressive-delivery-tool |
アプリケーション管理 |
アプリケーションの段階的なリリースを可能にします。 |
|
|
alicloud-monitor-controller |
ロギングとモニタリング |
CloudMonitor との統合を有効にします。 |
|
|
metrics-server |
ロギングとモニタリング |
オープンソースの Metrics Server に基づいてリソースメトリクスを収集します。Metrics API を提供し、Horizontal Pod Autoscaler (HPA) をサポートします。 |
|
|
ack-node-problem-detector |
ロギングとモニタリング |
オープンソースの Node Problem Detector (NPD) に基づいてノードの健全性を監視します。サードパーティのモニタリングプラットフォームに接続します。 |
|
|
ags-metrics-collector |
ロギングとモニタリング |
Alibaba Cloud Genomics Service (AGS) のワークフローで、ノードごとのリソース使用量を監視します。 |
|
|
ack-arms-prometheus |
ロギングとモニタリング |
Managed Service for Prometheus を使用して ACK クラスターを監視します。 |
|
|
loongcollector |
ロギングとモニタリング |
Log Service を使用してコンテナログを収集します。 |
|
|
csi-plugin |
ストレージ |
ボリュームのマウントとアンマウントを行います。クラスター作成時に CSI を選択すると、自動的にインストールされます。 |
|
|
csi-provisioner |
ストレージ |
ボリュームのプロビジョニングを自動化します。クラスター作成時に CSI を選択すると、自動的にインストールされます。 |
|
|
storage-operator |
ストレージ |
ボリュームアドオンのライフサイクルを管理します。 |
|
|
alicloud-disk-controller |
ストレージ |
ディスクボリュームのプロビジョニングを自動化します。 |
|
|
flexvolume |
ストレージ |
Kubernetes コミュニティによって開発された初期のストレージボリューム拡張メカニズムです。ボリュームのマウントとアンマウントを行います。クラスター作成時に FlexVolume を選択すると、自動的にインストールされます。 |
|
|
nginx-ingress-controller |
ネットワーキング |
Ingress のルーティングルールを解析し、一致するリクエストをバックエンドの Service に転送します。 |
|
|
terway-eniip |
ネットワーキング |
VPC と連携し、標準の Kubernetes ネットワークポリシーをサポートする Alibaba Cloud の CNI アドオンです。クラスター内のネットワーク接続を設定します。クラスター作成時に Terway を選択すると、自動的にインストールされます。 |
|
|
ack-node-local-dns |
ネットワーキング |
オープンソースの NodeLocal DNSCache プロジェクトに基づいて開発されたローカル DNS キャッシュソリューションです。 |
|
|
aliyun-acr-credential-helper |
セキュリティ |
Container Registry Enterprise Edition と Personal Edition から、パスワードなしでプライベートイメージをプルします。 |
|
|
gatekeeper |
セキュリティ |
ACK クラスターで OPA ポリシーを管理および適用し、名前空間ラベルを管理します。 |
|
|
kritis-validation-hook |
セキュリティ |
イメージの署名を検証します。 |
|
|
security-inspector |
セキュリティ |
セキュリティ検査を実施します。 |
|
|
ack-kubernetes-webhook-injector |
セキュリティ |
Alibaba Cloud サービスのホワイトリスト内で Pod IP アドレスを動的に管理します。 |
|
|
ack-arena |
その他 |
ACK コンソールにオープンソースの Arena をインストールします。 |
|
|
ack-cost-exporter |
その他 |
コスト分析データの処理を有効にします。 |
|
|
ack-kubernetes-cronhpa-controller |
その他 |
スケジュールに基づいてワークロードをスケーリングします。 |
|
|
ack-virtual-node |
その他 |
Aliyun Provider をサポートするオープンソースの Virtual Kubelet に基づいています。Kubernetes と Elastic Container Instance のシームレスな統合を実現します。 |
|
|
aesm |
その他 |
Intel SGX Enclave の起動をサポートする Intel SGX のシステムアドオンです。キーのプロビジョニングやリモートアテステーションなどのサービスが含まれます。 |
|
|
aliyun-acr-acceleration-suite |
その他 |
オンデマンドのイメージロードを有効にします。ワーカーノード上に DaemonSet としてデプロイされます。 |
|
|
migrate-controller |
その他 |
オープンソースの Velero に基づいて Kubernetes アプリケーションを移行します。 |
|
|
resource-controller |
その他 |
Pod のリソースを動的に制御します。ACK Pro クラスターでトポロジー対応の CPU スケジューリングを行うために必要です。 |
|
|
sandboxed-container-controller |
その他 |
Sandboxed-Container ランタイムのサンドボックスコンテナ機能を強化および拡張します。 |
|
|
sandboxed-container-helper |
その他 |
サンドボックスコンテナのヘルスチェックと運用保守 (O&M) を実行します。 |
|
|
sgx-device-plugin |
その他 |
コンテナで Intel SGX を使用する手順を簡素化します。ACK チームと Ant Group によって開発されました。 |
|
クラスター作成後のアドオン管理
アドオンのライフサイクルを管理する前に、Container Service for Kubernetes (ACK) クラスターがあることを確認してください。
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 を設定するには、以下のいずれかの方法を使用します。
-
jsonencodeを使用してカスタムパラメーターを設定します:config = jsonencode( { IngressSlbNetworkType="internet" IngressSlbSpec="slb.s2.small" } ) -
JSON 文字列でカスタムパラメーターを直接指定します。
config = "{\"IngressSlbNetworkType\":\"internet\",\"IngressSlbSpec\":\"slb.s2.small\"}"
インストール済みアドオンの Terraform へのインポート
terraform import を使用して、クラスターアドオンを Terraform の管理対象としてインポートします。 次の例では nginx-ingress-controller を使用します。
-
.tf ファイルを作成し、リソースを定義します。すでに .tf ファイルがある場合は、そのファイルに定義します。
alicloud_cs_kubernetes_addonリソースはクラスターアドオンを管理します。最初は空のままにしておきます。resource "alicloud_cs_kubernetes_addon" "nginx-ingress-controller" { } -
nginx-ingress-controller をインポートします。
Terraform は、クラスターから nginx-ingress-controller の設定を .state ファイルにプルします。
terraform import alicloud_cs_kubernetes_addon.nginx-ingress-controller <cluster_id>:nginx-ingress-controller -
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 を使用します。
-
.tf ファイルでアドオンを指定します。
-
クラスター ID。
-
アドオンの名前とバージョン。
alicloud_cs_kubernetes_addonsデータソースを使用して、インストール可能なアドオンとバージョンを照会します。最新バージョンのみが表示されます。以前のバージョンについては、アドオンのリリースノートをご確認ください。 -
(オプション) カスタムアドオンの設定。
jsonencodeを使用してconfigフィールドをカスタマイズします。サポートされているパラメーターは、alicloud_cs_kubernetes_addon_metadataデータソースを使用して照会します。詳細については、「アドオンパラメーターのカスタマイズ」をご参照ください。
-
-
アドオンをインストールします。
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 を使用します。
terraform apply を実行してアドオンを更新します。Apply complete! が表示されると、更新は成功です。
アドオンパラメーターのカスタマイズ
alicloud_cs_kubernetes_addons の config フィールドを変更して、アドオン設定をカスタマイズします。 次の例では Gatekeeper を使用します。
alicloud_cs_kubernetes_addon_metadata データソースを使用して、サポートされているカスタムパラメーターを照会すると、JSON スキーマが返されます。たとえば、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 スキーマで、properties 属性にはサポートされているすべてのカスタムパラメーターがリストされています:
-
default:デフォルト値
-
description:パラメーターの説明
-
pattern:有効な値の正規表現
-
type:データ型
ネットワークアドオンの設定
ACK クラスターは、コンテナネットワークには Terway を使用します。概要をご参照ください。
次の例では、Terraform を使用してネットワークアドオンを設定します:
ボリュームアドオンの設定
ACK は、FlexVolume と CSI のボリュームアドオンを提供しています。FlexVolume は廃止されたため、代わりに CSI を使用してください。クラスター作成時にストレージアドオンが指定されていない場合、デフォルトで CSI がインストールされます。
ロギングアドオンの設定
ACK のログ収集アドオンは、次の 2 つの方法のいずれかで、ログを Simple Log Service (SLS) に保存します。
-
既存の SLS プロジェクトを使用します。
-
クラスター作成時に ACK が自動的に SLS プロジェクトを作成します。
以下の例では、選択した Log Service プロジェクトに応じて、Terraform で loongcollector および ack-node-problem-detector を設定します。
モニタリング アドオンの設定
ACK は、ECS ノード向けの CloudMonitor エージェントと、Managed Service for Prometheus アドオンを提供しています。CloudMonitor エージェントをインストールするには、Terraform で install_cloud_monitor パラメーターを設定します。
Ingress アドオンの設定
ACK は、アプリケーションにトラフィックをルーティングするために nginx-ingress-controller と alb-ingress-controller を提供します。
-
nginx-ingress-controller:オープンソースの ingress-nginx に基づいています。柔軟で信頼性の高いルーティングを提供します。NGINX Ingress の概要をご参照ください。
-
alb-ingress-controller:ACK によってマネージドされています。柔軟で信頼性の高いルーティングを提供します。ALB イングレスを使用した Service へのアクセスをご参照ください。
次の例では、Terraform を使用して Ingress アドオンを設定します。
デフォルトアドオンのインストールの無効化
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 |
クラスターのリソースをスケジューリングします。 |
|
|
cloud-controller-manager |
SLB インスタンスを作成し、ノードのルートエントリを管理します。 |
|||
|
kube-apiserver |
ACK クラスターのバスおよび Ingress ゲートウェイです。 |
|||
|
kube-controller-manager |
クラスター内のリソースマネージャーです。 |
|||
|
ロギングとモニタリングのアドオン |
alicloud-monitor-controller |
コンテナのライフサイクルとステータスを監視します。 |
||
|
metrics-server |
オートスケーリングのために、コンテナのリソースメトリクスを収集します。 |
|||
|
ボリュームアドオン |
csi-plugin |
ボリュームのライフサイクルを管理します。このアドオンを推奨します。 |
||
|
csi-provisioner |
ボリュームを作成および削除します。このアドオンを推奨します。 |
|||
|
storage-operator |
ストレージアドオンのライフサイクルを管理します。このアドオンを推奨します。 |
|||
|
ネットワークアドオン |
CoreDNS |
Kubernetes クラスターの DNS サーバーとして機能します。 |
||
|
Gateway API |
ゲートウェイのリソースモデルです。 |
|||
|
terway-eniip |
Terway ネットワークアドオンです。 |
|||
|
nginx-ingress-controller (デフォルトでは Pro 版がインストールされます) |
NGINX Ingress のトラフィック転送ルールを解析します。 |
|||
|
ACK Serverless クラスター |
システムアドオン |
kube-scheduler |
クラスターのリソースをスケジューリングします。 |
|
|
ack-virtual-node |
仮想ノードと Elastic Container Instance を使用してリソースをスケーリングします。 |
|||
|
cloud-controller-manager |
SLB インスタンスを作成し、ノードのルートエントリを管理します。 |
|||
|
kube-apiserver |
ACK クラスターのバスおよび Ingress ゲートウェイです。 |
|||
|
kube-controller-manager |
クラスター内のリソースマネージャーです。 |
|||
|
ネットワークアドオン |
CoreDNS |
Kubernetes クラスターの DNS サーバーとして機能します。 |
||
|
ACK Edge クラスター |
システムアドオン |
kube-scheduler |
クラスターのリソースをスケジューリングします。 |
|
|
cloud-controller-manager |
SLB インスタンスを作成し、ノードのルートエントリを管理します。 |
|||
|
kube-apiserver |
ACK クラスターのバスおよび Ingress ゲートウェイです。 |
|||
|
kube-controller-manager |
クラスター内のリソースマネージャーです。 |
|||
|
ロギングとモニタリングのアドオン |
alicloud-monitor-controller |
コンテナのライフサイクルとステータスを監視します。 |
||
|
metrics-server |
オートスケーリングのメカニズムのために、コンテナリソースの使用量メトリクスを収集します。 |
|||
|
ネットワークアドオン |
CoreDNS |
Kubernetes クラスターの DNS サーバーとして機能します。 |
||
|
terway-eniip |
Terway ネットワークアドオンです。 |
|||
|
その他 |
edge-controller-manager |
- |
||
|
edge-tunnel-agent |
C/S アーキテクチャを使用し、クラウドエッジ連携のためのリバース O&M トンネルを作成します。 |
|||
|
edge-tunnel-server |
C/S アーキテクチャを使用し、クラウドエッジ連携のためのリバース O&M トンネルを作成します。 |
|||
|
yurt-app-manager |
ACK Edge クラスター向けにノードプールとセルベースデプロイメントを提供します。 |
|||
一般的な設定例
次の例では、一般的なアドオン設定を紹介します。
-
ネットワークアドオンとして Terway を使用します。
-
CSI (推奨) または FlexVolume を使用します。FlexVolume は廃止されています。
-
要件に応じて nginx-ingress-controller または alb-ingress-controller を選択します。
-
要件に応じてその他のアドオンを選択します。