クラスタ・アドオンとしてのクラスタ・オートスケーラの作業

Kubernetes Cluster Autoscalerをクラスタ・アドオンとしてインストール、構成および使用して、Container Engine for Kubernetes (OKE)を使用して作成したクラスタ内の管理対象ノード・プールのサイズを自動的に変更する方法を確認します。

Kubernetes Cluster Autoscalerをスタンドアロン・プログラムとしてではなくクラスタ・アドオン(Cluster Autoscalerアドオン)として使用すると、構成と継続的なメンテナンスが簡素化されます。より単純に:

  • Cluster Autoscalerを有効または無効にします。
  • Oracleによる自動更新のオプト・インおよびオプト・アウト。
  • Cluster Autoscalerアドオンのバージョンを選択します。
  • 承認されたキー/値ペアの構成引数を使用して、アドオン固有のカスタマイズを管理します。

これらの項では、Cluster Autoscalerアドオンを使用してノード・プールを管理する方法について説明します。

Cluster Autoscalerアドオンのデプロイ

ステップ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サービス・リソースに対してアクションを実行できるようにします。

インスタンス・プリンシパルを設定するには:

  1. コンソールにログインします。
  2. クラスタ内のワーカー・ノード(コンピュート・インスタンス)を含む新しいコンパートメント・レベルの動的グループを作成します:

    1. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ドメイン」をクリックします。「アイデンティティ・ドメイン」で、「動的グループ」をクリックします。
    2. クラスタを含むコンパートメントを選択します。
    3. 動的グループを作成するにはの手順に従って、動的グループに名前を付けます(たとえば、acme-oke-cluster-autoscaler-dyn-grp)。
    4. コンパートメント内のワーカー・ノードを含むルールを次の形式で入力します:

      ALL {instance.compartment.id = '<compartment-ocid>'}

      <compartment-ocid>は、クラスタが属するコンパートメントのOCIDです。

      例:

      ALL {instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa23______smwa'}
    5. 「動的グループの作成」をクリックします。
  3. ワーカー・ノードにノード・プールの管理を許可するポリシーを作成します:

    1. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。
    2. ポリシーを作成するにはの手順に従って、ポリシーに名前を付けます(たとえば、acme-oke-cluster-autoscaler-dyn-grp-policy)。
    3. ワーカー・ノードがノード・プールを管理できるようにするポリシー・ステートメントを(ワーカー・ノードの初期化に関連する他のポリシー・ステートメントとともに)次の形式で入力します:

      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>'の形式で、動的グループ名の前にアイデンティティ・ドメイン名を入力します。OCIDを使用して、dynamic-group id <dynamic-group-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
    4. 「作成」をクリックして、新しいポリシーを作成します。
    ノート

    ノード・プールが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サービス・リソースに対してアクションを実行できるように、ワークロード・アイデンティティ・プリンシパルを設定できます。ワークロード・アイデンティティ・プリンシパルは、拡張クラスタでのみ使用できます。

ワークロード・アイデンティティ・プリンシパルを設定するには:

  1. クラスタのOCIDを取得します(たとえば、コンソール「クラスタの詳細」タブを使用します)。
  2. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。
  3. ポリシーの作成の手順に従って、ポリシーの名前(たとえば、acme-oke-cluster-autoscaler-policy)を指定します。
  4. ノード・プール管理を許可するポリシー・ステートメントを次の形式で入力します:

    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'} 
  5. 「作成」をクリックして、新しいポリシーを作成します。
ノート

ノード・プールが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アドオンのデプロイの詳細は、クラスタ・アドオンのインストールを参照してください。

  1. 適切なエディタで、選択した名前でJSONファイルを作成します(これらの手順は、ファイルがcluster-autoscaler-add-on.jsonという名前であると想定しています)。これには、次のものが含まれます。

    {
      "addonName": "ClusterAutoscaler",
      "configurations": [
        {
          "key": "nodes",
          "value": "1:5:{{ node pool ocid 1 }}"
        }
      ]
    }
  2. 作成したcluster-autoscaler-add-on.jsonファイルで、Kubernetes Cluster Autoscalerを管理するためのクラスタの各ノード・プールを指定します。

    cluster-autoscaler-add-on.jsonファイルで複数のノード・プールを指定できます。Kubernetes Cluster Autoscalerによって管理されていないノード・プールを常に少なくとも1つ作成することをお薦めします。また、構成ファイルで指定しないノード・プールを手動でスケーリングする必要があります。

    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です。
    2. nodesパラメータの値を次のように変更します:

      • ノード・プールで許可される最小ノード数。例: 1
      • ノード・プールで許可される最大ノード数。例: 5
      • Kubernetes Cluster Autoscalerで管理するノード・プールのOCID。

      例:

            "key": "nodes",
            "value": "2:4:ocid1.nodepool.oc1.iad.aaaaaaaaae____ydq"
    3. 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"
    4. Kubernetes Cluster Autoscalerでさらにノード・プールを管理する場合は、nodesパラメータの値に適切な詳細を追加します。
    5. cluster-autoscaler-add-on.jsonファイルを保存します。
  3. 作成した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"

    instanceauthTypeパラメータのデフォルト値であるため、authTypeの値を明示的に指定しない場合、Kubernetes Cluster Autoscalerは、OCIサービスおよびリソースにアクセスするために実行されているインスタンスのアイデンティティを使用します。詳細は、ステップ1: クラスタ・オートスカラー・アドオンがノード・プールにアクセスできるようにするInstance Principalまたはワークロード・アイデンティティ・プリンシパルを設定するを参照してください。

  4. 作成した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\"}"
        }
      
  5. cluster-autoscaler-add-on.jsonファイルを保存して閉じます。

