クラスタ・アドオンとしてのクラスタ・オートスケーラの作業
Kubernetes Cluster Autoscalerをクラスタ・アドオンとしてインストール、構成および使用して、Kubernetes Engine (OKE)を使用して作成したクラスタ内の管理対象ノード・プールのサイズを自動的に変更する方法をご紹介します。
Kubernetes Cluster Autoscalerをスタンドアロン・プログラムとしてではなくクラスタ・アドオン(Cluster Autoscalerアドオン)として使用すると、構成と継続的なメンテナンスが簡素化されます。より単純に:
- Cluster Autoscalerを有効または無効にします。
- Oracleによる自動更新のオプト・インおよびオプト・アウト。
- Cluster Autoscalerアドオンのバージョンを選択します。
- 承認されたキー/値ペアの構成引数を使用して、アドオン固有のカスタマイズを管理します。
これらの項では、Cluster Autoscalerアドオンを使用してノード・プールを管理する方法について説明します。
Cluster Autoscalerアドオンのデプロイ
次の手順では、Kubernetes Cluster Autoscalerをクラスタ・アドオン('Cluster Autoscaler add-on')としてデプロイしてノード・プールを管理する方法について説明します:
ステップ1: クラスタ・オートスカラー・アドオンがノード・プールにアクセスできるようにするInstance Principalまたはワークロード・アイデンティティ・プリンシパルを設定する
ノード・プールを管理するために、Kubernetes Cluster Autoscalerは、他のOracle Cloud Infrastructureサービス・リソースに対してアクションを実行します。OCIサービス・リソースでこれらのアクションを実行するために、Kubernetes Cluster Autoscalerは、認可されたアクター(またはプリンシパル)の資格証明を使用します。現在、次のタイプのプリンシパルを設定して、Kubernetes Cluster AutoscalerがOCIサービス・リソースに対してアクションを実行できるようにします:
- インスタンス・プリンシパル: Kubernetes Cluster Autoscalerは、実行中のインスタンスのアイデンティティを使用します。
- ワークロード・アイデンティティ・プリンシパル: Kubernetes Cluster Autoscalerは、Kubernetesクラスタで実行されているワークロード・リソースのアイデンティティを使用します。
ワークロード・アイデンティティ・プリンシパルを使用して、Kubernetes Cluster AutoscalerがOCIサービスおよびリソースにアクセスできるようにすることに注意してください:
- は、拡張クラスタでサポートされますが、基本クラスタではサポートされません。
- は、Cluster Autoscalerバージョン1.26 (またはそれ以降)でのみサポートされています
インスタンス・プリンシパルを使用したCluster Autoscalerアドオンのノード・プールへのアクセスの有効化
インスタンス・プリンシパルを設定して、Kubernetes Cluster AutoscalerがOCIサービス・リソースに対してアクションを実行できるようにします。
インスタンス・プリンシパルを設定するには:
- コンソールにログインします。
-
クラスタ内のワーカー・ノード(コンピュート・インスタンス)を含む新しいコンパートメント・レベルの動的グループを作成します:
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」を選択します。「アイデンティティ」で、「ドメイン」を選択します。「アイデンティティ・ドメイン」で、「動的グループ」を選択します。
- クラスタを含むコンパートメントを選択します。
- 動的グループを作成するにはの手順に従って、動的グループに名前を付けます(たとえば、
acme-oke-cluster-autoscaler-dyn-grp
)。 -
コンパートメント内のワーカー・ノードを含むルールを次の形式で入力します:
ALL {instance.compartment.id = '<compartment-ocid>'}
<compartment-ocid>
は、クラスタが属するコンパートメントのOCIDです。例:
ALL {instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa23______smwa'}
- 「動的グループの作成」をクリックします。
-
ワーカー・ノードにノード・プールの管理を許可するポリシーを作成します:
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」を選択します。「アイデンティティ」にある「ポリシー」を選択します。
- ポリシーを作成するにはの手順に従って、ポリシーに名前を付けます(たとえば、
acme-oke-cluster-autoscaler-dyn-grp-policy
)。 -
ワーカー・ノードがノード・プールを管理できるようにするポリシー・ステートメントを(ワーカー・ノードの初期化に関連する他のポリシー・ステートメントとともに)次の形式で入力します:
Allow dynamic-group <dynamic-group-name> to manage cluster-node-pools in compartment <compartment-name> Allow dynamic-group <dynamic-group-name> to manage instance-family in compartment <compartment-name> Allow dynamic-group <dynamic-group-name> to use subnets in compartment <compartment-name> Allow dynamic-group <dynamic-group-name> to read virtual-network-family in compartment <compartment-name> Allow dynamic-group <dynamic-group-name> to use vnics in compartment <compartment-name> Allow dynamic-group <dynamic-group-name> to inspect compartments in compartment <compartment-name>
ここでは:
<dynamic-group-name>
は、以前に作成した動的グループの名前です。たとえば、acme-oke-cluster-autoscaler-dyn-grp
です動的グループがデフォルトのアイデンティティ・ドメインにない場合は、dynamic-group '<identity-domain-name>'/'<dynamic-group-name>'
の形式で、動的グループ名の前にアイデンティティ・ドメイン名を追加します。dynamic-group id <dynamic-group-ocid>
の形式で、そのOCIDを使用して動的グループを指定することもできます。<compartment-name>
は、クラスタが属するコンパートメントの名前です。たとえば、acme-oke-cluster-autoscaler-compartment
です
例:
Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to manage cluster-node-pools in compartment acme-oke-cluster-autoscaler-compartment Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to manage instance-family in compartment acme-oke-cluster-autoscaler-compartment Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to use subnets in compartment acme-oke-cluster-autoscaler-compartment Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to read virtual-network-family in compartment acme-oke-cluster-autoscaler-compartment Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to use vnics in compartment acme-oke-cluster-autoscaler-compartment Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to inspect compartments in compartment acme-oke-cluster-autoscaler-compartment
- 「作成」をクリックして、新しいポリシーを作成します。
ノート
ノード・プールが1つのコンパートメントに属し、ノード・プールで使用されるネットワーク・リソースが別のコンパートメントに属している場合、両方のコンパートメントに次のようにポリシーを作成する必要があります:
-
ノード・プールのコンパートメントで、次の形式のポリシー・ステートメントを使用してポリシーを作成します:
Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to manage cluster-node-pools in compartment <nodepool-compartment-name> Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to manage instance-family in compartment <nodepool-compartment-name> Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to use subnets in compartment <nodepool-compartment-name> Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to use vnics in compartment <nodepool-compartment-name> Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to inspect compartments in compartment <nodepool-compartment-name>
-
ネットワーク・リソースのコンパートメントで、次の形式のポリシー・ステートメントを使用してポリシーを作成します:
Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to use subnets in compartment <network-compartment-name> Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to read virtual-network-family in compartment <network-compartment-name> Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to use vnics in compartment <network-compartment-name> Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to inspect compartments in compartment <network-compartment-name>
Cluster Autoscalerアドオンをデプロイする前に、構成ファイルでauthType
パラメータをinstance
に設定して、インスタンス・プリンシパルを使用してCluster Autoscalerアドオンがノード・プールにアクセスするように指定します。ステップ2: Cluster Autoscalerアドオン構成ファイルの作成を参照してください。
ワークロード・アイデンティティ・プリンシパルを使用したCluster Autoscalerアドオンのノード・プールへのアクセスの有効化
Kubernetes Cluster AutoscalerがOCIサービス・リソースに対してアクションを実行できるように、ワークロード・アイデンティティ・プリンシパルを設定できます。ワークロード・アイデンティティ・プリンシパルは、拡張クラスタでのみ使用できます。
ワークロード・アイデンティティ・プリンシパルを設定するには:
- クラスタのOCIDを取得します(たとえば、コンソールの「クラスタの詳細」タブを使用します)。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」を選択します。「アイデンティティ」にある「ポリシー」を選択します。
- ポリシーの作成の手順に従って、ポリシーの名前(たとえば、
acme-oke-cluster-autoscaler-policy
)を指定します。 -
ノード・プール管理を許可するポリシー・ステートメントを次の形式で入力します:
Allow any-user to manage cluster-node-pools in compartment <compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to manage instance-family in compartment <compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to use subnets in compartment <compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to read virtual-network-family in compartment <compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to use vnics in compartment <compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to inspect compartments in compartment <compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'}
ここでは:
<compartment-name>
は、クラスタが属するコンパートメントの名前です。たとえば、acme-oke-cluster-autoscaler-compartment
です<cluster-ocid>
は、以前に取得したクラスタのOCIDです。
例:
Allow any-user to manage cluster-node-pools in compartment acme-oke-cluster-autoscaler-compartment where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = 'ocid1.cluster.oc1.iad.aaaaaaaa______ska'} Allow any-user to manage instance-family in compartment acme-oke-cluster-autoscaler-compartment where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = 'ocid1.cluster.oc1.iad.aaaaaaaa______ska'} Allow any-user to use subnets in compartment acme-oke-cluster-autoscaler-compartment where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = 'ocid1.cluster.oc1.iad.aaaaaaaa______ska'} Allow any-user to read virtual-network-family in compartment acme-oke-cluster-autoscaler-compartment where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = 'ocid1.cluster.oc1.iad.aaaaaaaa______ska'} Allow any-user to use vnics in compartment acme-oke-cluster-autoscaler-compartment where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = 'ocid1.cluster.oc1.iad.aaaaaaaa______ska'} Allow any-user to inspect compartments in compartment acme-oke-cluster-autoscaler-compartment where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = 'ocid1.cluster.oc1.iad.aaaaaaaa______ska'}
- 「作成」をクリックして、新しいポリシーを作成します。
ノード・プールが1つのコンパートメントに属し、ノード・プールで使用されるネットワーク・リソースが別のコンパートメントに属している場合、両方のコンパートメントに次のようにポリシーを作成する必要があります:
-
ノード・プールのコンパートメントで、次の形式のポリシー・ステートメントを使用してポリシーを作成します:
Allow any-user to manage cluster-node-pools in compartment <nodepool-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to manage instance-family in compartment <nodepool-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to use subnets in compartment <nodepool-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to use vnics in compartment <nodepool-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to inspect compartments in compartment <nodepool-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'}
-
ネットワーク・リソースのコンパートメントで、次の形式のポリシー・ステートメントを使用してポリシーを作成します:
Allow any-user to use subnets in compartment <network-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to read virtual-network-family in compartment <network-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to use vnics in compartment <network-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to inspect compartments in compartment <network-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'}
Cluster Autoscalerアドオンをデプロイする前に、構成ファイルでauthType
パラメータをworkload
に設定して、Cluster Autoscalerアドオンがワークロード・アイデンティティ・プリンシパルを使用してノード・プールにアクセスするように指定します。ステップ2: Cluster Autoscalerアドオン構成ファイルの作成を参照してください。
ステップ2: Cluster Autoscalerアドオン構成ファイルの作成
次の手順では、CLIを使用してCluster AutoscalerアドオンをデプロイできるようにするCluster Autoscalerアドオン構成ファイルを作成する方法について説明します。構成ファイルには、承認されたキー/値ペアの構成引数が含まれています。CLI (またはAPI)を使用してアドオンをデプロイする場合は、構成ファイルを作成する必要があります。コンソールを使用してCluster Autoscalerアドオンをデプロイすることもできます。その場合は、UIで構成引数を指定します。コンソールを使用したCluster Autoscalerアドオンのデプロイの詳細は、クラスタ・アドオンのインストールを参照してください。
-
適切なエディタで、選択した名前でJSONファイルを作成します(これらの手順は、ファイルが
cluster-autoscaler-add-on.json
という名前であると想定しています)。これには、次のものが含まれます。{ "addonName": "ClusterAutoscaler", "configurations": [ { "key": "nodes", "value": "1:5:{{ node pool ocid 1 }}" } ] }
-
作成した
cluster-autoscaler-add-on.json
ファイルで、Kubernetes Cluster Autoscalerを管理するためのクラスタの各ノード・プールを指定します。cluster-autoscaler-add-on.json
ファイルで複数のノード・プールを指定できます。Kubernetes Cluster Autoscalerによって管理されていないノード・プールを常に少なくとも1つ作成することをお薦めします。また、構成ファイルで指定しないノード・プールを手動でスケーリングする必要があります。-
cluster-autoscaler-add-on.json
ファイルで、次のテンプレート行を見つけます。"key": "nodes", "value": "1:5:{{ node pool ocid 1 }}"
nodes
パラメータ値の形式は次のとおりです。"value": "<min-nodes>:<max-nodes>:<nodepool-ocid>"
ここでは:
<min-nodes>
は、ノード・プールで許可される最小ノード数です。Kubernetes Cluster Autoscalerは、ノード数をこの数より少なくすることはありません。<max-nodes>
は、ノード・プールで許可される最大ノード数です。Kubernetes Cluster Autoscalerは、ノード数をこの数より多くすることはありません。指定するノードの最大数が、ノード・プールに定義されているワーカー・ノード・シェイプのテナンシ制限を超えないようにしてください。<nodepool-ocid>
は、1つ以上のノード・プールのOCIDです。
-
nodes
パラメータの値を次のように変更します:- ノード・プールで許可される最小ノード数。例: 1
- ノード・プールで許可される最大ノード数。例: 5
- Kubernetes Cluster Autoscalerで管理するノード・プールのOCID。
例:
"key": "nodes", "value": "2:4:ocid1.nodepool.oc1.iad.aaaaaaaaae____ydq"
- Kubernetes Cluster Autoscalerでクラスタ内の2番目のノード・プールを管理する場合は、2番目のノード・プールの適切な詳細を
nodes
パラメータの値に追加します。例:"key": "nodes", "value": "2:4:ocid1.nodepool.oc1.iad.aaaaaaaaae____ydq, 1:5:ocid1.nodepool.oc1.iad.aaaaaaaaah____bzr"
- Kubernetes Cluster Autoscalerでさらにノード・プールを管理する場合は、
nodes
パラメータの値に適切な詳細を追加します。 cluster-autoscaler-add-on.json
ファイルを保存します。
-
-
作成した
cluster-autoscaler-add-on.json
ファイルで、authType
パラメータを使用して、OCIサービスおよびリソースにアクセスするためのKubernetes Cluster Autoscalerの設定方法を指定します:- Kubernetes Cluster AutoscalerがOCIサービスおよびリソースにアクセスできるようにインスタンス・プリンシパルを設定した場合は、
authType
パラメータをinstance
に設定します。 - Kubernetes Cluster AutoscalerがOCIサービスおよびリソースにアクセスできるようにワークロード・アイデンティティ・プリンシパルを設定した場合は、
authType
パラメータをworkload
に設定します。
例:
"key": "authType", "value": "workload"
instance
はauthType
パラメータのデフォルト値であるため、authType
の値を明示的に指定しない場合、Kubernetes Cluster Autoscalerは、OCIサービスおよびリソースにアクセスするために実行されているインスタンスのアイデンティティを使用します。詳細は、ステップ1: クラスタ・オートスカラー・アドオンがノード・プールにアクセスできるようにするInstance Principalまたはワークロード・アイデンティティ・プリンシパルを設定するを参照してください。 - Kubernetes Cluster AutoscalerがOCIサービスおよびリソースにアクセスできるようにインスタンス・プリンシパルを設定した場合は、
-
作成した
cluster-autoscaler-add-on.json
ファイルで、Kubernetes Cluster Autoscalerのその他のパラメータを指定します。設定できるパラメータの詳細は、サポートされているKubernetes Cluster Autoscalerパラメータを参照してください。例:
{ "configurations": [ { "key": "nodes", "value": "2:4:ocid1.nodepool.oc1.iad.aaaaaaaaae____ydq, 1:5:ocid1.nodepool.oc1.iad.aaaaaaaaah____bzr" }, { "key": "authType", "value": "workload" }, { "key": "numOfReplicas", "value": "1" }, { "key": "maxNodeProvisionTime", "value": "15m" }, { "key": "scaleDownDelayAfterAdd", "value": "15m" }, { "key": "scaleDownUnneededTime", "value": "10m" }, { "key": "annotations", "value": "{\"prometheus.io/scrape\":\"true\",\"prometheus.io/port\":\"8086\"}" }
cluster-autoscaler-add-on.json
ファイルを保存して閉じます。
ステップ3: クラスタでのCluster Autoscalerアドオンのデプロイおよびデプロイメントの成功の確認
次の手順では、CLIおよび構成ファイルを使用してCluster Autoscalerアドオンをデプロイする方法について説明します。コンソールとAPIを使用してアドオンをデプロイすることもできます。詳細は、クラスタ・アドオンのインストールを参照してください。
-
まだ実行していない場合は、ステップに従って、クラスタのkubeconfig構成ファイルを設定し、(必要に応じて)そのファイルを指すようにKUBECONFIG環境変数を設定します。自分のkubeconfigファイルを設定する必要があります。別のユーザーが設定したkubeconfigファイルを使用してクラスタにアクセスすることはできません。クラスタ・アクセスの設定を参照してください。
- 次のように入力して、Cluster Autoscalerアドオンがまだクラスタにインストールされていないことを確認します:
oci ce cluster list-addons --cluster-id <cluster-ocid>
<cluster-ocid>
は、Cluster AutoscalerアドオンをデプロイするクラスタのOCIDです。 -
次を入力して、クラスタにCluster Autoscalerアドオンをデプロイします。
oci ce cluster install-addon --addon-name ClusterAutoscaler --from-json file://<path-to-config-file> --cluster-id <cluster-ocid>
ここでは:
--cluster-id <cluster-ocid>
は、Cluster AutoscalerアドオンをデプロイするクラスタのOCIDです。--from-json file://<path-to-config-file>
は、アドオンのデプロイ時に使用するCluster Autoscalerアドオン構成ファイルの場所を指定します。たとえば、--from-json file://./cluster-autoscaler-add-on.json
です。
例:
oci ce cluster install-addon --addon-name ClusterAutoscaler --from-json file://./cluster-autoscaler-add-on.json --cluster-id ocid1.cluster.oc1.iad.aaaaaaaam______dfr
Kubernetes Cluster Autoscalerで必要なKubernetesリソースをクラスタにインストールするための作業リクエストが作成されます。
- オプション:次のように入力して、Kubernetes Cluster Autoscalerポッドのステータスを表示し、デプロイメントの進行状況を確認します:
kubectl get pods -n kube-system | grep cluster-autoscaler
- 次のように入力して、Kubernetes Cluster Autoscalerログを表示し、アドオンが正常にデプロイされ、クラスタ内のノード・プールのワークロードを現在モニターしていることを確認します:
kubectl -n kube-system logs -f deployment.apps/cluster-autoscaler
ステップ4: スケーリング操作の表示
デプロイしたKubernetes Cluster Autoscalerが、ノード・プール内のワーカー・ノードを自動的にスケーリングするのをモニターできます。スケーリング操作がよくわかるようにするために、次の提案を検討してください(これらは監視のみを目的としており、本番環境でKubernetes Cluster Autoscalerを使用する場合の推奨事項に示されている推奨事項に反する場合があります):
- 単一のノード・プール(Kubernetes Cluster Autoscalerによって管理されているノード・プール)を持つクラスタを監視します。
- 監視するクラスタに複数のノード・プールがある場合は、ポッドをKubernetes Cluster Autoscalerによって管理されている単一ノード・プール上のノードでの実行に制限します。Kubernetesのドキュメントの、ノードへのポッドの割当てを参照してください。
- Kubernetes Cluster Autoscalerによって管理されているノード・プールのいずれかのノードから開始します。
- Kubernetes Cluster Autoscaler構成ファイルで、ノード・プールで許可されるノードの最大数を指定します。指定するノードの最大数が、ノード・プールに定義されているワーカー・ノード・シェイプのテナンシ制限を超えないようにしてください。
Kubernetes Cluster Autoscalerによるワーカー・ノードの自動スケーリングを表示するには:
- 次のように入力して、クラスタ内のワーカー・ノードの現在の合計数を確認します:
kubectl get nodes
-
テキスト・エディタで、次の内容で
nginx.yaml
というファイルを作成し、サンプルNginxアプリケーションを定義します:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 resources: requests: memory: "500Mi"
リソース・リクエスト制限が設定されていることを確認します。
- 次のように入力してサンプル・アプリケーションをデプロイします:
kubectl create -f nginx.yaml
- 次のように入力して、デプロイメントのポッド数を(2から)100に増やします:
kubectl scale deployment nginx-deployment --replicas=100
これで、Kubernetes Cluster Autoscalerは、増加したワークロードを満たすためにワーカー・ノードをノード・プールに追加します。
- 次のように入力して、デプロイメントのステータスを確認します:
kubectl get deployment nginx-deployment --watch
- 数分後、次のように入力して、クラスタ内のワーカー・ノードの増加した合計数を表示します:
kubectl get nodes
表示されるワーカー・ノードの数は、ワーカー・ノードのシェイプおよびKubernetes Cluster Autoscaler構成ファイルで指定されているノードの最大数によって異なります。
ステップ5: クリーンアップ
- 次のように入力して、サンプルNginxアプリケーションを削除します:
kubectl delete deployment nginx-deployment
- 10分後、次のように入力して、ワーカー・ノードが元の数に削減されたことを確認します:
kubectl get nodes
サンプルNginxアプリケーションを削除して待機した後、表示されるワーカー・ノードは少なくなりますが、元の数を超える場合があります。これは、kube-systemポッドがこれらのノードで実行されるようにスケジュールされているためである可能性があります。Autoscalerのskip-nodes-with-system-pods
パラメータがデフォルトでtrue
に設定されているため、kube-systemポッドはKubernetes Cluster Autoscalerがノードを削除できない可能性があります。
Cluster Autoscalerアドオンの更新
次の手順では、CLIおよび構成ファイルを使用してCluster Autoscalerアドオンを更新する方法について説明します。コンソールやAPIを使用してアドオンを更新することもできます。詳細は、「クラスタ・アドオンの更新」を参照してください。
-
Cluster Autoscalerアドオン構成ファイルを適切なエディタで開きます
-
必要に応じて、構成ファイルの構成パラメータを追加、削除または変更します。設定できるパラメータの詳細は、サポートされているKubernetes Cluster Autoscalerパラメータを参照してください。
- oci ce cluster update-addonコマンドを使用して、次のように入力してCluster Autoscalerアドオンを更新します:
oci ce cluster update-addon --addon-name ClusterAutoscaler --from-json file://<path-to-config-file> --cluster-id <cluster-ocid>
ここでは:
--cluster-id <cluster-ocid>
は、Cluster Autoscalerアドオンを更新するクラスタのOCIDです。--from-json file://<path-to-config-file>
は、アドオンの更新時に使用するCluster Autoscalerアドオン構成ファイルの場所を指定します。たとえば、--from-json file://./cluster-autoscaler-add-on.json
です。
例:
oci ce cluster update-addon --addon-name ClusterAutoscaler --from-json file://./cluster-autoscaler-add-on.json --cluster-id ocid1.cluster.oc1.iad.aaaaaaaam______dfr
Kubernetes Cluster Autoscalerで必要なKubernetesリソースを更新するための作業リクエストが作成されます。
- オプション:次のように入力して、Kubernetes Cluster Autoscalerポッドのステータスを表示し、進行状況を確認します:
kubectl get pods -n kube-system | grep cluster-autoscaler
Cluster Autoscaler Add-onの無効化(および削除)
次の手順では、CLIおよび構成ファイルを使用してCluster Autoscalerアドオンを無効化および削除する方法について説明します。コンソールやAPIを使用してアドオンを更新することもできます。詳細については、Disabling (and Removing) a Cluster Add-onを参照してください。
-
次のように入力して、oci ce cluster disable-addonコマンドを使用してCluster Autoscalerアドオンを無効化(およびオプションで削除)します:
oci ce cluster disable-addon --addon-name ClusterAutoscaler --cluster-id <cluster-ocid> --is-remove-existing-add-on <true|false>
ここでは:
--cluster-id <cluster-ocid>
は、Cluster Autoscalerアドオンを無効にする(およびオプションで削除する)クラスタのOCIDです。--is-remove-existing-add-on <true|false>
は、Cluster Autoscalerアドオンを完全に削除するか(true
に設定した場合)、アドオンを削除せず、単に無効にして使用しないか(false
に設定した場合)を指定します。アドオンを無効にすると、新しいバージョンが使用可能になったときに Oracleによって自動的に更新されなくなります。
例:
oci ce cluster disable-addon --addon-name ClusterAutoscaler --cluster-id ocid1.cluster.oc1.iad.aaaaaaaam______dfr --is-remove-existing-add-on true
Kubernetes Cluster Autoscalerを無効にする(およびオプションで削除する)作業リクエストが作成されます。
- オプション:次のように入力して、Kubernetes Cluster Autoscalerポッドのステータスを表示し、進行状況を確認します:
kubectl get pods -n kube-system | grep cluster-autoscaler