ステートフル アプリケーションのデプロイ

このページでは、Google Kubernetes Engine を使用してステートフル アプリケーションをデプロイする方法について説明します。

概要

ステートフル アプリケーションは、サーバー、クライアント、およびその他のアプリケーションが使用するデータを永続ディスク ストレージに保存します。ステートフル アプリケーションの例としては、他のアプリケーションがデータの保存先および取得元として使用するデータベースや key-value ストアが挙げられます。

永続ストレージはオンデマンドで動的にプロビジョニングできるため、基礎となるボリュームを事前に手動で作成する必要はありません。 Kubernetes では、StorageClass を作成することにより動的プロビジョニングが構成されます。GKE では、デフォルトの StorageClass がインストールされているため、Google Compute Engine の永続ディスクを動的にプロビジョニングできます。

Kubernetes は、StatefulSet コントローラを使用して、ステートフル アプリケーションを StatefulSet オブジェクトとしてデプロイします。StatefulSet 内のポッドに互換性はありません。ポッドごとに一意の識別子があり、この識別子はスケジュールされた場所に関係なく維持されます。

ステートフル アプリケーションは、クライアント データがセッション間でサーバーに保存されないステートレス アプリケーションとは対照的です。

始める前に

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

  • Google Kubernetes Engine API が有効になっていることを確認します。
  • Enable 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
  • コンテナ化されたアプリケーションが Container Registry などのイメージ レジストリに格納されていることを確認します。

GKE を初めて使用する方は、クイックスタートを完了する必要があります。クイックスタートでは、GKE API を有効にして、このプロダクトの仕組みを学習します。

StatefulSet 内の永続ストレージの要求

アプリケーションは、PersistentVolumeClaim オブジェクトを使って永続ストレージをリクエストできます。

通常、ポッドに加えて PersistentVolumeClaim オブジェクトがユーザーによって作成される必要があります。ただし StatefulSet には、PersistentVolumeClaim オブジェクトを自動生成する volumeClaimTemplates 配列が含まれています。各 StatefulSet レプリカは、それぞれ独自の PersistentVolumeClaim オブジェクトを取得します。

ステートフル セットを作成する

kubectl apply を使用して、ステートフル セットを作成します。

kubectl apply は、マニフェスト ファイルを使用して、クラスタ内のリソースを作成、更新、削除します。これは、宣言型のオブジェクト構成方法です。この方法では、ライブ オブジェクトに対して行われた書き込みが保持され、オブジェクトの構成ファイルに変更がマージされません。

別個に作成された Service によって管理される StatefulSet の簡単な例を次に示します。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: [STATEFULSET_NAME]
spec:
  serviceName: [SERVICE_NAME]
  replicas: 3
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app=[APP_NAME]
    spec:
      containers:
      - name: [CONTAINER_NAME]
        image: ...
        ports:
        - containerPort: 80
          name: [PORT_NAME]
        volumeMounts:
        - name: [PVC_NAME]
          mountPath: ...
  volumeClaimTemplates:
  - metadata:
      name: [PVC_NAME]
      annotations:
        ...
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

ここで

  • [STATEFULSET_NAME] はステートフル セットに付ける名前です
  • [SERVICE_NAME] は Service に付ける名前です
  • [APP_NAME] は、ポッドで実行するアプリケーションの名前です
  • [CONTAINER_NAME] は、ポッド内のコンテナに付ける名前です
  • [PORT_NAME] は、ステートフル セットによって開かれたポートに付ける名前です
  • [PVC_NAME] は、永続ボリュームの要求に付ける名前です。

このファイルの kind フィールドは、このファイルに定義された仕様で StatefulSet オブジェクトを作成する必要があることを指定します。この例の StatefulSet は 3 つの複製ポッドを生成し、StatefulSet をインターネットに公開するためにポート 80 を開きます。

ステートフル セットを作成するには、次のコマンドを実行します。

kubectl apply -f [STATEFULSET_FILE]

kubectl apply -f [DIRECTORY]/ を使用して、ディレクトリに保存された構成ファイルで定義されているすべてのオブジェクト(既存のものを除く)を作成することもできます。

kubectl apply の詳細については、kubectl リファレンス ドキュメントを参照してください。

ステートフル セットを検査する

kubectl

StatefulSet を検査するには、次のコマンドを実行します。

kubectl get statefulset [STATEFULSET_NAME] -o yaml

このコマンドは、StatefulSet のライブ設定を YAML 形式で表示します。

ステートフル セットによって作成されたポッドを一覧表示するには、次のコマンドを実行します。

kubectl get pods -l app=[APP_NAME]

このコマンドの -l フラグは、アプリ [APP_NAME] 用にラベル付けされたすべてのポッドを取得するよう kubectl に指示します。

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

NAME                                READY     STATUS    RESTARTS   AGE
[POD_NAME]                                      1/1       Running   0          1m
[POD_NAME]                                      1/1       Running   0          1m

StatefulSet の詳細情報を取得するには、次のコマンドを実行します。