ステップ3: クラスタでのCluster Autoscalerアドオンのデプロイおよびデプロイメントの成功の確認

ノート

次の手順では、CLIおよび構成ファイルを使用してCluster Autoscalerアドオンをデプロイする方法について説明します。コンソールおよびAPIを使用してアドオンをデプロイすることもできます。詳細は、クラスタ・アドオンのインストールを参照してください。

  1. まだ実行していない場合は、ステップに従って、クラスタのkubeconfig構成ファイルを設定し、(必要に応じて)そのファイルを指すようにKUBECONFIG環境変数を設定します。自分のkubeconfigファイルを設定する必要があります。別のユーザーが設定したkubeconfigファイルを使用してクラスタにアクセスすることはできません。クラスタ・アクセスの設定を参照してください。
  2. 次のように入力して、Cluster Autoscalerアドオンがまだクラスタにインストールされていないことを確認します:
    oci ce cluster list-addons --cluster-id <cluster-ocid>

    <cluster-ocid>は、Cluster AutoscalerアドオンをデプロイするクラスタのOCIDです。

  3. 次を入力して、クラスタに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リソースをクラスタにインストールするための作業リクエストが作成されます。

  4. オプション:次のように入力して、Kubernetes Cluster Autoscalerポッドのステータスを表示し、デプロイメントの進行状況を確認します:
    kubectl get pods -n kube-system | grep cluster-autoscaler
  5. 次のように入力して、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によるワーカー・ノードの自動スケーリングを表示するには:

  1. 次のように入力して、クラスタ内のワーカー・ノードの現在の合計数を確認します:
    kubectl get nodes
  2. テキスト・エディタで、次の内容で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"

    リソース・リクエスト制限が設定されていることを確認します。

  3. 次のように入力してサンプル・アプリケーションをデプロイします:
    kubectl create -f nginx.yaml
  4. 次のように入力して、デプロイメントのポッド数を(2から)100に増やします:
    kubectl scale deployment nginx-deployment --replicas=100

    これで、Kubernetes Cluster Autoscalerは、増加したワークロードを満たすためにワーカー・ノードをノード・プールに追加します。

  5. 次のように入力して、デプロイメントのステータスを確認します:
    kubectl get deployment nginx-deployment --watch
  6. 数分後、次のように入力して、クラスタ内のワーカー・ノードの増加した合計数を表示します:
    kubectl get nodes

    表示されるワーカー・ノードの数は、ワーカー・ノードのシェイプおよびKubernetes Cluster Autoscaler構成ファイルで指定されているノードの最大数によって異なります。

ステップ5: クリーンアップ

  1. 次のように入力して、サンプルNginxアプリケーションを削除します:
    kubectl delete deployment nginx-deployment
  2. 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を使用してアドオンを更新することもできます。詳細は、「クラスタ・アドオンの更新」を参照してください。

  1. Cluster Autoscalerアドオン構成ファイルを適切なエディタで開きます

  2. 必要に応じて、構成ファイルの構成パラメータを追加、削除または変更します。設定できるパラメータの詳細は、サポートされているKubernetes Cluster Autoscalerパラメータを参照してください。

  3. 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リソースを更新するための作業リクエストが作成されます。

  4. オプション:次のように入力して、Kubernetes Cluster Autoscalerポッドのステータスを表示し、進行状況を確認します:
    kubectl get pods -n kube-system | grep cluster-autoscaler

Cluster Autoscaler Add-onの無効化(および削除)

ノート

次の手順では、CLIおよび構成ファイルを使用してCluster Autoscalerアドオンを無効化および削除する方法について説明します。コンソールおよびAPIを使用してアドオンを更新することもできます。詳細は、クラスタ・アドオンの無効化(および削除)を参照してください。

  1. 次のように入力して、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を無効にする(およびオプションで削除する)作業リクエストが作成されます。

  2. オプション:次のように入力して、Kubernetes Cluster Autoscalerポッドのステータスを表示し、進行状況を確認します:
    kubectl get pods -n kube-system | grep cluster-autoscaler