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

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

始める前に

このタスクの準備をするには、次の手順を行います。

  • Cloud SDK をインストール済みであることを確認します。
  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project [PROJECT_ID]
  • デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone [COMPUTE_ZONE]
  • コンテナ化されたアプリケーションが Container Registry などのイメージ レジストリに格納されていることを確認します。

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

概要

ステートレス アプリケーションでは、データとアプリケーションの状態がセッション間でサーバーまたは永続ストレージに保存されません。代わりに、データとアプリケーションの状態はクライアントに保持されます。ステートレス アプリケーションはスケーリングと複製が簡単にできます。

Kubernetes は、デプロイ コントローラを使用してステートレス アプリケーションをデプロイ オブジェクトとしてデプロイします。デプロイはアプリケーションの「目的の状態」を管理します。「目的の状態」は、デプロイを作成するときに定義しますが、後で更新することもできます。

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

デプロイを作成する

デプロイは、kubectl runkubectl apply、または kubectl create を使用して作成できます。

kubectl run

kubectl run は、コマンドラインで命令型コマンドを使用してデプロイを作成します。

シェルまたはターミナル ウィンドウで次のコマンドを実行します。

kubectl run [DEPLOYMENT_NAME] --image [IMAGE]:[TAG] --replicas 3 \
--labels app=[APP_NAME] --port 81 --generator deployment/apps.v1beta1 \
--save-config

ここで

  • [DEPLOYMENT_NAME] はデプロイに付ける名前です
  • [IMAGE] はコンテナ内で実行されるイメージです
  • [TAG] は実行されるイメージのバージョンです(デフォルトは最新バージョンを表す latest です)
  • [APP_NAME] はアプリケーションに付ける名前です

このコマンドは、指定されたコンテナ イメージを使用してデプロイを作成します。この例のデプロイは 3 つの複製ポッドを生成し、デプロイをインターネットに公開するためにポート 80 を開きます。

--generator は、使用する API 生成ツールを指定します。

--save-config を指定すると、デプロイの設定がアノテーションに保存され、後で kubectl apply を使用して設定を更新できるようになります。または、kubectl apply を使用してデプロイを作成し、後で kubectl apply を使用してデプロイを更新することもできます。

kubectl run について詳しくは、kubectl リファレンス ドキュメントをご覧ください。

kubectl create

kubectl create は、マニフェスト ファイルを使用してクラスタ内のリソースを作成します。これは、命令型のオブジェクト設定方法です。

デプロイの簡単な例を次に示します。

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: [NAME]
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: [APP_NAME]
    spec:
      containers:
      - name: [CONTAINER_NAME]
        image: [IMAGE]:[TAG]
        ports:
        - containerPort: 80

ここで

  • [NAME] はデプロイに付ける名前です
  • [APP_NAME] はアプリケーションに付ける名前です
  • [CONTAINER_NAME] はコンテナの名前です
  • [IMAGE] はコンテナ内で実行されるイメージです
  • [TAG] は実行されるイメージのバージョンです(省略すると最新バージョンに設定されます)

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

デプロイを作成するには、次のコマンドを実行します。

kubectl create -f [DEPLOYMENT_FILE] --save-config

kubectl create -f コマンドは、構成ファイル(ここでは [DEPLOYMENT_FILE])に基づいてリソースを作成します。

--save-config を指定すると、デプロイの設定がアノテーションに保存され、後で kubectl apply を使用して設定を更新できるようになります。または、kubectl apply を使用してデプロイを作成し、後で kubectl apply を使用してデプロイを更新することもできます。

kubectl create について詳しくは、kubectl リファレンス ドキュメントをご覧ください。

kubectl apply

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

デプロイの簡単な例を次に示します。

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: [DEPLOYMENT_NAME]
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: [APP_NAME]
    spec:
      containers:
      - name: [CONTAINER_NAME]
        image: [IMAGE]:[TAG]
        ports:
        - containerPort: 80

