スタンドアロン・プログラムとしてのクラスタ・オートスケーラの作業
Kubernetes Cluster Autoscalerをスタンドアロン・プログラムとしてインストール、構成および使用して、Kubernetes Engine (OKE)を使用して作成したクラスタ内の管理対象ノード・プールを自動的にサイズ変更する方法をご紹介します。
Kubernetes Cluster Autoscalerをクラスタ・アドオンとしてではなくスタンドアロン・プログラムとして使用すると、次のような構成および継続的なメンテナンスを完全に制御し、責任を負うことができます:
- クラスタで実行されているKubernetesのバージョンと互換性のあるバージョンのKubernetes Cluster Autoscalerのインストール。
- 構成引数を正しく指定しています。
- クラスタを新しいバージョンのKubernetesにアップグレードするときにKubernetes Cluster Autoscalerを手動でアップグレードして、Kubernetes Cluster Autoscalerがクラスタの新しいバージョンのKubernetesと互換性があることを確認します。
次の手順では、Kubernetes 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 (またはそれ以降)でのみサポートされています
インスタンス・プリンシパルを使用したノード・プールへのアクセスの有効化
インスタンス・プリンシパルを設定して、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>
ワークロード・アイデンティティ・プリンシパルを使用したノード・プールへのアクセスの有効化
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>'}
ステップ2: Cluster Autoscaler構成ファイルのコピーおよびカスタマイズ
-
テキスト・エディタで、次の内容の
cluster-autoscaler.yaml
というファイルを作成します:--- apiVersion: v1 kind: ServiceAccount metadata: labels: k8s-addon: cluster-autoscaler.addons.k8s.io k8s-app: cluster-autoscaler name: cluster-autoscaler namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: cluster-autoscaler labels: k8s-addon: cluster-autoscaler.addons.k8s.io k8s-app: cluster-autoscaler rules: - apiGroups: [""] resources: ["events", "endpoints"] verbs: ["create", "patch"] - apiGroups: [""] resources: ["pods/eviction"] verbs: ["create"] - apiGroups: [""] resources: ["pods/status"] verbs: ["update"] - apiGroups: [""] resources: ["endpoints"] resourceNames: ["cluster-autoscaler"] verbs: ["get", "update"] - apiGroups: [""] resources: ["nodes"] verbs: ["watch", "list", "get", "patch", "update"] - apiGroups: [""] resources: - "pods" - "services" - "replicationcontrollers" - "persistentvolumeclaims" - "persistentvolumes" verbs: ["watch", "list", "get"] - apiGroups: ["extensions"] resources: ["replicasets", "daemonsets"] verbs: ["watch", "list", "get"] - apiGroups: ["policy"] resources: ["poddisruptionbudgets"] verbs: ["watch", "list"] - apiGroups: ["apps"] resources: ["statefulsets", "replicasets", "daemonsets"] verbs: ["watch", "list", "get"] - apiGroups: ["storage.k8s.io"] resources: ["storageclasses", "csinodes"] verbs: ["watch", "list", "get"] - apiGroups: ["batch", "extensions"] resources: ["jobs"] verbs: ["get", "list", "watch", "patch"] - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["create"] - apiGroups: ["coordination.k8s.io"] resourceNames: ["cluster-autoscaler"] resources: ["leases"] verbs: ["get", "update"] - apiGroups: [""] resources: ["namespaces"] verbs: ["watch", "list"] - apiGroups: ["storage.k8s.io"] resources: ["csidrivers", "csistoragecapacities"] verbs: ["watch", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: cluster-autoscaler namespace: kube-system labels: k8s-addon: cluster-autoscaler.addons.k8s.io k8s-app: cluster-autoscaler rules: - apiGroups: [""] resources: ["configmaps"] verbs: ["create","list","watch"] - apiGroups: [""] resources: ["configmaps"] resourceNames: ["cluster-autoscaler-status", "cluster-autoscaler-priority-expander"] verbs: ["delete", "get", "update", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: cluster-autoscaler labels: k8s-addon: cluster-autoscaler.addons.k8s.io k8s-app: cluster-autoscaler roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-autoscaler subjects: - kind: ServiceAccount name: cluster-autoscaler namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: cluster-autoscaler namespace: kube-system labels: k8s-addon: cluster-autoscaler.addons.k8s.io k8s-app: cluster-autoscaler roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: cluster-autoscaler subjects: - kind: ServiceAccount name: cluster-autoscaler namespace: kube-system --- apiVersion: apps/v1 kind: Deployment metadata: name: cluster-autoscaler namespace: kube-system labels: app: cluster-autoscaler spec: replicas: 3 selector: matchLabels: app: cluster-autoscaler template: metadata: labels: app: cluster-autoscaler annotations: prometheus.io/scrape: 'true' prometheus.io/port: '8085' spec: serviceAccountName: cluster-autoscaler containers: - image: iad.ocir.io/oracle/oci-cluster-autoscaler:{{ image tag }} name: cluster-autoscaler resources: limits: cpu: 100m memory: 300Mi requests: cpu: 100m memory: 300Mi command: - ./cluster-autoscaler - --v=4 - --stderrthreshold=info - --cloud-provider=oci - --max-node-provision-time=25m - --nodes=1:5:{{ node pool ocid 1 }} - --nodes=1:5:{{ node pool ocid 2 }} - --scale-down-delay-after-add=10m - --scale-down-unneeded-time=10m - --unremovable-node-recheck-timeout=5m - --balance-similar-node-groups - --balancing-ignore-label=displayName - --balancing-ignore-label=hostname - --balancing-ignore-label=internal_addr - --balancing-ignore-label=oci.oraclecloud.com/fault-domain imagePullPolicy: "Always"
- 作成した
cluster-autoscaler.yaml
ファイルで、環境変数を追加して、OCIサービスおよびリソースにアクセスするためのKubernetes Cluster Autoscalerの設定方法を指定します:- Kubernetes Cluster AutoscalerがOCIサービスおよびリソースにアクセスできるようにインスタンス・プリンシパルを設定した場合は、ファイルの最後にある
imagePullPolicy: "Always"
行の後に、次を追加します:env: - name: OKE_USE_INSTANCE_PRINCIPAL value: "true" - name: OCI_SDK_APPEND_USER_AGENT value: "oci-oke-cluster-autoscaler"
例:
... imagePullPolicy: "Always" env: - name: OKE_USE_INSTANCE_PRINCIPAL value: "true" - name: OCI_SDK_APPEND_USER_AGENT value: "oci-oke-cluster-autoscaler"
- Kubernetes Cluster AutoscalerがOCIサービスおよびリソースにアクセスできるようにワークロード・アイデンティティ・プリンシパルを設定している場合は、ファイルの最後にある
imagePullPolicy: "Always"
行の後に、次を追加します:env: - name: OKE_USE_INSTANCE_PRINCIPAL value: "false" - name: OCI_USE_WORKLOAD_IDENTITY value: "true" - name: OCI_RESOURCE_PRINCIPAL_VERSION value: "2.2" - name: OCI_RESOURCE_PRINCIPAL_REGION value: "<cluster-region>" - name: OCI_SDK_APPEND_USER_AGENT value: "oci-oke-cluster-autoscaler"
<cluster-region>
は、クラスタが存在するリージョンです。例:
... imagePullPolicy: "Always" env: - name: OKE_USE_INSTANCE_PRINCIPAL value: "false" - name: OCI_USE_WORKLOAD_IDENTITY value: "true" - name: OCI_RESOURCE_PRINCIPAL_VERSION value: "2.2" - name: OCI_RESOURCE_PRINCIPAL_REGION value: "us-phoenix-1" - name: OCI_SDK_APPEND_USER_AGENT value: "oci-oke-cluster-autoscaler"
- Kubernetes Cluster AutoscalerがOCIサービスおよびリソースにアクセスできるようにインスタンス・プリンシパルを設定した場合は、ファイルの最後にある
- 作成した
cluster-autoscaler.yaml
ファイルで、クラスタで実行されているKubernetesのバージョンに対して--cloud-provider
パラメータが正しく設定されていることを確認します。デフォルトでは、このパラメータは、クラスタがKubernetesバージョン1.27以降(または1.23以前)を実行しており、oci
に設定されていることを前提としています。クラスタでKubernetesバージョン1.26、1.25または1.24が実行されている場合は、--cloud-provider
パラメータの値をoci-oke
に変更します。-
cluster-autoscaler.yaml
ファイルで、次の行を見つけます:- --cloud-provider=oci
-
クラスタでKubernetesバージョン1.26、1.25または1.24が実行されている場合は、
--cloud-provider
パラメータの値をoci-oke
に変更します:- --cloud-provider=oci-oke
cluster-autoscaler.yaml
ファイルを保存します。
-
- 作成した
cluster-autoscaler.yaml
ファイルで、Kubernetes Cluster Autoscalerイメージのイメージ・パスをOracle Cloud Infrastructure Registryからダウンロードするように変更します。イメージは多くのリージョンで入手できます。最高のパフォーマンスを得るには、クラスタがデプロイされているリージョンに最も近いリージョンを選択します:-
cluster-autoscaler.yaml
ファイルで、次のテンプレート行を見つけます:- image: iad.ocir.io/oracle/oci-cluster-autoscaler:{{ image tag }}
-
Kubernetes Cluster Autoscalerを実行するクラスタの場所およびKubernetesバージョンに応じて、イメージ・パスを次のいずれかに変更します:
イメージの位置 Kubernetesバージョン イメージ・パス ドイツ中央部(フランクフルト) Kubernetes 1.28以上 fra.ocir.io/oracle/oci-cluster-autoscaler:1.28.6-4 ドイツ中央部(フランクフルト) Kubernetes 1.29以上 fra.ocir.io/oracle/oci-cluster-autoscaler:1.29.4-3 ドイツ中央部(フランクフルト) Kubernetes 1.30以上 fra.ocir.io/oracle/oci-cluster-autoscaler:1.30.2-10 ドイツ中央部(フランクフルト) Kubernetes 1.31 fra.ocir.io/oracle/oci-cluster-autoscaler:1.31.0-1 英国南部(ロンドン) Kubernetes 1.28以上 lhr.ocir.io/oracle/oci-cluster-autoscaler:1.28.6-4 英国南部(ロンドン) Kubernetes 1.29以上 lhr.ocir.io/oracle/oci-cluster-autoscaler:1.29.4-3 英国南部(ロンドン) Kubernetes 1.30以上 lhr.ocir.io/oracle/oci-cluster-autoscaler:1.30.2-10 英国南部(ロンドン) Kubernetes 1.31 lhr.ocir.io/oracle/oci-cluster-autoscaler:1.31.0-1 米国東部(アッシュバーン) Kubernetes 1.28以上 iad.ocir.io/oracle/oci-cluster-autoscaler:1.28.6-4 米国東部(アッシュバーン) Kubernetes 1.29以上 iad.ocir.io/oracle/oci-cluster-autoscaler:1.29.4-3 米国東部(アッシュバーン) Kubernetes 1.30以上 iad.ocir.io/oracle/oci-cluster-autoscaler:1.30.2-10 米国東部(アッシュバーン) Kubernetes 1.31 iad.ocir.io/oracle/oci-cluster-autoscaler:1.31.0-1 米国西部(フェニックス) Kubernetes 1.28以上 phx.ocir.io/oracle/oci-cluster-autoscaler:1.28.6-4 米国西部(フェニックス) Kubernetes 1.29以上 phx.ocir.io/oracle/oci-cluster-autoscaler:1.29.4-3 米国西部(フェニックス) Kubernetes 1.30以上 phx.ocir.io/oracle/oci-cluster-autoscaler:1.30.2-10 米国西部(フェニックス) Kubernetes 1.31 phx.ocir.io/oracle/oci-cluster-autoscaler:1.31.0-1 たとえば、英国南リージョンにあるKubernetes 1.31クラスタでKubernetes Cluster Autoscalerを実行する場合は、次のイメージを指定します:
- image: lhr.ocir.io/oracle/oci-cluster-autoscaler:1.31.0-1
ヒント
Cluster Autoscalerイメージを含むOracleリポジトリのいずれとも同じリージョンにないKubernetesクラスタにKubernetes Cluster Autoscalerをデプロイする場合は、次のように、クラスタと同じリージョンにあるリポジトリにイメージをプッシュすることをお薦めします。
i。
docker pull
コマンドを使用して、Oracleリポジトリからイメージをプルします。Docker CLIを使用したイメージのプルを参照してください。ii. (
docker tag
コマンドを使用して)イメージにタグ付けし、(docker push
コマンドを使用して)Kubernetes Cluster Autoscalerを実行するクラスタと同じリージョンにあるOracle Cloud Infrastructure Registryのリポジトリにイメージをプッシュします。Docker CLIを使用したイメージのプッシュを参照してください。iii.
cluster-autoscaler.yaml
ファイルでイメージの場所を指定します。ノート
イメージ検証を有効にしたKubernetesクラスタにKubernetes Cluster Autoscalerをデプロイする場合、単に
cluster-autoscaler.yaml
ファイルでいずれかのOracleリポジトリからのイメージ・パスを指定しないでください。かわりに、次のようにします:i。
docker pull
コマンドを使用して、Oracleリポジトリからイメージをプルします。Docker CLIを使用したイメージのプルを参照してください。ii. (
docker tag
コマンドを使用して)イメージにタグ付けし、(docker push
コマンドを使用して)Kubernetes Cluster Autoscalerを実行するクラスタと同じリージョンにあるOracle Cloud Infrastructure Registryのリポジトリにイメージをプッシュします。Docker CLIを使用したイメージのプッシュを参照してください。iii. Vaultサービスでマスター・キーとキー・バージョンを使用してイメージに署名し、イメージ署名を作成します。セキュリティのためのイメージの署名を参照してください。
iv.
cluster-autoscaler.yaml
ファイルで署名済イメージの場所を指定します。イメージ・タグではなくイメージ・ダイジェストを使用してイメージを参照します(レジストリからの署名付きイメージの使用の強制を参照)。 cluster-autoscaler.yaml
ファイルを保存します。
-
-
作成した
cluster-autoscaler.yaml
ファイルで、Kubernetes Cluster Autoscalerで管理するクラスタの各ノード・プールを指定します。cluster-autoscaler.yaml
ファイルで複数のノード・プールを指定できます。Kubernetes Cluster Autoscalerによって管理されていないノード・プールを常に少なくとも1つ作成することをお薦めします。また、構成ファイルで指定しないノード・プールを手動でスケーリングする必要があります。-
cluster-autoscaler.yaml
ファイルで、次のテンプレート行を見つけます:- --nodes=1:5:{{ node pool ocid 1 }}
--nodes
パラメータの形式は次のとおりです:--nodes=<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。
例:
--nodes=1:5:ocid1.nodepool.oc1.iad.aaaaaaaaaeydq...
- Kubernetes Cluster Autoscalerでクラスタ内の単一ノード・プールのみを管理する場合は、
cluster-autoscaler.yaml
ファイルで次の行を見つけて削除します:- --nodes=1:5:{{ node pool ocid 2 }}
- Kubernetes Cluster Autoscalerでクラスタ内の別のノード・プールを管理する場合は、
cluster-autoscaler.yaml
ファイルで次の行を探し、--nodes
パラメータに適切な値を設定します:- --nodes=1:5:{{ node pool ocid 2 }}
- Kubernetes Cluster Autoscalerでより多くのノード・プールを管理する場合は、
cluster-autoscaler.yaml
ファイルに追加の--nodes
パラメータを挿入し、それらに適切な値を設定します。 cluster-autoscaler.yaml
ファイルを保存します。
-
-
作成した
cluster-autoscaler.yaml
ファイルで、Kubernetes Cluster Autoscalerで管理するノード・プールの数に、CPUおよびメモリー制限パラメータのデフォルト値が十分であることを確認します。デフォルトの制限は比較的低いため、Kubernetes Cluster Autoscalerで多数のノード・プールを管理する場合は、制限を増やすことを検討してください。制限を適切な値に設定するのはユーザーの責任です。-
cluster-autoscaler.yaml
ファイルで、次の行を見つけます:resources: limits: cpu: 100m memory: 300Mi
-
CPUおよびメモリー制限を、Kubernetes Cluster Autoscalerで管理するノード・プールの数に適した値に設定します。例:
resources: limits: cpu: 200m memory: 600Mi
cluster-autoscaler.yaml
ファイルを保存します。
-
-
作成した
cluster-autoscaler.yaml
ファイルで、Kubernetes Cluster Autoscalerのその他のパラメータを指定します。設定できるパラメータの詳細は、サポートされているKubernetes Cluster Autoscalerパラメータを参照してください。 cluster-autoscaler.yaml
ファイルを保存して閉じます。
ステップ3: Kubernetes Cluster Autoscalerのクラスタでのデプロイおよびデプロイメントの成功の確認
-
まだ実行していない場合は、ステップに従って、クラスタのkubeconfig構成ファイルを設定し、(必要に応じて)そのファイルを指すようにKUBECONFIG環境変数を設定します。自分のkubeconfigファイルを設定する必要があります。別のユーザーが設定したkubeconfigファイルを使用してクラスタにアクセスすることはできません。クラスタ・アクセスの設定を参照してください。
- 次のように入力して、Kubernetes Cluster Autoscalerをクラスタにデプロイします:
kubectl apply -f cluster-autoscaler.yaml
- 次のように入力して、Kubernetes Cluster Autoscalerログを表示し、正常にデプロイされ、クラスタ内のノード・プールのワークロードを現在モニターしていることを確認します:
kubectl -n kube-system logs -f deployment.apps/cluster-autoscaler
- 次のように入力して、
cluster-autoscaler.yaml
ファイルに定義されている3つのKubernetes Cluster Autoscalerポッドのうち、現在アクションを実行しているものを特定します:kubectl -n kube-system get lease
- 次のように入力して、kube-systemネームスペースのconfigmapからKubernetes Cluster Autoscalerの状態の概要を取得します:
kubectl -n kube-system get cm cluster-autoscaler-status -oyaml
ステップ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がノードを削除できない可能性があります。