アプリケーションのスケーリング

このページでは、Google Kubernetes Engine でデプロイされたアプリケーションをスケーリングする方法について説明します。

概要

GKE でアプリケーションをデプロイするときに、実行する予定のアプリケーション レプリカの数を定義できます。アプリケーションをスケーリングすると、レプリカの数が増えたり減ったりします。

アプリケーションの各レプリカは、アプリケーションのコンテナをカプセル化する 1 つの Kubernetes ポッドを表します。

始める前に

このタスクの準備として、次の手順を行います。

  • Google Kubernetes Engine API が有効になっていることを確認します。
  • Google Kubernetes Engine API の有効化
  • Cloud SDK がインストール済みであることを確認します。
  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project [PROJECT_ID]
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone [COMPUTE_ZONE]
  • リージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud を最新バージョンに更新します。
    gcloud components update

アプリケーションを検査する

アプリケーションのスケーリングの前に、アプリケーションを検査し、正常であることを確認する必要があります。

クラスタにデプロイされているすべてのアプリケーションを表示するには、kubectl get [CONTROLLER] を実行します。[CONTROLLER] を、deploymentsstatefulsets、または別のコントローラ オブジェクト タイプに置き換えてください。

たとえば、Deployment を 1 つだけ作成済みの場合、kubectl get deployments を実行すると、出力は次のようになります。

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                1         1         1            1           10m

このコマンドの出力はすべてのオブジェクトで類似していますが、若干異なる場合があります。Deployment の場合、出力は次の 6 つの列で構成されます。

  • NAME には、クラスタ内の Deployment の名前が一覧表示されます。
  • DESIRED には、アプリケーションで想定される適切なレプリカ数、つまり望ましい状態が表示されます。この値は Deployment の作成時に定義されます。
  • CURRENT には、現在実行中のレプリカの数が表示されます。
  • UP-TO-DATE には、望ましい状態になるように更新されたレプリカの数が表示されます。
  • AVAILABLE には、ユーザーが使用できるアプリケーション レプリカの数が表示されます。
  • AGE には、クラスタ内でアプリケーションがこれまで実行された合計時間が表示されます。

この例では 1 つの Deployment my-app だけが存在し、それにはレプリカが 1 つだけあります。これは、望ましい状態が 1 つのレプリカだからです。作成時に望ましい状態を定義しますが、アプリケーションをスケーリングすると、この定義をいつでも変更できます。

StatefulSet を検査する

StatefulSet をスケーリングする前に、それを検査するために kubectl describe statefulset my-app を実行する必要があります。

このコマンドの出力で、[Pods Status] フィールドを調べます。Failed の値が 0 より大きい場合は、スケーリングが失敗した可能性があります。

StatefulSet が異常だと思われる場合は、kubectl get pods を実行して、どのレプリカが異常かを確認します。その後で、kubectl delete [POD] を実行します。ここで、[POD] は異常ポッドの名前です。

異常な状態の StatefulSet をスケーリングしようとすると、使用不能になる可能性があります。

アプリケーションのスケーリング

以降のセクションでは、アプリケーションのスケーリングに使用できるメソッドについて説明します。kubectl scale メソッドは、最も速くスケーリングする方法です。ただし、構成ファイルを更新する場合やインプレース修正を行う場合など、状況によっては別の方法を使用した方が適切な場合があります。

kubectl scale

kubectl scale を使用すると、アプリケーションを実行するレプリカの数を即座に変更できます。

kubectl scale を使用するには、--replicas フラグを設定して新しいレプリカ数を指定します。たとえば my-app を 4 つのレプリカにスケーリングするには、次のコマンドを実行します([CONTROLLER]deploymentstatefulset、または別のコントローラ オブジェクト タイプに置き換えます)。

kubectl scale [CONTROLLER] my-app --replicas 4

成功した場合は、このコマンドの出力が deployment "my-app" scaled のようになります。

その後で、kubectl get [CONTROLLER] my-app を実行します。出力は次のようになります。

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                4         4         4            4           15m

kubectl apply

kubectl apply を使用すると、既存のコントローラ オブジェクトに新しい構成ファイルを適用できます。kubectl apply ではリソースに複数の変更を加えることができるので便利です。特に、構成ファイルでリソースを管理するユーザーに役立つ可能性があります。

kubectl apply を使用してスケーリングするには、指定する構成ファイル内のオブジェクト仕様の replicas フィールドに新しいレプリカ数を含める必要があります。

例の my-app オブジェクトの構成ファイルの更新したバージョンを以下に示します。この例は Deployment を示しています。そのため、他のタイプのコントローラ(StatefulSet など)を使用する場合は、kind を適宜変更してください。この例は、少なくとも 3 つのノードを持つクラスタで最も効果的です。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
      - name: my-container
        image: gcr.io/google-samples/hello-app:2.0

