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

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

概要

ステートレス アプリケーションとは、データやアプリケーションの状態をクラスタや永続ストレージに保存しないアプリケーションです。代わりに、データとアプリケーションの状態はクライアントに保持されるため、ステートレス アプリケーションはスケーラビリティが高くなります。たとえば、フロントエンド アプリケーションはステートレスです。複数のレプリカをデプロイして可用性を高め、需要が低いときにはスケールダウンします。これらのレプリカは一意の ID を必要としません。

Kubernetes は、Deployment コントローラを使用してステートレス アプリケーションを一意でない同一のポッドとしてデプロイします。Deployment では、アプリケーションを実行するポッドの数、実行するコンテナ イメージのバージョン、ポッドにどのラベルを付けるべきかなど、アプリケーションの望ましい状態を管理します。Deployment のポッド仕様を更新することによって、望ましい状態を動的に変更できます。

ステートレス アプリケーションは、永続ストレージを使用してデータを保存し、StatefulSet を使用して一意の ID を持つポッドをデプロイするステートフル アプリケーションとは対照的な存在です。

始める前に

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

  • 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 を有効にして、このプロダクトの仕組みを学習します。

Deployment の詳細

単純な Deployment マニフェスト ファイルの例を以下に示します。この Deployment では、Container Registry に格納された hello-app イメージを実行する app=my-app というラベルの付いた複製ポッドが 3 つ作成されます。

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

ここで

  • spec: replicas: は Deployment が管理する複製ポッドの数です。
  • spec: template: metadata: labels: は各ポッドに付けられたラベルで、Deployment がポッドを管理するために使用します。
  • spec: template: spec:ポッド仕様であり、各ポッドの実行方法を定義します。spec: containers には、各ポッドで実行するコンテナの名前および実行するコンテナ イメージが含まれます。

Deployment 仕様の詳細については、Deployment API のリファレンスをご覧ください。

Deployment を作成する

Deployment は次のいずれかの方法で作成します。

  • Google Cloud Platform Console の [ワークロード] メニューにあるデプロイ機能を使用して、Container Registry に保存したコンテナ イメージから簡単な Deployment を作成できます。
  • Deployment マニフェストを作成し、kubectl apply を実行してリソースを作成できます。

kubectl apply

kubectl apply を使用すると、マニフェスト ファイルから Deployment を宣言的に作成および更新できます。この方法では、ライブリソースに対して行われた更新も保持され、マニフェスト ファイルに変更がマージされません。

マニフェスト ファイルから Deployment を作成するには、次のコマンドを実行します。

kubectl apply -f [DEPLOYMENT_FILE]

ここで、[DEPLOYMENT_FILE] はマニフェスト ファイルです(config.yaml など)。

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

Console

Deployment を作成するには、次の手順を行います。

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

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

  2. [デプロイ] をクリックします。

  3. [コンテナの編集] で、次のものを選択します。

    • 既存のコンテナ イメージ: Container Registry から使用可能な Docker イメージを選択します。 [コンテナ イメージ] に、使用するコンテナ イメージとそのバージョンを入力します。

    • 新しいコンテナ イメージ: Cloud Source RepositoriesCloud Build で作成したイメージを使用します。

  4. 必要に応じて、デプロイを次のように構成します。

    • 環境変数: コンテナに渡します。
    • 初期コマンド: ランタイムにコンテナのエントリポイントをカスタマイズします。
  5. [続行] をクリックします。構成画面が表示されます。

  6. デプロイにアプリケーション名を設定し、デプロイする Kubernetes 名前空間を指定します。

  7. Kubernetes のラベルをデプロイに適用する場合は、[ラベル] でキーを追加します。

  8. このデプロイを作成する YAML を保存し、後で更新する場合は、[YAML を表示] をクリックします。YAML をコピーしてファイルに貼り付け、保存します。

  9. [クラスタ] プルダウン メニューから、目的のクラスタを選択します。

  10. [デプロイ] をクリックします。

Deployment を検査する

Deployment を作成したら、次のいずれかの方法で検査できます。

kubectl

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

kubectl describe deployment [DEPLOYMENT_NAME]

[DEPLOYMENT_NAME] は Deployment の名前です。

Deployment によって作成されたポッドを一覧表示するには、次のコマンドを実行します。

kubectl get pods -l [KEY]=[VALUE]

このコマンドで -l フラグを指定すると、kubectl は Key-Value ラベルを持つすべてのポッドを取得します。たとえば、Deployment のラベルが app: my-app の場合、kubectl get pods -l app=my-app を実行すると、このラベルを持つポッドが表示されます。

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

