Amazon EKS で Kubernetes メトリクスサーバーと水平ポッド自動スケーラーをセットアップする方法を教えてください。

所要時間2分
0

Amazon Elastic Kubernetes サービス (Amazon EKS) に Kubernetes メトリクスサーバーと水平ポッド自動スケーラー (HPA) をセットアップしたいと考えています。

解決策

環境を設定する

  1. Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを作成します
  2. EC2 インスタンスに kubectl をインストールします
  3. 最新バージョンの AWS コマンドラインインターフェイス (AWS CLI) を EC2 インスタンスにインストールして設定します
  4. Amazon EKS クラスターを指すように kubeconfig ファイルを設定します

Kubernetes メトリクスサーバーを作成する

1.    メトリクスサーバーをインストールするには、以下のコマンドを実行します。

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

2.    メトリクスサーバーが稼働していることを確認するには、以下のコマンドを実行します。

kubectl get pods -n kube-system -l k8s-app=metrics-server

出力は次のようになります。

kubectl get pods -n kube-system -l k8s-app=metrics-server
metrics-server-85cc795fbf-79d72   1/1     Running   0          22s

php-apache デプロイとサービスを作成する

1.    php-apache デプロイを作成するには、以下のコマンドを実行します。

kubectl create deployment php-apache --image=k8s.gcr.io/hpa-example

2.    CPU リクエストを設定するには、以下のコマンドを実行します。

kubectl patch deployment php-apache -p='{"spec":{"template":{"spec":{"containers":[{"name":"hpa-example","resources":{"requests":{"cpu":"200m"}}}]}}}}'

**重要:**cpu の値を正しく設定しないと、ポッドの CPU 使用率メトリクスが定義されず、HPA をスケーリングできません。

3.    デプロイをサービスとして公開するには、以下のコマンドを実行します。

kubectl create service clusterip php-apache --tcp=80

4.    HPA を実行するには、以下のコマンドを実行します。

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

5.    HPA が作成されたことを確認するには、以下のコマンドを実行します。

kubectl get hpa

6.    先ほど作成したデプロイを接続するポッドを作成するには、以下のコマンドを実行します。

kubectl run -i --tty load-generator --image=busybox /bin/sh

7.    ステップ 1 で使用した名前空間のポッドへの負荷をテストするには、以下のスクリプトを実行します。

while true; do wget -q -O- http://php-apache; done

**注:**ロードジェネレータポッドの while ループと tty セッションを終了するには、CTRL + C でループをキャンセルします。次に、CTRL + D キーでセッションを終了します。

8.    HPA が CPU 使用率メトリクスに基づいてポッドをどのようにスケールするかを確認するには、以下のコマンドを実行します (別のターミナルウィンドウから実行するのが望ましい)。

kubectl get hpa -w

これで Metrics Server が稼働し、リソースベースのメトリクスを取得できるようになりました。

9.    HPA のテストに使用したリソースをクリーンアップするには、以下のコマンドを実行します。

kubectl delete hpa,service,deployment php-apache
kubectl delete pod load-generator

関連情報

水平ポッド自動スケーリング (Kubernetes ウェブサイト上)

AWS公式
AWS公式更新しました 1年前