Container Service for Kubernetes (ACK) は、クラスターの機能を拡張するための豊富なアドオンセットを提供しています。このトピックでは、Terraform でアドオンを構成して、さまざまなシナリオでワークロードを管理する方法について説明します。
アドオンのタイプ
ACK は、システムアドオンとオプションアドオンの 2 種類のアドオンを管理します。アドオンの詳細については、「アドオン」をご参照ください。
システムアドオン
システムアドオンは、ACK クラスターを実行するために必要な必須コンポーネントです。クラスターを作成する際にデフォルトでインストールされます。例として、以下のようなものがあります。
kube-apiserver
kube-controller-manager
cloud-controller-manager
kube-proxy
CoreDNS
オプションアドオン
オプションアドオンは、ACK が提供する必須ではないコンポーネントで、クラスターの機能を拡張するために任意でインストールできます。これらは、アプリケーション管理、ロギングとモニタリング、ストレージ、ネットワーキング、セキュリティなどのカテゴリに分類されます。
コンソールを使用したアドオン管理用の Terraform パラメーターの生成
コンソールを使用して、アドオン用の Terraform パラメーター構成を生成できます。これにより、アドオン管理の効率と使いやすさが向上します。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、管理したいクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、アドオン管理 をクリックします。
[アドオン] ページで、対象のアドオンを検索して見つけます。アドオンカードで、必要に応じて [インストール] または [構成] をクリックします。
表示されたダイアログボックスで、[同等のコード] をクリックします。右側のパネルで、[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 | アプリケーション管理 | マルチクラスターのアプリケーションデプロイメントとアプリケーションライフサイクルを管理するための統一されたアプリケーションセンターを提供します。 |
|
progressive-delivery-tool | アプリケーション管理 | アプリケーションの段階的なリリースを可能にします。 |
|
alicloud-monitor-controller | ロギングとモニタリング | ACK と CloudMonitor を統合します。 |
|
metrics-server | ロギングとモニタリング | オープンソースコミュニティのメトリクスコンポーネントの拡張版です。モニタリングデータを収集し、データ消費と Horizontal Pod Autoscaler (HPA) 機能のための Metrics API を提供します。 |
|
ack-node-problem-detector | ロギングとモニタリング | ノードの異常イベントを監視し、サードパーティのモニタリングプラットフォームと統合するためのオープンソースコミュニティプロジェクトの拡張版です。 |
|
ags-metrics-collector | ロギングとモニタリング | ゲノミクス顧客向けのモニタリングサービスコンポーネントです。ゲノミクスワークフローにおけるノードの詳細なリソース使用量を監視します。 |
|
ack-arms-prometheus | ロギングとモニタリング | Alibaba Cloud Prometheus を使用して ACK クラスターを監視します。 |
|
loongcollector | ロギングとモニタリング | Simple Log Service (SLS) を使用して Kubernetes コンテナログを収集します。 | |
csi-plugin | ストレージ | ボリュームのマウントとアンマウントをサポートします。クラスター作成時に CSI プラグインを選択して Alibaba Cloud ストレージ統合を有効にすると、このアドオンはデフォルトでインストールされます。 |
|
csi-provisioner | ストレージ | 自動的なボリューム作成をサポートします。クラスター作成時に CSI プラグインを選択して Alibaba Cloud ストレージ統合を有効にすると、このアドオンはデフォルトでインストールされます。 |
|
storage-operator | ストレージ | ストレージアドオンのライフサイクルを管理します。 |
|
alicloud-disk-controller | ストレージ | クラウドディスクボリュームの自動作成をサポートします。 |
|
flexvolume | ストレージ | FlexVolume は、Kubernetes コミュニティの初期のボリューム拡張メカニズムで、ボリュームのマウントとアンマウントをサポートします。クラスターを作成し、FlexVolume プラグインを選択して Alibaba Cloud ストレージに接続すると、このコンポーネントはデフォルトでインストールされます。 |
|
nginx-ingress-controller | ネットワークコンポーネント | Nginx Ingress Controller は Ingress 転送ルールを解析します。リクエストを受信すると、Ingress ルールに一致させ、トラフィックをバックエンドサービスに転送します。 | |
terway-eniip | ネットワークコンポーネント | VPC に基づくオープンソースの Alibaba Cloud CNI プラグインです。標準の Kubernetes ネットワークポリシーを使用して、コンテナ間のアクセスルールを定義します。Terway を使用して、Kubernetes クラスター内の内部通信を有効にできます。クラスター作成時に Terway ネットワークプラグインを選択すると、このアドオンはデフォルトでインストールされます。 |
|
ack-node-local-dns | ネットワーキング | オープンソースの NodeLocal DNSCache プロジェクトに基づく DNS ローカルキャッシュソリューションです。 | |
aliyun-acr-credential-helper | セキュリティ | ACK クラスター内で ACR のデフォルト版または Enterprise Edition から非公開イメージをパスワードなしでプルできるようにします。 |
|
gatekeeper | セキュリティ | 名前空間のラベル管理など、クラスター内の Open Policy Agent (OPA) ポリシーの管理と適用を支援します。 |
|
kritis-validation-hook | セキュリティ | 信頼できるコンテナデプロイメントにおけるコンテナイメージ署名の検証のための主要コンポーネントです。 |
|
security-inspector | セキュリティ | セキュリティ検査のための主要コンポーネントです。 |
|
ack-kubernetes-webhook-injector | セキュリティ | Pod の IP を Alibaba Cloud プロダクトのホワイトリストに動的に追加または削除する Kubernetes コンポーネントで、手動での構成を不要にします。 |
|
ack-arena | その他 | オープンソースの Arena のインストールを簡素化し、コンソールからのワンクリックインストールを可能にします。 |
|
ack-cost-exporter | その他 | ACK コスト分析におけるデータ処理のためのプラグインです。 |
|
ack-kubernetes-cronhpa-controller | その他 | アプリケーションワークロードのスケジュールされたスケーリングを可能にします。 |
|
ack-virtual-node | その他 | オープンソースの Virtual Kubelet プロジェクトをベースに構築され、Aliyun Provider のサポートを拡張し、Kubernetes と Elastic Container Instance (ECI) をシームレスに接続するための広範な最適化が施されています。 |
|
aesm | その他 | Intel® SGX Architectural Enclave Service Manager (Intel® SGX AESM) は、Intel® SGX のシステムコンポーネントで、エンクレーブの起動サポート、キープロビジョニング、リモートアテステーションサービスを提供します。 |
|
aliyun-acr-acceleration-suite | その他 | オンデマンドのイメージ読み込み高速化を提供するクライアントサイドプラグインです。ワーカーノードに DaemonSet としてデプロイされます。 |
|
migrate-controller | その他 | オープンソースの Velero プロジェクトに基づいて開発された Kubernetes アプリケーション移行コンポーネントです。 |
|
resource-controller | その他 | 動的な Pod リソース制御のための主要コンポーネントです。このアドオンをインストールすると、ACK Pro クラスターで CPU トポロジーを意識したスケジューリングを使用できます。 |
|
sandboxed-container-controller | その他 | サンドボックスコンテナランタイム専用のコントローラーで、基本的なサンドボックスコンテナ機能を強化・拡張します。 |
|
sandboxed-container-helper | その他 | サンドボックスコンテナの診断および運用管理のためのコンポーネントです。 |
|
sgx-device-plugin | その他 | Alibaba Cloud Container Service チームと Ant Financial セキュアコンピューティングチームが共同開発した Intel SGX 用の Kubernetes Device Plugin です。コンテナでの SGX の使用を簡素化します。 |
|
クラスター作成後のアドオンのライフサイクル管理
アドオンのライフサイクルを管理するには、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 アドオンをインポートする方法を示しています。
.tf 拡張子を持つ新しいファイルを作成するか、既存の .tf ファイルを使用して、リソースを定義します。
alicloud_cs_kubernetes_addonリソースはクラスターアドオンを管理します。現時点では空のままにしておきます。resource "alicloud_cs_kubernetes_addon" "nginx-ingress-controller" { }次のコマンドを実行して、クラスターに既にインストールされている nginx-ingress-controller アドオンをインポートします。
Terraform はクラスターからアドオン構成をプルし、.state 拡張子を持つファイルに書き込みます。
terraform import alicloud_cs_kubernetes_addon.nginx-ingress-controller <cluster_id>:nginx-ingress-controllerterraform 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データソースを使用して、利用可能なアドオン名とバージョンをクエリできます。これは、各アドオンの最新のインストール可能なバージョンのみを返します。過去のバージョンをインストールするには、アドオンのリリースノートを確認し、対応するバージョン番号を指定します。(オプション) カスタム構成:
configフィールドを変更してアドオンをカスタマイズします。Terraform の組み込みjsonencode関数を使用して構成を構築できます。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 を実行してアドオンをアップグレードします。成功メッセージは、アップグレードが完了したことを示します。
クラスターアドオンのカスタム構成パラメーターの変更
一部の ACK アドオンは、カスタムパラメーター構成をサポートしています。alicloud_cs_kubernetes_addons リソースを使用して、アドオン構成を更新できます。gatekeeper アドオンの場合、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:フィールドのタイプ。
ネットワーキングアドオンの構成
ACK では、Terway ネットワーキングモードを使用してコンテナネットワーキング機能を実現できます。詳細については、「ネットワーキング」をご参照ください。
次の例は、Terraform を使用してネットワーキングアドオンを構成する方法を示しています。
ストレージアドオンの構成
ACK は、FlexVolume と Container Storage Interface (CSI) に基づくストレージアドオンを提供します。FlexVolume は非推奨であり、ACK は主に CSI ストレージアドオンを維持しています。Terraform でクラスターを作成する際にストレージアドオンを指定しない場合、CSI がデフォルトでインストールされます。Terraform でストレージアドオンを次のように定義できます。
ロギングアドオンの構成
ACK のログ収集アドオンは、収集したログを Simple Log Service (SLS) に保存します。次の 2 つのログストレージオプションをサポートしています。
ログストレージに既存の SLS プロジェクトを使用する。
クラスター作成時にログストレージ用に新しい SLS プロジェクトを自動的に作成する。
これらのシナリオでは構成が異なります。次の Terraform の例は、両方のシナリオを示しています。
モニタリングアドオンの構成
ACK は、ECS ノード用の CloudMonitor エージェントや Prometheus Service などのモニタリングアドオンを提供します。Terraform で install_cloud_monitor パラメーターを設定することで、ECS ノードに CloudMonitor エージェントをインストールできます。
Ingress ルーティングアドオンの構成
ACK は、Nginx Ingress と ALB Ingress の 2 つのトラフィックイングレスソリューションを提供します。
Nginx Ingress:コミュニティの ingress-nginx の最適化バージョンで、Kubernetes クラスターに柔軟で信頼性の高いルーティングを提供します。詳細については、「Nginx Ingress の概要」をご参照ください。
ALB Ingress:完全に管理された高信頼性の ALB Ingress で、Kubernetes クラスターに柔軟で信頼性の高いルーティングを提供します。詳細については、「ALB Ingress を介したサービスへのアクセス」をご参照ください。
次の例は、Terraform を使用してルーティングアドオンを構成する方法を示しています。
デフォルトアドオンの無効化
クラスター管理を簡素化するために、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 のいずれかを選択する。
必要に応じて他のアドオンをインストールする。自由に組み合わせることができます。