Cluster Autoscaler - Amazon EKS

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

Cluster Autoscaler

Kubernetes Cluster Autoscaler は、リソース不足が原因でポッドが起動できなかった場合、またはクラスター内のノードの利用率が低く、そのポッドをクラスター内の他のノードに再スケジュールできる場合に、クラスター内のノードの数を自動的に調整します。

このトピックでは、Cluster Autoscaler を Amazon EKS クラスターに デプロイする方法と Amazon EC2 Auto Scaling グループを変更するために設定する方法について説明します。クラスタ・オートスケーラは、ノード・グループを変更して、より多くのリソースが必要な場合にスケールアウトし、リソースが十分に活用されていない場合はスケール・インします。

Amazon EKS クラスターを作成する

このセクションでは、クラスターおよびノードグループを作成できます。クラスターがすでに存在する場合は、Cluster Autoscaler ノードグループの考慮事項 に進んでください。

Amazon EBS ボリュームによってバックアップされ、Kubernetes Cluster Autoscaler を使用する複数のアベイラビリティーゾーンにわたってステートフルアプリケーションを実行している場合、それぞれが単一のアベイラビリティーゾーンにスコープされる複数のノードグループを設定する必要があります。また、--balance-similar-node-groups 機能を有効にする必要があります。しない場合は、複数のアベイラビリティーゾーンにまたがる 1 つのノードグループを作成できます。

要件に合うクラスター作成手順を 1 つ選択してください。

複数の アベイラビリティーゾーンs

  • 次の eksctl コマンドを使用して、単一のマネージド型ノードグループを持つ Amazon EKS クラスターを作成します。詳細については、Amazon EKS クラスターの作成 を参照してください。を代用する variable text 自分の価値観に基づいて行動します

    eksctl create cluster --name my-cluster --version 1.17 --managed --asg-access

    アベイラビリティーゾーン を示す出力部分:

    ... [ℹ] using region region-code [ℹ] setting availability zones to [region-codea region-codeb region-codec] [ℹ] subnets for region-codea - public:192.168.0.0/19 private:192.168.96.0/19 [ℹ] subnets for region-codeb - public:192.168.32.0/19 private:192.168.128.0/19 [ℹ] subnets for region-codec - public:192.168.64.0/19 private:192.168.160.0/19 ... [ℹ] nodegroup "ng-6bcca56a" has 2 node(s) [ℹ] node "ip-192-168-28-68.region-code.compute.internal" is ready [ℹ] node "ip-192-168-61-153.region-code.compute.internal" is ready [ℹ] waiting for at least 2 node(s) to become ready in "ng-6bcca56a" [ℹ] nodegroup "ng-6bcca56a" has 2 node(s) [ℹ] node "ip-192-168-28-68.region-code.compute.internal" is ready [ℹ] node "ip-192-168-61-153.region-code.compute.internal" is ready ... [✔] EKS cluster "my-cluster" in "region-code" region-code is ready

各 アベイラビリティーゾーン の専用マネージド型ノードグループを持つクラスターを作成するには

  1. eksctl 次のコマンドを使用して、ノードグループなしで Amazon EKS クラスターを作成します。詳細については、Amazon EKS クラスターの作成 を参照してください。クラスターが作成されたアベイラビリティーゾーンを書き留めます。これらのアベイラビリティーゾーンは、ノードグループを作成するときに使用します。赤い変数テキストは独自の値に置き換えてください。

    eksctl create cluster --name my-cluster --version 1.17 --without-nodegroup

    アベイラビリティーゾーン を示す出力部分:

    ... [ℹ] using region region-code [ℹ] setting availability zones to [region-codea region-codec region-codeb] [ℹ] subnets for region-codea - public:192.168.0.0/19 private:192.168.96.0/19 [ℹ] subnets for region-codec - public:192.168.32.0/19 private:192.168.128.0/19 [ℹ] subnets for region-codeb - public:192.168.64.0/19 private:192.168.160.0/19 ... [✔] EKS cluster "my-cluster" in "region-code" region is ready

    このクラスタは、 アベイラビリティーゾーンs: region-codea.region-codec、および region-code\b

  2. クラスター内のアベイラビリティーゾーンごとに、次の eksctl コマンドを使用してノードグループを作成します。を代用する variable text 自分の価値観に基づいて行動します このコマンドは、最小数が 1、最大数が 10 の Auto Scaling グループを作成します。

    eksctl create nodegroup --cluster my-cluster --node-zones region-codea --name region-codea --asg-access --nodes-min 1 --nodes 5 --nodes-max 10 --managed

Cluster Autoscaler ノードグループの考慮事項

Cluster Autoscaler には、このセクションで説明する追加の IAM およびリソースタグ付けに関する考慮事項が必要です。

ノードグループ IAM ポリシー

Cluster Autoscaler では、ユーザーに代わって AWS API を呼び出すために、次の IAM アクセス許可が必要です。

