Container Service for Kubernetes (ACK) は、クラスター機能を拡張するためのさまざまなアドオンを提供します。 このトピックでは、Terraformを使用してアドオンを設定し、さまざまなシナリオの要件を満たす方法について説明します。
アドオンの種類
ACKは、システムアドオンとオプションのアドオンのタイプを管理します。 詳細については、「コンポーネントの概要」をご参照ください。
システムアドオン
システムアドオンは、ACKクラスターの実行に必要な基本的なアドオンです。 システムアドオンは、システムがACKクラスターを作成すると自動的にインストールされます。 たとえば、次のアドオンは、システムがクラスターを作成するときに自動的にインストールされます。
Kube-apiserver
kube-controller-manager
cloud-controller-manager
kube-proxy
CoreDNS
オプションのアドオン
オプションのアドオンをデプロイして、オンデマンドでクラスターの機能を拡張できます。 オプションのアドオンは、アプリケーション管理アドオン、ロギングおよびモニタリングアドオン、ボリュームアドオン、ネットワークアドオン、およびセキュリティアドオンに分類されます。
アドオン管理のベストプラクティス
Terraformを使用して、クラスターの作成時にインストールするアドオンを指定できます。 クラスターの作成後、クラスター内のアドオンのライフサイクルを管理できます。 次のセクションでは、クラスターにインストールされているアドオンのライフサイクルを管理する方法と、さまざまなシナリオに適用されるベストプラクティスについて説明します。
クラスターの作成時にインストールするアドオンの指定
クラスターの作成時にインストールするアドオンを指定できます。 さまざまなタイプのクラスターを作成する場合、次のリソースが含まれます。
ACK管理クラスター: alicloud_cs_managed_kubernetes
ACK専用クラスター: alicloud_cs_kubernetes
ACKエッジクラスター: alicloud_cs_edge_kubernetes
ACKサーバーレスクラスター: alicloud_cs_serverless_kubernetes
addons
オブジェクトを設定して、上記のいずれかのリソースを作成するときにインストールするアドオンを指定できます。 次のコードブロックは、addons
オブジェクトの属性を示しています。
# This example uses an ACK managed cluster.
resource "alicloud_cs_managed_kubernetes" "default" {
# Other parameters.
# ...
# The addons object is a list. You can set the addons object in a Resource to specify the add-ons to be installed when the system creates the cluster.
addons {
# The name of the add-on. You can query the name of an add-on by using alicloud_cs_kubernetes_addons of Data Source.
# The add-ons that are already installed and can be installed in the cluster and the versions of the add-ons.
name = "XXX"
# Custom add-on parameters. You can set this attribute for cluster add-ons that support custom parameters. For more information, see the Modify the custom parameters of a cluster add-on section.
config = jsonencode(
{
....
}
)
# The value is of Boolean type and the default is false. By default, ACK automatically installs specific add-ons for you to manage the cluster. If you do not want ACK to install add-ons when ACK creates the cluster, set disabled=true.
disabled = XXX
}
}
リソース内のアドオンオブジェクトを設定して、クラスターを作成するときにのみインストールするアドオンを指定できます。 クラスターの作成後、アドオンのライフサイクルを管理するためにアドオンオブジェクトを変更することはできません。 たとえば、このメソッドを使用してアドオンを更新、アンインストール、または変更することはできません。 クラスター作成後のアドオンのライフサイクルを管理する方法の詳細については、「クラスター作成後のアドオンのライフサイクルの管理」をご参照ください。
ACKクラスターでTerraformを使用してアドオンを設定する方法を次の表に示します。
アドオン | アドオンタイプ | 説明 | Terraformを使用して設定する方法 |
appcenter | アプリケーション管理 | さまざまなクラスター内のアプリケーションのデプロイとライフサイクルを一元管理できます。 |
|
プログレッシブ配信ツール | アプリケーション管理 | アプリケーションの段階的リリースを許可します。 |
|
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) ユーザーが、AGSワークフローの各ノードで使用されるリソースを監視できるようにします。 |
|
ack-arms-プロメテウス | ログとモニタリング | Prometheusのマネージドサービスを使用してACKクラスターを監視します。 |
|
logtail-ds | ログとモニタリング | Log Serviceを使用してコンテナログを収集します。 | |
csi-plugin | ボリューム | ボリュームをマウントおよびマウント解除できます。 このアドオンは、ACKクラスターの作成時にCSIアドオンを選択すると自動的にインストールされます。 |
|
csi-provisioner | ボリューム | ボリュームのプロビジョニングを自動化できます。 このアドオンは、ACKクラスターの作成時にCSIアドオンを選択すると自動的にインストールされます。 |
|
storage-operator | ボリューム | ボリュームアドオンのライフサイクルを管理します。 |
|
alicloud-disk-controller | ボリューム | ディスクボリュームのプロビジョニングを自動化できます。 |
|
flexvolume | ボリューム | ボリューム拡張を可能にするために初期段階で開発されたオープンソースのアドオン。 FlexVolumeアドオンは、ボリュームのマウントとアンマウントに使用されます。 このアドオンは、ACKクラスターの作成時にFlexVolumeアドオンを選択すると自動的にインストールされます。 |
|
nginx-ingress-controller | ネットワーク | ACKクラスター内のIngressのルーティングルールを解析します。 Ingressコントローラーが転送ルールに一致するリクエストを受信すると、リクエストはバックエンドサービスにルーティングされます。 | |
terway-eniip | ネットワーク | Alibaba Cloudによって開発されたオープンソースのContainer Network Interface (CNI) アドオン。 このアドオンはVirtual Private Cloud (VPC) と一緒に使用され、標準のKubernetesネットワークポリシーを使用して、コンテナー間の通信方法を調整できます。 Terwayを使用して、Kubernetesクラスター内のネットワーク接続を設定できます。 このアドオンは、ACKクラスターの作成時にTerwayアドオンを選択すると自動的にインストールされます。 |
|
ack-node-local-dns | ネットワーク | オープンソースのNodeLocal DNSCacheプロジェクトに基づいて開発されたローカルDNSキャッシングソリューション。 | |
aliyun-acr-credential-helper | セキュリティ | Container Registry Enterprise EditionおよびPersonal Editionのインスタンスからパスワードなしでプライベートイメージをプルできます。 |
|
ゲートキーパー | セキュリティ | ACKクラスターでOpen Policy Agent (OPA) によって実行されるポリシーを管理および適用し、名前空間のラベルを管理できます。 |
|
kritis-validation-hook | セキュリティ | イメージ署名を検証するために使用されるキーアドオン。 |
|
security-inspector | セキュリティ | セキュリティ検査を実行するために使用される重要なアドオン。 |
|
ack-kubernetes-webhook-injector | セキュリティ | さまざまなAlibaba CloudサービスのホワイトリストにポッドIPアドレスを動的に追加または削除できます。 これにより、手動操作から解放されます。 |
|
ack-アリーナ | その他 | オープンソースのArenaをACKコンソールに効率的にインストールできます。 |
|
ack-cost-exporter | その他 | コスト分析機能を使用してデータを処理できます。 |
|
ack-kubernetes-cronhpa-controller | その他 | スケジュールに基づいてワークロードをスケールできます。 |
|
ack-仮想ノード | その他 | このアドオンは、オープンソースのVirtual Kubeletプロジェクトに基づいて開発され、Aliyun Providerのサポートを追加します。 このアドオンが改善され、KubernetesとElastic Container Instanceのシームレスな統合が可能になりました。 |
|
aesm | その他 | Intel (R) Software Guard Extensions (SGX) Architectural Enclave Service Manager (AESM) は、Intel SGXのシステムアドオンです。 このアドオンは、SGX Enclaveの起動サポートを提供し、キーのプロビジョニングやリモート証明などのサービスを提供します。 |
|
aliyun-acr-acceleration-suite | その他 | オンデマンド画像の読み込みを可能にするクライアントアドオン。 このアドオンは、ワーカーノードにDaemonSetとしてデプロイされます。 |
|
migrate-controller | その他 | このアドオンは、オープンソースのVeleroプロジェクトに基づいて開発されており、Kubernetesアプリケーションを移行できます。 |
|
リソースコントローラ | その他 | ポッドを動的にスケジュールするために使用されるキーアドオン。 ACK Proクラスターのトポロジ対応CPUスケジューリングを有効にする場合は、このアドオンが必要です。 |
|
sandboxed-container-controller | その他 | サンドボックスコンテナーの基本機能を強化および拡張するために、サンドボックスコンテナーランタイムによって提供されるコントローラーアドオン。 |
|
sandboxed-container-helper | その他 | サンドボックス化されたコンテナに対してヘルスチェックとO&M操作を実行できます。 |
|
sgx-device-plugin | その他 | ACKチームとAntグループによって開発されたKubernetesデバイスアドオン。 このアドオンは、コンテナでのIntel (R) Software Guard Extensions (SGX) の使用を簡素化します。 |
|
クラスター作成後のアドオンのライフサイクルの管理
アドオンのライフサイクルを管理するには、ACKクラスターがあることを確認します。 ACKクラスターがない場合は、最初に作成します。
クラスターリソースでalicloud_cs_kubernetes_addon
オブジェクトを設定して、クラスターにインストールされているアドオンのライフサイクルを管理できます。 アドオンをインストール、更新、アンインストールしたり、アドオンの構成をカスタマイズしたりできます。 次のコードブロックは、alicloud_cs_kubernetes_addon
オブジェクトの属性を示しています。
resource "alicloud_cs_kubernetes_addon" "addon-example" {
# The ID of the cluster.
cluster_id = "XXXX"
# The name of the add-on. You can query the add-ons that are already installed and can be installed and their versions by using alicloud_cs_kubernetes_addons of Data Source.
name = "XXXX"
# The version of the add-on.
version = "XXXX"
# Custom add-on parameters in a JSON string. You can use the jsonencode method of Terraform to specify the parameters or directly specify the parameters in a JSON string. Pay attention to character escaping if you directly specify the parameters in a JSON string. You can set this attribute for cluster add-ons that support custom parameters. For more information, see the Modify the custom parameters of a cluster add-on section.
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にインポートし、Terraformを使用してこれらのアドオンを管理できます。 このセクションでは、例としてnginx-ingress-controllerを使用して、インストールされたアドオンをTerraformにインポートする方法を示します。
サフィックスが. tfリソースを定義します。 サフィックスがであるファイルが既にある場合. tfファイルにリソースを定義します。
Resource内の
alicloud_cs_kubernetes_addon
オブジェクトは、クラスター内のアドオンを管理するために使用されます。 オブジェクトにコンテンツを追加する必要はありません。resource "alicloud_cs_kubernetes_addon" "nginx-ingress-controller" { }
次のコマンドを実行して、nginx-ingress-controllerをインポートします。
Terraformは自動的にクラスターからnginx-ingress-controllerの構成を取得し、サフィックスがであるファイルに構成を追加します。. 状態.
terraform import alicloud_cs_kubernetes_addon.nginx-ingress-controller <cluster_id>:nginx-ingress-controller
terraform plan
コマンドを実行します。 コマンド出力は、nginx-ingress-controllerとResourceの設定の違いを示しています。で定義されたリソースの変更ステップ1構成の違いとサフィックスがであるファイルの内容に基づいて. 状態.
terraform plan
コマンドの出力でnginx-ingress-controllerとResourceの設定に違いがない場合、アドオンはTerraformにインポートされます。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
オブジェクトを使用して、クラスターにアドオンをインストールできます。 このセクションでは、ゲートキーパーアドオンを例として使用します。
サフィックスがであるファイルにインストールするアドオンについて、次の情報を指定します。. tf:
クラスターの ID。
アドオンの名前とバージョン:
Data Sourceの
alicloud_cs_kubernetes_addons
を使用して、インストールできるアドオンの名前とバージョンを照会できます。 結果には、インストール可能な各アドオンの最新バージョンのみが表示されます。 以前のバージョンをインストールする場合は、アドオンのリリースノートを確認し、対応するバージョン番号を指定します。(オプション) カスタムアドオン設定:
Terraformの
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.
申請完了!
が表示されると、アドオンがインストールされます。
クラスターアドオンの更新
Data Sourceのalicloud_cs_kubernetes_addons
を使用して、更新可能なアドオンのバージョンを照会できます。 新しいバージョンが利用可能な場合は、バージョン番号を変更してアドオンを更新できます。 このセクションでは、ゲートキーパーアドオンを例として使用します。
terraform apply
コマンドを実行して、アドオンを更新します。 適用する場合は完了! が表示されると、アドオンが更新されます。
クラスターアドオンのカスタムパラメーターの変更
アドオンがカスタムパラメーターをサポートしている場合は、リソースでalicloud_cs_kubernetes_addons
を使用してアドオンの設定を変更できます。 このセクションでは、Gatekeeperアドオンを例として、config
フィールドを変更してアドオン構成をカスタマイズする方法を示します。
アドオンでサポートされているカスタムパラメーターを照会するには、Data Sourceのalicloud_cs_kubernetes_addon_metadata
を使用します。 結果はJSONスキーマで返されます。 たとえば、Gatekeeperアドオンの設定をカスタマイズするには、次の内容をファイルに追加します。. tf.
# Define Data Source to obtain the schema that includes the custom parameters supported by the Gatekeeper add-on.
data "alicloud_cs_kubernetes_addon_metadata" "default" {
cluster_id = "ce36b7c61e126430b8b245730ca6d****"
name = "gatekeeper"
version = "v3.8.1.113-geb7947ef-aliyun"
}
# Output the schema.
output "addon_config_schema" {
value = data.alicloud_cs_kubernetes_addons.default.config_schema
}
terraform apply
コマンドを実行します。 結果はJSONスキーマで返されます。 properties
属性は、アドオンでサポートされているすべてのカスタムパラメーターを示します。 スキーマで返されるカスタムパラメーターを指定できます。 次のリストに、カスタムパラメーターを示します。
default: パラメータのデフォルト値。
Description: パラメータの説明。
pattern: すべての有効な値を指定する正規表現。
type: パラメータのデータ型。
ネットワークアドオンの設定
ACKクラスターでは、Terwayを使用して前述のコンテナネットワーク機能を実装できます。 詳細については、「概要」をご参照ください。
次の例は、Terraformを使用してネットワークアドオンを構成する方法を示しています。
ボリュームアドオンの設定
ACKは、FlexVolumeおよびCSIボリュームアドオンを提供する。 FlexVolumeは中止されました。 ACKチームは、CSIを継続的に更新する。 Terraformを使用してクラスターを作成するときにボリュームアドオンを指定しないと、FlexVolumeがインストールされます。 次の例は、Terraformを使用してボリュームアドオンを設定する方法を示しています。
ロギングアドオンの設定
ACKは、ログデータをlog Serviceに収集するために使用できるログアドオンログテイル-dsを提供します。 logtail-dsアドオンでは、次のいずれかの方法を使用してイベントを保存できます。
イベントを保存する既存のLog Serviceプロジェクトを指定します。
ACKがクラスターを作成するときにイベントを保存するLog Serviceプロジェクトを自動的に作成するようにACKを設定します。
次の例は、選択したLog Serviceプロジェクトに基づいてTerraformを使用してlogtail-dsを設定する方法を示しています。
モニタリングアドオンの設定
ACKは、ECSインスタンスで実行されるCloudMonitorエージェントとPrometheusアドオンのマネージドサービスを提供します。 Terraformを使用してinstall_cloud_monitorパラメーターを設定し、ECSノードにCloudMonitorエージェントをインストールできます。
Ingressアドオンの設定
ACKは、トラフィックをアプリケーションにルーティングするために使用できるnginx-ingress-controllerおよびalb-ingress-controllerアドオンを提供します。
nginx-ingress-controller: このアドオンは、オープンソースのingress-nginxアドオンに基づいて開発され、柔軟で信頼性の高いルーティングサービスを提供します。 詳細については、「NGINX Ingressの概要」をご参照ください。
alb-ingress-controller: このアドオンはACKで管理され、柔軟で信頼性の高いルーティングサービスを提供します。 詳細については、「ALB Ingressを使用したサービスへのアクセス」をご参照ください。
次の例は、Terraformを使用してIngressアドオンを構成する方法を示しています。
システムを無効にしてデフォルトのアドオンをインストールする
ACKはデフォルトのアドオンを自動的にインストールし、クラスター管理を簡素化します。 システムがクラスターを作成するときにシステムを無効にして特定のアドオンをインストールする場合は、disabled = true
設定を使用できます。 次の例は、システムを無効にしてnginx-ingress-controller
アドオンをインストールする方法を示しています。
# Disable the system to install the nginx-ingress-controller add-on.
resource "alicloud_cs_managed_kubernetes" "default" {
# Other parameters.
# ...
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サーバーとして機能します。 | ||
ゲートウェイAPI | ゲートウェイリソースモデル。 | |||
terway-eniip | Terwayネットワークアドオン。 | |||
nginx-ingress-controller (Proエディションはデフォルトでインストールされています) | NGINX Ingressで設定されているトラフィック転送ルールを解析します。 | |||
ACKサーバーレスクラスタ | システムアドオン | kube-scheduler | クラスターリソースをスケジュールします。 | |
ack-仮想ノード | 仮想ノードとelasticコンテナインスタンスに基づいてリソースをスケーリングします。 | |||
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は廃止されているため、CSIを選択することを推奨します。
要件に基づいて、nginx-ingress-controllerまたはalb-ingress-controllerを選択します。
ビジネス要件に基づいて他のアドオンを選択できます。