Kubernetes における HorizontalPodAutoscaler の使用方法

KubernetesKubernetesIntermediate
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedDeploymentGroup(["Advanced Deployment"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/AdvancedDeploymentGroup -.-> kubernetes/scale("Scale") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") subgraph Lab Skills kubernetes/initialization -.-> lab-34031{{"Kubernetes における HorizontalPodAutoscaler の使用方法"}} kubernetes/get -.-> lab-34031{{"Kubernetes における HorizontalPodAutoscaler の使用方法"}} kubernetes/create -.-> lab-34031{{"Kubernetes における HorizontalPodAutoscaler の使用方法"}} kubernetes/apply -.-> lab-34031{{"Kubernetes における HorizontalPodAutoscaler の使用方法"}} kubernetes/scale -.-> lab-34031{{"Kubernetes における HorizontalPodAutoscaler の使用方法"}} kubernetes/describe -.-> lab-34031{{"Kubernetes における HorizontalPodAutoscaler の使用方法"}} end

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が増えた負荷に応じてデプロイメントをどのようにスケールするかも見ました。