Amazon Elastic Kubernetes サービス (Amazon EKS) に Kubernetes メトリクスサーバーと水平ポッド自動スケーラー (HPA) をセットアップしたいと考えています。
解決策
環境を設定する
- Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを作成します。
- EC2 インスタンスに kubectl をインストールします。
- 最新バージョンの AWS コマンドラインインターフェイス (AWS CLI) を EC2 インスタンスにインストールして設定します。
- 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 ウェブサイト上)