チェックポイント
Create a new Cluster
/ 25
Create the StorageClass
/ 25
Deploying the Headless Service and StatefulSet
/ 25
Scaling the MongoDB replica set
/ 25
StatefulSet を使用して Kubernetes で MongoDB データベースを実行する
このラボは Google のパートナーである MongoDB と共同開発されました。アカウント プロフィールでプロダクトの最新情報、お知らせ、オファーの受け取りを有効にすると、お客様の個人情報が本ラボのスポンサーである MongoDB と共有される場合があります。
GSP022
概要
Kubernetes は、コンテナ化されたアプリケーションの複雑な実行に対処するためのオープンソースのコンテナ オーケストレーション ツールです。Kubernetes アプリケーションは、さまざまなカスタマイズやインテグレーションを提供する Google Cloud コンピューティング サービスである Kubernetes Engine
を使用して実行できます。このラボでは、StatefulSet を使用した MongoDB データベースの設定方法を学び、Kubernetes の実践的な経験を積むことができます。ステートレス サービス(コンテナ)上でステートフル アプリケーション(データベース)を実行することは一見矛盾しているようですが、このラボで実践演習を行うと、そうでないことがすぐにわかります。具体的には、いくつかのオープンソース ツールを使用して、Kubernetes とステートレス サービスがどのように密接に結びついているかを説明します。
ラボの内容
このラボでは、次のことを学びます。
- Kubernetes クラスタ、ヘッドレス サービス、StatefulSet をデプロイする。
- Kubernetes クラスタを MongoDB レプリカセットに接続する。
- MongoDB レプリカセットのインスタンスをスケールアップ、またはスケールダウンする。
- 環境をクリーンアップし、上記のサービスをシャットダウンする。
要件
このラボは上級者向けです。Kubernetes やコンテナ化されたアプリケーションについて知識があること、また Google Cloud Shell、Google Cloud SDK、MongoDB の使用経験があることが推奨されます。これらのサービスを短期間で習得するには、以下のラボをご確認ください。
準備ができたら、下にスクロールしてラボ環境を設定します。
設定
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
- ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。
- [Google コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。 -
必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。
-
[ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。
重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。 -
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後このタブで Cloud Console が開きます。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
- Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン をクリックします。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
-
[承認] をクリックします。
-
出力は次のようになります。
出力:
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
出力:
出力例:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
タスク 1. コンピューティング ゾーンを設定する
このラボでは、gcloud コマンドライン ツールを使用してサービスをプロビジョニングします。
- クラスタ内の仮想マシンがすべて同じリージョンに作成されるように、Kubernetes クラスタを作成する前にコンピューティング ゾーンを設定することが必要になります。ここでは、Cloud Shell で
gcloud config set
コマンドを実行して、ゾーンを次のようにに設定します。
タスク 2. 新しいクラスタを作成する
ゾーンが設定されたので、コンテナの新しいクラスタを作成します。
- 次のコマンドを実行して、
hello-world
という名前のクラスタをインスタンス化します。
このコマンドによって、2 つのノード、つまり仮想マシンが含まれる新しいクラスタが作成されます。ノードの数、デフォルトの権限、その他の変数を変更するには、追加のフラグを付けてこのコマンドを構成します。詳細については、gcloud container clusters create のリファレンスをご覧ください。
クラスタの起動には数分かかる場合があります。起動すると次のような出力が表示されます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 3. 設定
これでクラスタが起動して実行されたので、MongoDB と統合します。データの高可用性と冗長性を確保するためにレプリカセットを使用しますが、これは本番環境のアプリケーションを実行する際には必須です。
設定するには、以下の操作を行う必要があります。
- MongoDB レプリカセットとサイドカー(またはクラスタのユーティリティ コンテナ)をダウンロードする。
- StorageClass をインスタンス化する。
- Headless Service をインスタンス化する。
- StatefulSet をインスタンス化する。
- 次のコマンドを実行して、GitHub リポジトリから MongoDB と Kubernetes のレプリカセットのクローンを作成します。
- クローンが作成されたら、次のコマンドで
StatefulSet
ディレクトリに移動します。
ファイルをダウンロードし、上記のディレクトリに移動したことを確認したら、Kubernetes の StorageClass
を作成します。
StorageClass を作成する
StorageClass
で、データベース ノードにどの kind のストレージを使用するかを Kubernetes に対して示します。Google Cloud では、SSD とハードディスクの 2 種類のストレージから選択できます。
StatefulSet
ディレクトリ内を(ls
コマンドを実行して)検索すると、Azure と Google Cloud のそれぞれに SSD と HDD の構成ファイルがあるのがわかります。
- 次のコマンドを実行して、
googlecloud_ssd.yaml
ファイルを確認します。
出力:
この構成によって、SSD Volume に基づく「fast」という新しい StorageClass が作成されます。
- 次のコマンドを実行してこの StorageClass をデプロイします。
StorageClass が構成されたので、StatefulSet は自動的に作成される Volume をリクエストできるようになりました。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 4. Headless Service と StatefulSet をデプロイする
ファイルを見つけて内容を調べる
- Headless Service と StatefulSet の操作に進む前に、この両方が格納されている構成ファイル(
mongo-statefulset.yaml
)を開きます。
出力は以下のようになります(Headless Service や StatefulSet のコンテンツへのポインタはありません)。
- ファイルから次のフラグを削除します(49、50 行目)。
- このセクションが次のようになっていることを確認します。
- Ctrl+X > Y > Enter キーを押して nano テキスト エディタを終了します。
Headless Service: 概要
mongo-statefulset.yaml
の最初のセクションは、headless service
を示しています。Kubernetes では、サービスは特定のポッドにアクセスするためのポリシーやルールを記述します。つまり、ヘッドレス サービスとは負荷分散を規定しないサービスのことです。StatefulSet と組み合わせると、ポッドにアクセスするための個別の DNS が提供されるため、すべての MongoDB ノードに個別に接続できます。yaml
ファイルでサービスがヘッドレスであるかどうかは、clusterIP
フィールドが None
に設定されていることで確認できます。
StatefulSet: 概要
mongo-statefulset.yaml
の 2 番目のセクションは、StatefulSet の構成を示しています。これはアプリケーションに不可欠なもので、MongoDB を実行するワークロードであり、Kubernetes リソースをオーケストレートします。yaml
ファイルを参照すると、StatefulSet の最初のセクションで StatefulSet オブジェクトについて記述しているのがわかります。次に、metadata セクションでラベルとレプリカの数を指定します。
今度は、terminationGracePeriodSeconds
によって、レプリカの数をスケールダウンしたときに Pod を正常にシャットダウンさせます。次に、2 つのコンテナの構成を示します。最初の構成で、レプリカセット名を構成するコマンドライン フラグ付きの MongoDB を実行します。また、MongoDB がデータを保存する場所である /data/db
に永続ストレージ ボリュームをマウントします。2 番目のコンテナはサイドカーを実行します。このサイドカー コンテナによって MongoDB レプリカセットが自動的に構成されます。前述のように、「サイドカー」はメインコンテナによるジョブとタスクの実行をサポートするヘルパー コンテナです。
最後に、volumeClaimTemplates
を記述しています。これは、ボリュームをプロビジョニングするために事前に作成した StorageClass への指示内容です。MongoDB レプリカごとに 100 GB のディスクをプロビジョニングします。
Headless Service と StatefulSet をデプロイする
Headless Service と StatefulSet の基礎について理解できたところで、今度はこれらをデプロイしてみましょう。
- この 2 つは
mongo-statefulset.yaml
にパッケージされているので、次のコマンドを実行すると両方を実行できます。
次の出力が表示されます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 5. MongoDB レプリカセットに接続する
これで、クラスタが稼働してレプリカセットがデプロイされたので、次に接続を行います。
MongoDB レプリカセットが完全にデプロイされるまで待つ
Kubernetes StatefulSet は Pod を順次デプロイします。つまり、MongoDB レプリカセットのメンバーが完全に起動し、バックアップ ディスクが作成されてから、次のメンバーが起動されます。
- 次のコマンドを実行して、3 つのメンバーすべてが起動していることを確認します。
出力 - 3 つのメンバーすべてが起動:
MongoDB レプリカセットを開始して表示する
この時点で、クラスタに 3 つの Pod が作成されています。これらは MongoDB レプリカセットの 3 つのノードに対応しています。
- 次のコマンドで表示されます。
出力:
-
3 つのメンバーがすべて作成されるまで待ってから先に進みます。
-
最初のレプリカセット メンバーに接続します。
これで、REPL
環境が MongoDB に接続されました。
- 次に
rs.initiate()
コマンドを実行して、デフォルト構成でレプリカセットをインスタンス化します。
- レプリカセットの構成を出力するために、
rs.conf
コマンドを実行します。
これにより、レプリカセット rs0
の現在のメンバーの詳細が出力されます。このラボで表示されるメンバーは 1 つだけです。すべてのメンバーの詳細を表示するには、nodepor やロードバランサなどの追加 Service を使用してレプリカセットを公開する必要があります。
- 「exit」と入力して Enter キーを押すと、
REPL
が終了します。
タスク 6. MongoDB レプリカセットをスケールする
Kubernetes と StatefulSet の大きな利点は、1 つのコマンドで MongoDB レプリカの数を増減できることです。
- レプリカセット メンバーの数を 3 から 5 にスケールアップするには、次のコマンドを実行します。
数分で、MongoDB Pod が 5 つになります。
- Pod を表示するには、次のコマンドを実行します。
出力は次のようになります。
- レプリカセット メンバーの数を 5 から 3 にスケールダウンするには、次のコマンドを実行します。
数秒で、MongoDB Pod が 3 つに戻ります。
- 次のコマンドで表示されます。
出力は次のようになります。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 7. MongoDB レプリカセットを使用する
ヘッドレス サービスに基づく StatefulSet の各ポッドには stable DNS 名があります。テンプレートは <pod-name>.<service-name>
の形式になります。
つまり MongoDB レプリカセットの DNS 名は次のようになります。
これらの名前はアプリケーションの接続文字列 URI で直接使用できます。
データベースの使用はこのラボでは取り扱いませんが、この場合、接続文字列 URI は次のようになります。
タスク 8. クリーンアップ
ラボ環境では、ラボが終了すると、すべてのリソースとプロジェクトは自動的にクリーンアップされて破棄されます。ここでは、実際の環境で作業する際の費用の節約とクラウドでのマナーのために、ご自分でリソースをクリーンアップする方法について説明します。
デプロイされたリソースをクリーンアップするには、次のコマンドを実行して StatefulSet、ヘッドレス サービス、プロビジョニングされたボリュームを削除します。
- 次のコマンドで StatefulSet を削除します。
- 次のコマンドで Service を削除します。
- 次のコマンドで Volume を削除します。
- 最後に、テストクラスタを削除します。
- Y キー、Enter キーを順に押して、テストクラスタの削除を続行します。
お疲れさまでした
Kubernetes Engine を使用すると、Google Cloud 上で効率的かつ柔軟にコンテナを実行できます。StatefulSet を使用すると、Kubernetes 上のデータベースなどのステートフル ワークロードを実行できます。次のことについて学習しました。
- Kubernetes StatefulSet を使って MongoDB レプリカセットを作成する
- MongoDB レプリカセットへ接続する
- レプリカセットをスケールする
クエストを完了する
このセルフペース ラボは、「Cloud Engineering」クエストの一部です。クエストとは学習プログラムを構成する一連のラボのことで、完了すると成果が認められて上のようなバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。このラボの修了後、このラボが含まれるクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能な全クエストについては、Google Cloud Skills Boost カタログをご覧ください。
次のラボを受講する
次のラボに進んでクエストを続けるか、以下のおすすめをご確認ください。
次のステップと詳細情報
- Kubernetes Engine について学習します。
- StatefulSet を使用した Kubernetes での MongoDB の実行に関するブログ投稿を読みます。
- インスタンスや vCPU の数、必要なメモリを料金計算ツールに入力し、特定のワークロードの実行にかかる費用を確認します。
- Google Cloud Marketplace で MongoDB 用の $500 のクレジットを無料で入手します - 新規のお客様のみ
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2023 年 10 月 9 日
ラボの最終テスト日: 2023 年 10 月 9 日
Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。