
Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
- On the top left of your screen, click Start lab to begin
Create your cluster
/ 20
Create your pod
/ 30
Create a Kubernetes Service
/ 30
Scale up your service
/ 20
このハンズオンラボでは、これまで作成してきたコードを使って Kubernetes で実行される(Kubernetes Engine で動作する)複製アプリケーションを作成します。コードは、シンプルな Hello World node.js アプリケーションです。
次の図には、このラボで学習するさまざまな内容が示されており、各部がどう関連しているかの理解に役立ちます。図を参照しながら進めれば、終了する頃には内容をすべて理解できるようになります(現時点で理解できなくても問題ありません)。
Kubernetes はオープンソースのプロジェクト(kubernetes.io から入手可能)で、ノートパソコンから可用性の高いマルチノード クラスタ、パブリック クラウドからオンプレミスのデプロイ、仮想マシンからベアメタルまで、さまざまな環境で実行できます。
このラボでは、Kubernetes Engine(Google がホストし、Compute Engine で実行される Kubernetes の 1 バージョン)などのマネージド環境を使用するため、基盤となるインフラストラクチャの設定を気にせずに Kubernetes の操作に集中できます。
vim
、emacs
、nano
など)の使用経験があると役に立ちます。根底にあるコンセプトを理解できるよう、コマンドは手動で入力することをおすすめしますが、多くのラボで、必要なコマンドが含まれたコードブロックが提供されています。コードブロックのコマンドをコピーして、該当する場所に貼り付けることもできます。
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
[ラボの詳細] パネルでも [ユーザー名] を確認できます。
[次へ] をクリックします。
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
[ラボの詳細] パネルでも [パスワード] を確認できます。
[次へ] をクリックします。
その後次のように進みます。
その後、このタブで Google Cloud コンソールが開きます。
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
[承認] をクリックします。
出力は次のようになります。
出力:
出力:
出力例:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
1. Cloud Shell を使用して、Kubernetes Engine にデプロイするシンプルな Node.js サーバーを作成します。
vi
を使用していますが、Cloud Shell では nano
や emacs
も使用できます。Cloud Shell の仕組みに関するガイドの説明に沿って、CloudShell のウェブエディタ機能を使用することもできます。server.js
ファイルを保存します。node
実行可能ファイルがインストールされており、このコマンドでノードサーバーを起動することができます(このコマンドによる出力はありません)。8080
でプロキシ サーバーに送信します。新しいブラウザタブが開き、結果が表示されます。
次に、このアプリケーションを Docker コンテナにパッケージ化します。
Dockerfile
を作成します。Docker コンテナ イメージは他の既存のイメージから拡張することができるため、今回も既存の Node イメージから拡張します。この Docker イメージの「レシピ」は次のようになります。
node
イメージから起動する8080
を公開するserver.js
ファイルをイメージにコピーするDockerfile
を保存します。PROJECT_ID
は、コンソールやラボの [ラボの詳細] セクションに表示されるプロジェクト ID に置き換えます。すべてをダウンロードして展開するには時間がかかりますが、イメージ作成の進行状況は進捗バーで確認できます。
完了したら、新たに作成したコンテナ イメージから Docker コンテナをデーモンとしてポート 8080 で実行して、イメージをローカルでテストします。
PROJECT_ID
は、コンソールまたはラボの [ラボの詳細] セクションに表示されるプロジェクト ID に置き換えます。出力は次のようになります。
curl
を使用します。次のような出力が表示されます。
docker run
コマンドの詳細については、Docker run リファレンスをご覧ください。次に、実行中のコンテナを停止します。
出力は次のようになります。
[CONTAINER ID]
を前のステップで取得したコンテナ ID に置き換えて実行し、コンテナを停止します。コンソール出力は次のようになります(実際のコンテナ ID になります)。
イメージが意図したとおりに機能するようになりましたので、これを Docker イメージ用の非公開リポジトリである Google Container Registry に push します。このリポジトリには Google Cloud プロジェクトからアクセスできます。
[Do you want to continue (Y/n)?] というプロンプトが表示されたら、「Y」と入力します。
PROJECT_ID
は、コンソールまたはラボの [ラボの詳細] セクションに表示されるプロジェクト ID に置き換えます。初回の push は、完了するまで数分かかることがあります。進捗状況は進行状況バーで確認できます。
これで、プロジェクト全体で使用できる Docker イメージができました。このイメージには Kubernetes でアクセスし、オーケストレートすることができます。
gcr.io
)用の汎用ドメインを使用しています。独自の環境では、使用するゾーンとバケットを限定できます。詳しくは、 をご覧ください。これで、Kubernetes Engine クラスタを作成する準備が整いました。クラスタは Google がホストしている Kubernetes マスター API サーバーと一連のワーカーノードで構成されます。ワーカーノードは Compute Engine 仮想マシンです。
gcloud
を使用してプロジェクトを設定していることを確認します(PROJECT_ID
は、コンソールまたはラボの [ラボの] セクションに表示されるプロジェクト ID に置き換えます)。クラスタのビルド時に表示される警告は無視してかまいません。
コンソール出力は次のようになります。
または、コンソールでナビゲーション メニューを開き、[Kubernetes Engine] > [Kubernetes クラスタ] > [作成] を選択して、このクラスタを作成することもできます。
ナビゲーション メニュー > [Kubernetes Engine] を選択すると、Kubernetes Engine を搭載した、完全版の Kubernetes クラスタができていることを確認できます。
それでは、コンテナ化されたアプリケーションを Kubernetes クラスタにデプロイしてみましょう。ここからは kubectl
コマンドライン(Cloud Shell 環境で設定済み)を使用します。
下の [進行状況を確認] をクリックして、ラボの進行状況を確認します。
Kubernetes ポッドは管理とネットワーキングを目的に結合されたコンテナのグループで、1 つ以上のコンテナを含めることができます。ここでは、プライベート コンテナ レジストリに保存されている Node.js イメージで構築した 1 つのコンテナを使用します。このコンテナは、コンテンツの提供にポート 8080 を使用します。
kubectl run
コマンドで Pod を作成します(PROJECT_ID
をコンソールまたはラボの [接続の詳細] セクションに表示されるプロジェクト ID に置き換えます)。出力:
これで Deployment オブジェクトが作成されました。このオブジェクトは、ポッドを作成してスケーリングするためのおすすめの方法です。ここでは、hello-node:v1
イメージを実行する 1 つのポッドレプリカを新しい Deployment で管理します。
出力:
出力:
ここで、便利な kubectl
コマンドをいくつかお伝えします。いずれもクラスタの状態を変更しません。リファレンス ドキュメントの全文については、コマンドライン ツール(kubectl)をご覧ください。
トラブルシューティング用:
ここで、Pod に外部からアクセスできるようにする必要があります。
下の [進行状況を確認] をクリックして、ラボの進行状況を確認します。
デフォルトでは、ポッドにはクラスタ内の内部 IP からしかアクセスできません。hello-node
コンテナに Kubernetes 仮想ネットワークの外部からアクセスできるようにするには、Pod を Kubernetes Service として公開する必要があります。
kubectl expose
コマンドを --type="LoadBalancer"
フラグと組み合わせて使用すると、ポッドをインターネットで公開できます。外部からアクセスできる IP を作成するには、このフラグが必要です。出力:
このコマンドで使用しているフラグは、基盤となるインフラストラクチャで提供されるロードバランサ(この場合は Compute Engine のロードバランサ)を使うよう指定しています。Pod を直接公開するのではなく、Deployment を公開していることに注意してください。これによって、Deployment で管理されるすべての Pod でトラフィックをロードバランスする Service が作成されます(ここでは 1 つの Pod だけですが、後でレプリカを追加します)。
Kubernetes マスターによってロードバランサ、それに関連する Compute Engine 転送ルール、ターゲット プール、ファイアウォール ルールが作成され、Google Cloud の外部からこの Service に完全にアクセスできるようになります。
kubectl
をリクエストしてすべてのクラスタ Service を一覧で表示します。次のような出力が表示されます。
hello-node Service に対して 2 つの IP アドレスが表示されます。いずれもポート 8080 を使用しています。CLUSTER-IP
は内部 IP で、Cloud Virtual Network 内でのみ表示されます。EXTERNAL-IP
はロードバランスされた外部 IP です。
EXTERNAL-IP
が表示され、使用できるようになるまでには数分かかることがあります。EXTERNAL-IP
がない場合は、数分待ってからコマンドを再度実行します。http://<EXTERNAL_IP>:8080
を入力すれば、対象の Service にアクセスできるようになります。この時点で、コンテナと Kubernetes を利用することで、ワークロードを実行するホストを指定する必要がない、Service のモニタリングと再起動ができるなどのメリットが得られるようになりました。それでは、新しい Kubernetes インフラストラクチャを利用することで得られるその他のメリットについて見ていきましょう。
下の [進行状況を確認] をクリックして、ラボの進行状況を確認します。
Kubernetes の優れた特長の一つは、アプリケーションのスケールが容易なことです。急に容量を増やす必要が生じたとしても、レプリケーション コントローラに、Pod の新しい数のレプリカを管理するよう指示することができます。
出力:
出力:
4 つのレプリカがすべて作成されるまで、上記のコマンドを再実行します。
次のような出力が表示されます。
ここでは宣言的アプローチを使用しています。新しいインスタンスの起動や停止を行うのではなく、実行するインスタンスの数を宣言します。Kubernetes の調整ループによって、リクエストした内容と実際の状態が一致しているかどうかが照合され、必要に応じて調整が行われます。
次の図に、Kubernetes クラスタの状態をまとめます。
下の [進行状況を確認] をクリックして、ラボの進行状況を確認します。
本番環境にデプロイしたアプリケーションは、いずれかの時点でバグ修正や追加機能の実装が必要になります。Kubernetes を使用すると、ユーザーに影響を及ぼすことなく、新しいバージョンを本番環境にデプロイすることができます。
server.js
を開いてアプリケーションを変更します。server.js
ファイルを保存します。これで、インクリメントされたタグ(この場合は v2
)を含む新しいコンテナ イメージを構築し、レジストリに公開できます。
PROJECT_ID
はラボのプロジェクト ID に置き換えます。Kubernetes がレプリケーション コントローラを新しいバージョンのアプリケーションにスムーズに更新します。既存の hello-node deployment
を編集し、イメージを gcr.io/PROJECT_ID/hello-node:v1
から gcr.io/PROJECT_ID/hello-node:v2
に変更して、実行しているコンテナのイメージラベルを更新します。
kubectl edit
コマンドを使用します。テキスト エディタが開かれ、Deployment の yaml 構成全体が表示されます。ここでは yaml 構成全体を理解する必要はありません。構成の spec.template.spec.containers.image
フィールドを更新すれば、新しいイメージで Pod を更新するよう指示することになるというポイントが重要です。
Spec
] > [containers
] > [image
] を探し、バージョン番号を v1 から v2 に変更します。次のような出力が表示されます。
新しいイメージで新しい Pod が作成され、古い Pod は削除されます。
次のような出力が表示されます(上記コマンドの再実行が必要となる場合があります)。
更新の実行中、ユーザーがサービスを中断する必要はありません。しばらくすると、アプリケーションの新しいバージョンにアクセスできるようになります。ローリング アップデートの詳細については、ローリング アップデートの実行に関するドキュメントをご覧ください。
Kubernetes Engine クラスタを使うと、以上のようなデプロイ、スケーリング、更新の機能のおかげで、インフラストラクチャを気にせずアプリケーションに集中できるようになります。
クイズに挑戦して Google Cloud Platform に関する知識をチェックしましょう(正しいものをすべて選択してください)。
これで Kubernetes のハンズオンラボが終了しました。ここで学んだのは、このテクノロジーの一部にすぎません。ご自分の Pod、レプリケーション コントローラ、Service を使って実践を継続し、活動状況プローブ(ヘルスチェック)を確認してみてください。Kubernetes API を直接使用することもおすすめします。
Kubernetes Engine によるデプロイの管理を試すか、以下のおすすめのラボをご確認ください。
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2024 年 3 月 14 日
ラボの最終テスト日: 2024 年 3 月 14 日
Copyright 2025 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。
このコンテンツは現在ご利用いただけません
利用可能になりましたら、メールでお知らせいたします
ありがとうございます。
利用可能になりましたら、メールでご連絡いたします
One lab at a time
Confirm to end all existing labs and start this one