概要
このラボでは、Deployment マニフェストの基本的な使用方法について学習します。マニフェストとは、さまざまな Pod で使用できる Deployment に必要な構成を含むファイルであり、簡単に変更できます。
目標
このラボでは、次のタスクを行う方法について学びます。
- Deployment マニフェストを作成してクラスタにデプロイし、ノードが無効な場合の Pod のスケジュール再設定を確認する。
- Deployment に含まれる Pod の手動でのスケールアップとスケールダウンをトリガーする。
- Deployment のロールアウト(新しいバージョンへのローリング アップデート)とロールバックをトリガーする。
- カナリア デプロイを実行する。
ラボの設定
ラボにアクセスする
各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。
-
シークレット ウィンドウを使用して Google Skills にログインします。
-
ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。
一時停止機能はありません。必要な場合はやり直せますが、最初からになります。
-
準備ができたら、[ラボを開始] をクリックします。
-
ラボの認証情報(ユーザー名とパスワード)をメモしておきます。この情報は、Google Cloud コンソールにログインする際に使用します。
-
[Google コンソールを開く] をクリックします。
-
[別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
他の認証情報を使用すると、エラーや料金が発生します。
-
利用規約に同意し、再設定用のリソースページをスキップします。
最初のログイン手順を完了すると、プロジェクト ダッシュボードが表示されます。
Google Cloud Shell の有効化
Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。
Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
-
Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

-
[続行] をクリックします。
環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されます。次に例を示します。

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- 次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
出力:
Credentialed accounts:
- @.com (active)
出力例:
Credentialed accounts:
- google1623327_student@qwiklabs.net
- 次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project
出力:
[core]
project =
出力例:
[core]
project = qwiklabs-gcp-44776a13dea667a6
注:
gcloud ドキュメントの全文については、
gcloud CLI の概要ガイド
をご覧ください。
タスク 1. Deployment マニフェストを作成してクラスタにデプロイする
このタスクでは、クラスタ内の Pod の Deployment マニフェストを作成します。
ラボの GKE クラスタに接続する
- Cloud Shell で次のコマンドを入力して、ゾーンとクラスタ名の環境変数を設定します。
export my_region={{{ project_0.default_region | REGION }}}
export my_cluster=my-cluster
- Cloud Shell で kubectl のタブ補完を構成します。
source <(kubectl completion bash)
- Cloud Shell で次のコマンドを使用して、kubectl コマンドライン ツールのクラスタへのアクセスを設定します。
gcloud container clusters get-credentials $my_cluster --region $my_region
- Cloud Shell に次のコマンドを入力して、ラボの Cloud Shell にリポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
- 作業ディレクトリへのショートカットとしてソフトリンクを作成します。
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
- このラボのサンプル ファイルが含まれているディレクトリに移動します。
cd ~/ak8s/Deployments/
Deployment マニフェストを作成する
用意されているサンプルの Deployment マニフェスト(nginx-deployment.yaml)を使用して Deployment を作成します。この Deployment は 3 つの Pod レプリカを実行するように構成されています。各 Pod には TCP ポート 80 でリッスンする 1 つの nginx コンテナが含まれています。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
- 次のコマンドを実行して、マニフェストをデプロイします。
kubectl apply -f ./nginx-deployment.yaml
- 次のコマンドを実行して、Deployment のリストを表示します。
kubectl get deployments
出力は次の例のようになります。
出力:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 0/3 3 0 3s
- 数秒待ってから、このコマンドの出力で現在の数字が目的の数字と一致するまで繰り返しコマンドを実行します。
最終的な出力は次の例のようになります。
出力:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 42s
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
nginx Deployment マニフェストを作成、デプロイする
タスク 2. Deployment に含まれる Pod の数を手動でスケールアップまたはスケールダウンする
状況によっては、Pod インスタンスのシャットダウンが必要になる場合があります。また、10 個の Pod を実行する必要が生じる場合もあります。Kubernetes には、特定の Pod を所定のインスタンス数にスケーリングする機能があります。Pod をシャットダウンするには、Pod 数をゼロにスケーリングします。
このタスクでは、Google Cloud コンソールと Cloud Shell で Pod のスケールアップとスケールダウンを行います。
コンソールで Pod をスケールアップまたはスケールダウンする
- [Google Cloud コンソール] タブに切り替えます。
-
ナビゲーション メニュー(
)で、[Kubernetes Engine] > [ワークロード] をクリックします。
- [nginx-deployment](自分の Deployment)をクリックして、[Deployment の詳細] ページを開きます。
- 上部にある [アクション] > [スケール] > [レプリカを編集] をクリックします。
- 「1」と入力して [スケール] をクリックします。
この操作を行うとクラスタがスケールダウンされ、[マネージド Pod] で Pod のステータスが更新されます。場合によっては、[更新] をクリックする必要があります。
シェルで Pod をスケールアップまたはスケールダウンする
- ブラウザの Cloud Shell タブに戻ります。
- 次のコマンドを実行して、Deployment に含まれる Pod のリストを表示します。
kubectl get deployments
出力:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 1/1 1 1 3m
- 次のコマンドを実行して、Pod のレプリカ数を 3 つに再度スケーリングします。
kubectl scale --replicas=3 deployment nginx-deployment
- 次のコマンドを実行して、Deployment に含まれる Pod のリストを表示します。
kubectl get deployments
出力:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 4m
タスク 3. Deployment のロールアウトとロールバックをトリガーする
Deployment のロールアウトがトリガーされるのは、Deployment の Pod テンプレート(.spec.template)が変更された場合のみです。たとえば、テンプレートのラベルやコンテナ イメージが更新された場合がこれに該当します。Deployment のスケーリングなど、その他の更新でロールアウトがトリガーされることはありません。
このタスクでは、Deployment のロールアウトをトリガーしてから、ロールバックをトリガーします。
Deployment のロールアウトをトリガーする
- 次のコマンドを実行して、Deployment に含まれる nginx のバージョンを更新します。
kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1
Deployment に含まれるコンテナ イメージが nginx v1.9.1 に更新されます。
- 次のコマンドを実行して、ロールアウトのステータスを表示します。
kubectl rollout status deployment.v1.apps/nginx-deployment
出力は次のようになります。
出力:
Waiting for rollout to finish: 1 out of 3 new replicas updated...
Waiting for rollout to finish: 1 out of 3 new replicas updated...
Waiting for rollout to finish: 1 out of 3 new replicas updated...
Waiting for rollout to finish: 2 out of 3 new replicas updated...
Waiting for rollout to finish: 2 out of 3 new replicas updated...
Waiting for rollout to finish: 2 out of 3 new replicas updated...
Waiting for rollout to finish: 1 old replicas pending termination...
Waiting for rollout to finish: 1 old replicas pending termination...
deployment "nginx-deployment" successfully rolled out
- Deployment のリストを取得して変更を確認します。
kubectl get deployments
出力は次のようになります。
出力:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 6m
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Deployment に含まれる nginx のバージョンを更新します
- Deployment のロールアウト履歴を表示します。
kubectl rollout history deployment nginx-deployment
出力は次の例のようになります。実際の出力はこの例と完全には一致しない場合があります。
出力:
deployments "nginx-deployment"
REVISION CHANGE-CAUSE
1
2 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 --record=true
Deployment のロールバックをトリガーする
オブジェクトのロールアウトをロールバックするには、kubectl rollout undo コマンドを使用します。
- 次のコマンドを実行して、nginx Deployment を以前のバージョンにロールバックします。
kubectl rollout undo deployments nginx-deployment
- 更新された Deployment のロールアウト履歴を表示します。
kubectl rollout history deployment nginx-deployment
出力は次の例のようになります。実際の出力はこの例と完全には一致しない場合があります。
出力:
deployments "nginx-deployment"
REVISION CHANGE-CAUSE
2 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 --record=true
3
- Deployment の最新リビジョンの詳細を表示します。
kubectl rollout history deployment/nginx-deployment --revision=3
出力は次の例のようになります。実際の出力はこの例と完全には一致しない場合がありますが、現在のリビジョンが nginx:1.7.9 にロールバックされたことが示されます。
出力:
deployments "nginx-deployment" with revision #3
Pod Template:
Labels: app=nginx
pod-template-hash=3123191453
Containers:
nginx:
Image: nginx:1.7.9
Port: 80/TCP
Host Port: 0/TCP
Environment:
Mounts:
Volumes:
タスク 4. マニフェストで Service のタイプを定義する
このタスクでは、アプリケーションへの受信トラフィックを制御する Service を作成して確認を行います。構成できる Service のタイプには、ClusterIP、NodePort、LoadBalancer がありますが、このラボでは LoadBalancer を使用します。
マニフェストで Service のタイプを定義する
LoadBalancer タイプの Service をデプロイする service-nginx.yaml というマニフェスト ファイルがあらかじめ用意されています。この Service は TCP ポート 60000 の受信トラフィックを、app: nginx というラベルが付いた任意のコンテナのポート 80 に配信するように構成されています。
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- protocol: TCP
port: 60000
targetPort: 80
- Cloud Shell で次のコマンドを実行して、マニフェストをデプロイします。
kubectl apply -f ./service-nginx.yaml
このマニフェストは Service を定義し、セレクタに対応する Pod にその Service を適用します。この例の場合、マニフェストはタスク 1 でデプロイした nginx コンテナに適用されます。このサービスは app: nginx というラベルが付いた任意の他の Pod(後から作成したものも含む)にも適用されます。
LoadBalancer の作成を確認する
- 次のコマンドを実行して、nginx Service の詳細を表示します。
kubectl get service nginx
出力は次のようになります。
出力:
NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE
nginx 10.X.X.X X.X.X.X 60000/TCP run=nginx 1m
- 外部 IP が表示される場合は、ブラウザの新しいタブで
http://[外部 IP]:60000/ を開き、ネットワーク ロード バランシング経由で提供されているサーバーを確認します。
注: Service の ExternalIP フィールドに値が入力されるまでに数秒かかる場合がありますが、これは正常な動作です。このフィールドに値が表示されるまで、数秒ごとに kubectl get services nginx コマンドを再実行します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
LoadBalancer タイプの Service をデプロイするマニフェスト ファイルをデプロイする
タスク 5. カナリア デプロイを実行する
カナリア デプロイは、新しいバージョンのアプリケーションをテストするために使用する独立した Deployment です。1 つの Service でカナリア デプロイと通常の Deployment の両方を実行できます。また、一部のユーザーをカナリア バージョンに振り向けることにより、新しいリリースに伴うリスクを軽減することも可能です。
あらかじめ用意されているマニフェスト ファイル nginx-canary.yaml は、メインの Deployment よりも新しいバージョンの nginx を実行する 1 つの Pod をデプロイします。このタスクでは、この新しい Deployment ファイルを使用してカナリア デプロイを作成します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-canary
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
track: canary
Version: 1.9.1
spec:
containers:
- name: nginx
image: nginx:1.9.1
ports:
- containerPort: 80
前のタスクでデプロイした nginx Service のマニフェストでは、ラベル セレクタを使用して、app: nginx というラベルが付いた Pod を対象にしています。通常の Deploymemt とこの新しいカナリア デプロイのどちらにも app: nginx ラベルが付いています。この Service により、通常の Deployment とカナリア デプロイの両方の Pod に受信接続が分散されます。カナリア デプロイのレプリカ(Pod)数は通常の Deployment よりも少ないため、カナリア デプロイを利用できるユーザー数は通常の Deployment よりも少なくなります。
- 構成ファイルに基づいてカナリア デプロイを作成します。
kubectl apply -f nginx-canary.yaml
- 完了したら、nginx と nginx-canary の両方の Deployment が存在することを確認します。
kubectl get deployments
- LoadBalancer Service の外部 IP に接続されているブラウザタブに戻り、ページを更新します。引き続き標準の「
Welcome to nginx」ページが表示されます。
- Cloud Shell に戻り、メインの Deployment のレプリカ数を 0 にスケールダウンします。
kubectl scale --replicas=0 deployment nginx-deployment
- 実行されているレプリカがカナリア デプロイのみになったことを確認します。
kubectl get deployments
- LoadBalancer Service の外部 IP に接続されているブラウザタブに戻り、ページを更新します。引き続き標準の「
Welcome to nginx」ページが表示され、Service によって自動的にトラフィックがカナリア デプロイに配信されていることがわかります。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
カナリア デプロイを作成する
セッション アフィニティ
ラボで使用されている Service の構成では、1 つのクライアントから送信されるすべてのリクエストが常に同じ Pod に接続されるとは限りません。各リクエストは個別に扱われるため、通常の nginx Deployment に接続される場合もあれば、nginx-canary Deployment に接続される場合もあります。
カナリア リリースで機能が大きく変更されている場合、リクエストごとに接続先のバージョンが異なると、問題が発生する可能性があります。クライアントの最初のリクエスト時に、以降の全接続に使用される Pod を決定する必要がある場合、Service の仕様で sessionAffinity フィールドを ClientIP に設定することによってこの問題を回避します。
例:
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: LoadBalancer
sessionAffinity: ClientIP
selector:
app: nginx
ports:
- protocol: TCP
port: 60000
targetPort: 80
ラボを終了する
ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Skills から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。
星の数は、それぞれ次の評価を表します。
- 星 1 つ = 非常に不満
- 星 2 つ = 不満
- 星 3 つ = どちらともいえない
- 星 4 つ = 満足
- 星 5 つ = 非常に満足
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。
Copyright 2026 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。