前の eksctl ノードグループを作成するためのコマンド。これらの権限は自動的に提供され、ノードに接続されます。 IAM 役割。使用しなかった場合 eksctl、 IAM ポリシーを次のドキュメントとともに、ノードに添付します。 IAM 役割。詳細については、以下を参照してください。 役割の変更IAM ユーザーガイド.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "autoscaling:DescribeAutoScalingGroups", "autoscaling:DescribeAutoScalingInstances", "autoscaling:DescribeLaunchConfigurations", "autoscaling:DescribeTags", "autoscaling:SetDesiredCapacity", "autoscaling:TerminateInstanceInAutoScalingGroup", "ec2:DescribeLaunchTemplateVersions" ], "Resource": "*", "Effect": "Allow" } ] }

Auto Scaling グループタグ

Cluster Auto Scaling では、自動検出できるように、ノードグループ Auto Scaling グループに以下のタグが必要です。

前述の eksctl コマンドを使用してノードグループを作成した場合、これらのタグは自動的に適用されます。そうでない場合は、Auto Scaling グループに以下のタグを手動でタグ付けする必要があります。詳細については、以下を参照してください。 Amazon EC2リソースのタグ付けLinux インスタンス用 Amazon EC2 ユーザーガイド.

キー

k8s.io/cluster-autoscaler/<cluster-name>

owned

k8s.io/cluster-autoscaler/enabled

true

Cluster Auto Scaling をデプロイする

Cluster Auto Scaling をデプロイするには

  1. 次のコマンドを使用して Cluster Autoscaler をクラスターにデプロイします。

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
  2. 次のコマンドを使用して、デプロイに cluster-autoscaler.kubernetes.io/safe-to-evict 注釈を追加します。

    kubectl -n kube-system annotate deployment.apps/cluster-autoscaler cluster-autoscaler.kubernetes.io/safe-to-evict="false"
  3. 次のコマンドを使用して Cluster Autoscaler デプロイを編集します。

    kubectl -n kube-system edit deployment.apps/cluster-autoscaler

    cluster-autoscaler コンテナコマンドを編集して、<YOUR CLUSTER NAME> をクラスターの名前に置き換え、以下のオプションを追加します。

    • --balance-similar-node-groups

    • --skip-nodes-with-system-pods=false

    spec: containers: - command: - ./cluster-autoscaler - --v=4 - --stderrthreshold=info - --cloud-provider=aws - --skip-nodes-with-local-storage=false - --expander=least-waste - --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/<YOUR CLUSTER NAME> - --balance-similar-node-groups - --skip-nodes-with-system-pods=false

    ファイルを保存して閉じ、変更を適用します。

  4. ウェブブラウザで Cluster Autoscaler リリースページを開き、クラスターの Kubernetes メジャーバージョンとマイナーバージョンに一致する最新の Cluster Autoscaler バージョンを見つけます。たとえば、クラスターの Kubernetes バージョンが 1.17 である場合、1.17 で始まる最新の Cluster Autoscaler リリースを見つけます。セマンティックバージョン番号を記録します(1.17.\n)を次のステップで使用します。

  5. 次のコマンドを使用して、Cluster Autoscaler イメージタグを、前のステップで書き留めたバージョンに設定します。置換 1.15.n 自分の価値で。us は、asia または eu に置き換えることができます。

    kubectl -n kube-system set image deployment.apps/cluster-autoscaler cluster-autoscaler=us.gcr.io/k8s-artifacts-prod/autoscaling/cluster-autoscaler:v1.15.n
    注記

    必要とするバージョンによっては、以前のアドレスを gcr.io/google-containers/cluster-autoscaler:v1.n.n に変更する必要があります。イメージアドレスは、リリースページに一覧表示されています。

Cluster Autoscaler ログを表示する

Cluster Autoscaler をデプロイしたら、ログを表示してクラスターの負荷をモニタリングしていることを確認できます。

次のコマンドを使用して Cluster Autoscaler ログを表示します。

kubectl -n kube-system logs -f deployment.apps/cluster-autoscaler

出力

I0926 23:15:55.165842 1 static_autoscaler.go:138] Starting main loop I0926 23:15:55.166279 1 utils.go:595] No pod using affinity / antiaffinity found in cluster, disabling affinity predicate for this loop I0926 23:15:55.166293 1 static_autoscaler.go:294] Filtering out schedulables I0926 23:15:55.166330 1 static_autoscaler.go:311] No schedulable pods I0926 23:15:55.166338 1 static_autoscaler.go:319] No unschedulable pods I0926 23:15:55.166345 1 static_autoscaler.go:366] Calculating unneeded nodes I0926 23:15:55.166357 1 utils.go:552] Skipping ip-192-168-3-111.region-code.compute.internal - node group min size reached I0926 23:15:55.166365 1 utils.go:552] Skipping ip-192-168-71-83.region-code.compute.internal - node group min size reached I0926 23:15:55.166373 1 utils.go:552] Skipping ip-192-168-60-191.region-code.compute.internal - node group min size reached I0926 23:15:55.166435 1 static_autoscaler.go:393] Scale down status: unneededOnly=false lastScaleUpTime=2019-09-26 21:42:40.908059094 ... I0926 23:15:55.166458 1 static_autoscaler.go:403] Starting scale down I0926 23:15:55.166488 1 scale_down.go:706] No candidates for scale down