kubectl describe statefulset [STATEFULSET_NAME]

[STATEFULSET_NAME] はステートフル セットの名前です。

特定のポッドの情報を取得するには、次のコマンドを実行します。

kubectl describe pod [POD_NAME]

作成された PersistentVolumeClaim のリストを取得するには、次のようにします。

kubectl get pvc

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

NAME                            STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE
[STATEFULSET_NAME]-[PVC_NAME]-0 Bound     pvc-bdff4e1e-183e-11e8-bf6d-42010a800002   1G         RWO            standard        9s
[STATEFULSET_NAME]-[PVC_NAME]-1 Bound     pvc-bdff4e1e-183e-11e8-bf6d-42010a800003   1G         RWO            standard        9s
[STATEFULSET_NAME]-[PVC_NAME]-2 Bound     pvc-bdff4e1e-183e-11e8-bf6d-42010a800004   1G         RWO            standard        9s

特定の PersistentVolumeClaim の情報を取得するには、

kubectl describe pvc [STATEFULSET_NAME]-[PVC_NAME]-0

特定の PersistentVolume の情報を取得するには、

kubectl describe pv [PV_NAME]

Console

ステートフル セットを検査するには、次の手順を行います。

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

    [ワークロード] メニューに移動

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

[ワークロード] メニューには複数のメニュー項目があります。

  • StatefulSet のライブ構成を表示するには、[YAML] をクリックします。
  • StatefulSet に関連するすべてのイベントを表示するには、[イベント] をクリックします。
  • StatefulSet の変更履歴を表示するには、[変更履歴] をクリックします。

ステートフル セットを更新する

StatefulSet を更新する方法は複数あります。一般的な宣言型メソッドは kubectl apply です。ステートフル セットをシェルで直接更新するか、任意のエディタで更新するには、kubectl edit を使用します。また、GCP Console の GKE [ワークロード] メニューから YAML エディタを使用することもできます。

更新は、StatefulSet のポッド仕様(イメージ、リソースの使用量 / リクエスト、構成など)にロールアウトできます。

kubectl apply

新規作成または更新されたマニフェスト ファイルを適用することで、StatefulSet を更新できます。 これは、アプリケーションのスケーリングや新しいバージョンの指定など、StatefulSet にさまざまな変更を加える場合に便利です。

ステートフル セットを更新するには、次のコマンドを実行します。

kubectl apply -f [STATEFULSET_FILE]

[STATEFULSET_FILE] は、更新されたマニフェスト ファイルです。

kubectl apply コマンドは、リソースにマニフェスト ファイルを適用します。指定されたリソースが存在しない場合は、このコマンドによって作成されます。

kubectl apply の詳細については、kubectl リファレンス ドキュメントを参照してください。

Console

ステートフル セットのライブ構成を編集するには、次の手順を行います。

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

    [ワークロード] メニューに移動

  2. 目的のワークロードを選択します。

  3. [編集] をクリックします。

  4. エディタを使用してオブジェクトに必要な変更を加えます。

  5. [保存] をクリックします。

更新ロールアウトを検査する

kubectl

StatefulSet のロールアウトを検査するには、次のコマンドを実行します。

kubectl rollout status statefulset [STATEFULSET_NAME]

StatefulSet のロールアウト履歴を表示するには、次のコマンドを実行します。

kubectl rollout history statefulset [STATEFULSET_NAME]

ロールアウトを取り消すには、次のコマンドを実行します。

kubectl rollout undo statefulset [STATEFULSET_NAME]

Console

ステートフル セットの変更履歴を表示するには、次の手順を行います。

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

    [ワークロード] メニューに移動

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

  3. [変更履歴] をクリックします。

  4. 目的のリビジョンを選択します。

更新戦略

StatefulSet の updateStrategy フィールドを使用すると、ステートフル セット内のポッドのコンテナ、ラベル、リソース リクエスト / 制限、アノテーションの自動ローリング更新の構成および無効化を行うことができます。

StatefulSet の更新戦略については、Kubernetes ドキュメントの更新戦略をご覧ください。

ステートフル セットをスケーリングする

kubectl

ステートフル セットをスケーリングするには、kubectl scale を使用します。これはいつでも実行できます。

ステートフル セットを手動でスケーリングするには、次のコマンドを実行します。

kubectl scale statefulset [STATEFULSET_NAME] --replicas [NUMBER_OF_REPLICAS]

ここで、[NUMBER_OF_REPLICAS] は必要な複製ポッドの数です。

Console

ステートフル セットをスケーリングするには、次の手順を行います。

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

    [ワークロード] メニューに移動

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

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

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

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

ステートフル セットを削除する

kubectl

StatefulSet を削除するには、次のコマンドを実行します。

kubectl delete statefulset [STATEFULSET_NAME]

Console

ステートフル セットを削除するには、次の手順を行います。

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

    [ワークロード] メニューに移動

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

  3. [削除] をクリックします。

  4. 確認ダイアログのメニューで、[削除] をクリックします。

次のステップ

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

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

Kubernetes Engine のドキュメント