kubectl describe pod [POD_NAME]

Deployment のマニフェストを確認するには、次のコマンドを入力します。

kubectl get deployments [DEPLOYMENT_NAME] -o yaml

このコマンドは、Deployment のライブ構成を YAML 形式で表示します。

Console

Deployment を検査するには、次の手順を行います。

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

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

  2. ワークロードの詳細情報を取得するには、メニューから目的のワークロードを選択します。

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

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

Deployment を更新する

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

次の方法で Deployment を更新できます。

  • GCP Console の [ワークロード] メニューから [ローリング アップデート] メニューと YAML エディタを使用できます。
  • マニフェスト ファイルを変更し、それを kubectl apply によって適用できます。
  • kubectl set を使用すると、ポッド仕様の imageresources またはselector フィールドを更新できます。
  • kubectl edit を使用して、シェルまたは任意のエディタで Deployment を直接更新できます。

kubectl apply

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

Deployment を更新するには、次のコマンドを実行します。

kubectl apply -f [DEPLOYMENT_FILE]

ここで、[DEPLOYMENT_FILE] は更新済みのマニフェスト ファイルです。

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

kubectl set

kubectl set を使用すると、Deployment のイメージ、リソース(必須または制限)またはセレクタ フィールドを変更できます。

Deployment のイメージを変更するには、次のコマンドを実行します。

kubectl set image deployment [DEPLOYMENT_NAME] [IMAGE] [IMAGE]:[TAG]

たとえば、Deployment を nginx バージョン 1.7.9 から 1.9.1 に更新するには、次のコマンドを実行します。

kubectl set image deployment nginx nginx=nginx:1.9.1

Console

[ローリング更新] メニューは、[ワークロード] メニューから利用できます。

Deployment の [ローリング アップデート] メニューにアクセスするには、次の手順を行います。

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

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

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

  3. [アクション]、[ローリング アップデート] の順にクリックします。

Deployment の更新戦略を次のように変更できます。

  • 準備の最短秒数: 新しく作成されたポッドが使用可能と見なされるまでの最小秒数を指定します。
  • 最大サージ: 必要なポッドの数を超えて作成できるポッドの最大数を指定するオプション フィールドです。値として絶対数または割合を指定できます。
  • オフライン上限: 更新プロセス中にオフラインにできるポッドの最大数を指定するオプション フィールドです。値として絶対数または割合を指定できます。

    既存のコンテナを編集するには:

    1. [ローリング アップデート] メニューからコンテナを選択し、そのメニューを展開します。
    2. コンテナ名を変更するには、[コンテナ名] フィールドを編集します。
    3. コンテナのイメージまたはバージョンを変更するには、[イメージ名] フィールドを編集します。
    4. [完了] をクリックして変更を保存します。
    5. コンテナを削除するには、ゴミ箱アイコンをクリックします。

    新しいコンテナを追加するには、次の手順を行います。

    1. [ローリング アップデート] メニューで、[コンテナの追加] をクリックします。
    2. [イメージ名] フィールドに、イメージ名とバージョンを [IMAGE_NAME]:[IMAGE_VERSION] の形式で入力します。例: nginx:1.7.9
    3. 必要に応じて、[コンテナ名] フィールドにコンテナの名前を入力します。
    4. [完了] をクリックします。
  • [更新] をクリックします。

Deployment のライブ構成を編集するには、次の手順を行います。

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

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

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

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

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

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

更新のロールバック

kubectl rollout undo を使用すると、更新をロールバックできます。

進行中の更新または完了した更新を以前のリビジョンにロールバックできます。

kubectl rollout undo deployment my-deployment

特定のリビジョンにロールバックすることもできます。

kubectl rollout undo deployment my-deployment --to-revision=3

Deployment をスケーリングする

GCP Console または kubectl scale を使用して、Deployment を手動でスケーリングできます。

詳細については、Deployment の自動スケーリングをご覧ください。

kubectl

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

Deployment を手動でスケーリングするには、次のコマンドを実行します。

kubectl scale deployment [DEPLOYMENT_NAME] --replicas [NUMBER_OF_REPLICAS]

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

Console

Deployment をスケーリングするには、次の手順を行います。

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

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

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

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

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

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

Deployment を削除する

Deployment を手動で削除するには、GCP Console または kubectl delete を使用します。

kubectl

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

kubectl delete deployment [DEPLOYMENT_NAME]

Console

Deployment を削除するには、次の手順を行います。

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

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

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

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

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

次のステップ

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

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

Kubernetes Engine のドキュメント