このファイルでは、replicas フィールドの値が 3 になっています。この構成ファイルが適用されると、オブジェクト my-app は 3 つのレプリカにスケーリングします。

更新された構成ファイルを適用するには、次のコマンドを実行します。

kubectl apply -f config.yaml

その後で、kubectl get [CONTROLLER] my-app を実行します。出力は次のようになります。

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                3         3         3            3           15m

Console

Google Cloud Platform Console でワークロードをスケーリングするには、次の手順に従います。

  1. GCP Console で Google Kubernetes Engine の [ワークロード] メニューにアクセスします。

    [ワークロード] メニューにアクセス

  2. メニューから目的のワークロードを選択します。

  3. [アクション] をクリックしてから、[スケール] をクリックします。

  4. [レプリカ] フィールドに必要なレプリカの数を入力します。

  5. [スケール] をクリックします。

Deployment を自動スケーリングする

kubectl autoscale を使用してポッドの CPU 使用状況に基づいて Deployment の自動スケーリングを行うことも、GCP Console の GKE [ワークロード] メニューから自動スケーリングを行うこともできます。

kubectl autoscale

kubectl autoscale によって作成される HorizontalPodAutoscaler(HPA)オブジェクトは、指定されたリソース(スケール ターゲットという)を対象として、必要に応じてそれをスケーリングします。HPA は、指定された平均 CPU 使用率と一致するように、スケール ターゲットのレプリカの数を定期的に調整します。

kubectl autoscale を使用するときには、アプリケーションのレプリカの最大数と最小数、および CPU 使用率の目標を指定します。たとえば、レプリカの最大数を 6、最小値を 4 にして、CPU 使用率の目標を 50% に設定するには、次のコマンドを実行します。

kubectl autoscale deployment my-app --max 6 --min 4 --cpu-percent 50

このコマンドでは、--max フラグが必要です。--cpu-percent フラグは、すべてのポッドの目標 CPU 使用率です。このコマンドは、システム需要がない限り、即座に Deployment を 6 つのレプリカにスケーリングすることはありません。

kubectl autoscale を実行すると、HorizontalPodAutoscaler オブジェクトが作成され、アプリケーションが対象になります。負荷が変化すると、オブジェクトがアプリケーションのレプリカを増やしたり減らしたりします。

クラスタ内の特定の HorizontalPodAutoscaler オブジェクトを表示するには、次のコマンドを実行します。

kubectl get hpa [HPA_NAME]

HorizontalPodAutoscaler 構成を表示するには、次のコマンドを実行します。

kubectl get hpa [HPA_NAME] -o yaml

このコマンドの出力は、次のようになります。

apiVersion: v1
items:
- apiVersion: autoscaling/v1
  kind: HorizontalPodAutoscaler
  metadata:
    creationTimestamp: ...
    name: [HPA_NAME]
    namespace: default
    resourceVersion: "664"
    selfLink: ...
    uid: ...
  spec:
    maxReplicas: 10
    minReplicas: 1
    scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: [HPA_NAME]
    targetCPUUtilizationPercentage: 50
  status:
    currentReplicas: 0
    desiredReplicas: 0
kind: List
metadata: {}
resourceVersion: ""
selfLink: ""

この例では、targetCPUUtilizationPercentage フィールドに kubectl autoscale の例から渡された 50 パーセント値が保持されています。

クラスタ内の特定の HorizontalPodAutoscaler オブジェクトの詳細な説明を表示するには、次のコマンドを実行します。

kubectl describe hpa [HPA_NAME]

HorizontalPodAutoscaler を変更するには、kubectl apply を使用して新しい構成ファイルを適用するか、kubectl edit を使用するか、または kubectl patch を使用します。

HorizontalPodAutoscaler オブジェクトを削除するには、次のコマンドを実行します。

kubectl delete hpa [HPA_NAME]

Console

Deployment を自動スケーリングする手順は次のとおりです。

  1. GCP Console で Google Kubernetes Engine の [ワークロード] メニューにアクセスします。

    [ワークロード] メニューにアクセス

  2. メニューから目的のワークロードを選択します。

  3. [アクション] をクリックしてから、[自動スケーリング] をクリックします。

  4. [ポッドの最大数] フィールドに、必要なポッドの最大数を入力します。

  5. 必要に応じて、[ポッドの最小数] と [ターゲット CPU 使用率(パーセント)] フィールドに必要な値を入力します。

  6. [自動スケーリング] をクリックします。

カスタム指標による自動スケーリング

GKE バージョン 1.9 以降では、Stackdriver Monitoring からエクスポートされたカスタム指標に基づいて Deployment をスケーリングできます。

カスタム指標を使用して Deployment を自動スケーリングする方法については、カスタム指標を使用した Deployment の自動スケーリングのチュートリアルを参照してください。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Kubernetes Engine のドキュメント