ここで

  • [DEPLOYMENT_NAME] はデプロイに付ける名前です
  • [APP_NAME] はアプリケーションに付ける名前です
  • [CONTAINER_NAME] はコンテナに付ける名前です
  • [IMAGE] はコンテナ内で実行されるイメージです
  • [TAG] は実行されるイメージのバージョンです(デフォルトは最新バージョンを表す latest です)

このファイルの kind フィールドは、このファイルに定義された仕様でデプロイ オブジェクトを作成する必要があることを指定します。この例のデプロイは [IMAGE] で実行される 3 つの複製ポッドを生成し、ポッドがトラフィックを受信できるようにポート 80 を開きます。

このデプロイを設定ファイルから作成するには、次のコマンドを実行します。

kubectl apply -f [DEPLOYMENT_FILE]

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

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

デプロイを検査する

Console

デプロイのライブ設定を検査するには、次の手順を行います。

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

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

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

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

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

kubectl

デプロイを検査するには、次のコマンドを実行します。

kubectl get deployments [DEPLOYMENT_NAME] -o yaml

このコマンドは、デプロイのライブ設定を 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

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

kubectl describe deployment [DEPLOYMENT_NAME]

ここで、[DEPLOYMENT_NAME] はデプロイの名前です。

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

kubectl describe pod [POD_NAME]

デプロイを更新する

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

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

Console

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

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

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

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

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

デプロイの更新戦略を次のように変更できます。

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

既存のコンテナを変更するには、次の手順を行います。

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

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

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

デプロイのライブ設定を編集するには、次の手順を行います。

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

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

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

  3. [編集] をクリックします。
  4. エディタを使用してオブジェクトに必要な変更を加えます。
  5. [保存] をクリックします。

kubectl apply

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

デプロイを更新するには、次のコマンドを実行します。

kubectl apply -f [DEPLOYMENT_FILE]

ここで、[DEPLOYMENT_FILE] は更新済みの構成ファイルです。

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

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

kubectl set

kubectl set を使用してデプロイのイメージ、リソース(リクエストまたは制限)、またはセレクタ フィールドを更新できます。

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

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

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

kubectl set image deployment nginx nginx=nginx:1.9.1

kubectl set について詳しくは、kubectl リファレンス ドキュメントをご覧ください。

kubectl edit

kubectl edit を使用すると、シェルまたはターミナル ウィンドウからデプロイを直接編集できます。KUBE_EDITOR または EDITOR 環境変数で定義されたエディタが開きます。設定されていない場合は、Linux の vi コマンドラインまたは Windows の notepad にフォールバックします。このコマンドにはファイル名とコマンドライン引数を指定できますが、指定するファイルは以前に保存されたバージョンのリソースである必要があります。

次のコマンドを実行します。

kubectl edit deployment [DEPLOYMENT_NAME]

このコマンドを実行すると、定義済みまたはデフォルトのエディタでデプロイの設定ファイルが開きます。ファイルの replicas フィールドの値を編集し、ファイルを保存します。

ロールアウト ステータスを確認するには、次のコマンドを実行します。

kubectl rollout status deployment [DEPLOYMENT_NAME]

kubectl edit について詳しくは、kubectl リファレンス ドキュメントをご覧ください。

ロールバック

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

kubectl rollout undo deployment my-deployment

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

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

デプロイをスケーリングする

Console

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

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

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

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

  3. [アクション] をクリックしてから、[スケール] をクリックします。
  4. [レプリカ] フィールドに必要なレプリカの数を入力します。
  5. [スケール] をクリックします。

kubectl

デプロイは、kubectl scale を使用していつでもスケーリングできます。

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

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

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

デプロイを削除する

Console

デプロイを削除するには、次の手順を行います。

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

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

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

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

kubectl

デプロイを削除するには、次のコマンドを実行します。

kubectl delete deployment [DEPLOYMENT_NAME]

次のステップ

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

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