Kubernetes における HorizontalPodAutoscaler の使用方法

KubernetesBeginner
オンラインで実践に進む

はじめに

HorizontalPodAutoscaler は、Kubernetes の機能であり、リソースの利用状況に基づいてデプロイメント内のポッド数を自動的にスケールすることができます。この実験では、HorizontalPodAutoscaler を使用してデプロイメントを自動的にスケールする方法を学びます。

Minikube クラスタを起動する

リソースを作成する前に、動作中の Kubernetes クラスタが必要です。Minikube は、ローカルマシン上で動作する軽量の Kubernetes 環境です。

  1. 作業ディレクトリに移動する

    ターミナルを開き、デフォルトのプロジェクトフォルダに移動します。

    cd /home/labex/project
    
  2. Minikube を起動する

    Minikube を起動して Kubernetes クラスタを初期化します。

    minikube start
    
    • このコマンドは、ローカルマシン上に単一ノードの Kubernetes クラスタをセットアップします。
    • Minikube の起動には、システムの性能に応じて数分かかる場合があります。
  3. Minikube が動作していることを確認する

    Minikube クラスタの状態を確認します。

    minikube status
    
    • kubeletapiserverなどのコンポーネントがRunningと表示されていることを確認します。
    • クラスタが動作していない場合は、minikube startを再度実行します。

Minikube の起動に問題がある場合は、必要に応じてminikube deleteを使用して環境をリセットします。

デプロイメントを作成する

まず、HorizontalPodAutoscaler を適用するデプロイメントを作成する必要があります。

  1. 次の内容のdeployment.yamlという名前のデプロイメントファイルを作成します。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hpa-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hpa-demo
  template:
    metadata:
      labels:
        app: hpa-demo
    spec:
      containers:
        - name: hpa-demo
          image: nginx
          resources:
            limits:
              cpu: "1"
              memory: 512Mi
            requests:
              cpu: "0.5"
              memory: 256Mi
---
apiVersion: v1
kind: Service
metadata:
  name: hpa-demo
spec:
  selector:
    app: hpa-demo
  ports:
    - name: http
      port: 80
      targetPort: 80

このデプロイメントは、CPU とメモリのリソース制限と要求を持つ Nginx コンテナの単一レプリカを指定しています。

  1. デプロイメントを作成します。
kubectl apply -f deployment.yaml

HorizontalPodAutoscaler を作成する

これでデプロイメントができたので、HorizontalPodAutoscaler を作成してデプロイメントを自動的にスケールすることができます。

  1. 次の内容のhpa.yamlという名前の HorizontalPodAutoscaler ファイルを作成します。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-demo
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: hpa-demo
  minReplicas: 1
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          averageUtilization: 1
          type: Utilization

この HorizontalPodAutoscaler は、hpa-demoデプロイメントを 1 から 10 のレプリカにスケールするように指定しており、平均 CPU 使用率を 50%にすることを目標としています。

  1. HorizontalPodAutoscaler を作成します。
kubectl apply -f hpa.yaml

HorizontalPodAutoscaler をテストする

これで HorizontalPodAutoscaler ができたので、デプロイメントに負荷をかけることでテストすることができます。

  1. metrice-server を有効にする
minikube addons enable metrics-server
  1. 負荷生成用のポッドを作成する
kubectl run -i --tty load-generator --image=busybox /bin/sh
  1. 負荷生成用のポッドで、次のコマンドを実行してデプロイメントに負荷をかけます。
while true; do wget -q -O- http://hpa-demo; done
  1. 別のターミナルを開き、HorizontalPodAutoscaler の状態を確認します。
kubectl get hpa

hpa-demoのコピー数が10に拡大されていることがわかります。次のコマンドでレプリカ数を確認することができます。

kubectl get pods -l app=hpa-demo
  1. 負荷生成用のポッドでctrl+cを入力して負荷生成を停止します。

まとめ

この実験では、HorizontalPodAutoscaler を使ってリソースの利用状況に基づいてデプロイメントを自動的にスケールする方法を学びました。デプロイメントを作成し、HorizontalPodAutoscaler を作成し、デプロイメントに負荷をかけることでテストしました。また、HorizontalPodAutoscaler が増えた負荷に応じてデプロイメントをどのようにスケールするかも見ました。