arrow_back

Google Kubernetes Engine 用に永続ストレージを構成する

ログイン 参加
700 以上のラボとコースにアクセス

Google Kubernetes Engine 用に永続ストレージを構成する

ラボ 1時間 universal_currency_alt クレジット: 5 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
700 以上のラボとコースにアクセス

概要

このラボでは、PersistentVolume と PersistentVolumeClaim を設定します。PersistentVolume は、Kubernetes クラスタで利用可能なストレージです。PersistentVolumeClaim は、Pod が PersistentVolume にアクセスできるようにします。PersistentVolumeClaim を使用しないと Pod はほとんどの場合に一時的なものになるため、Pod のスケーリング、更新、移行が行われてもデータが維持されるようにするには PersistentVolumeClaim を使用する必要があります。

目標

このラボでは、次のタスクについて学びます。

  • (動的に作成される、または既存の)Google Cloud 永続ディスク用 PersistentVolume(PV)および PersistentVolumeClaim(PVC)のマニフェストを作成する
  • Google Cloud 永続ディスク PVC をボリュームとして Pod にマウントする
  • マニフェストを使用して StatefulSet を作成する
  • Google Cloud 永続ディスク PVC をボリュームとして StatefulSet にマウントする
  • Pod を停止して再起動した後に、StatefulSet 内の Pod が特定の PV に接続されていることを確認する

ラボの設定

ラボにアクセスする

各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google Cloud コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。

    ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。

    {{{user_0.username | "Username"}}}

    [ラボの詳細] パネルでもユーザー名を確認できます。

  4. [次へ] をクリックします。

  5. 以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。

    {{{user_0.password | "Password"}}}

    [ラボの詳細] パネルでもパスワードを確認できます。

  6. [次へ] をクリックします。

    重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  7. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後、このタブで Google Cloud コンソールが開きます。

注: Google Cloud のプロダクトやサービスのリストを含むメニューを表示するには、左上のナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。

Google Cloud Shell の有効化

Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。

Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

  2. [続行] をクリックします。

環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト 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. PV と PVC を作成する

このタスクでは、PVC を作成します。これにより、Kubernetes で自動的に PV が作成されます。

ラボの GKE クラスタに接続する

  1. Cloud Shell で次のコマンドを入力して、ゾーンとクラスタ名の環境変数を設定します。
export my_region={{{project_0.default_region|Region}}} export my_cluster=autopilot-cluster-1
  1. kubectl コマンドライン ツールのタブ補完を構成します。
source <(kubectl completion bash)
  1. kubectl がクラスタにアクセスできるよう構成します。
gcloud container clusters get-credentials $my_cluster --region $my_region

PVC でマニフェストを作成して適用する

ほとんどの場合、PV オブジェクトを直接構成したり、Compute Engine の永続ディスクを作成したりする必要はありません。代わりに PVC を作成することで、Kubernetes で自動的に永続ディスクをプロビジョニングできます。

hello-web-disk という名前の 30 GB の PVC を作成します。この PVC は、読み書き可能なボリュームとして一度に 1 つのノードにマウントできます。

  1. pvc-demo.yaml というファイルを作成し、次のコマンドを実行して nano で開きます。
nano pvc-demo.yaml
  1. nano が開いたら、以下を pvc-demo.yaml ファイルに貼り付けます。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: hello-web-disk spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi
  1. Ctrl+O キーの次に Enter キーを押し、編集したファイルを保存します。

  2. Ctrl+X キーを押して nano テキスト エディタを終了します。

  3. 現時点で PVC が存在しないことを確認するには、次のコマンドを実行します。

kubectl get persistentvolumeclaim

出力:

No resources found in default namespace.
  1. PVC を作成するには、次のコマンドを実行します。
kubectl apply -f pvc-demo.yaml
  1. 新たに作成された PVC を表示するには、次のコマンドを実行します。
kubectl get persistentvolumeclaim

出力の一部:

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE hello-web-disk Pending standard-rwo unset 15s 注: 次のステップが完了するまでステータスは保留(Pending)のままになります。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。

PV と PVC を作成する

タスク 2. Google Cloud 永続ディスク PVC を Pod にマウントして確認する

このタスクでは永続ディスク PVC を Pod に接続し、マニフェストの一部として、その PVC をボリュームとして Pod にマウントします。

PVC を Pod にマウントする

マニフェスト ファイル pod-volume-demo.yaml を作成して nginx コンテナをデプロイし、pvc-demo-volume を Pod に接続して、そのボリュームを nginx コンテナ内のパス /var/www/html にマウントします。このコンテナ内のディレクトリに保存されたファイルは永続ボリュームに保存され、Pod とコンテナがシャットダウンされて再作成された場合でも保持されます。

  1. pod-volume-demo.yaml というファイルを作成し、次のコマンドを実行して nano で開きます。
nano pod-volume-demo.yaml
  1. nano が開いたら、以下を pod-volume-demo.yaml ファイルに貼り付けます。
kind: Pod apiVersion: v1 metadata: name: pvc-demo-pod spec: containers: - name: frontend image: nginx volumeMounts: - mountPath: "/var/www/html" name: pvc-demo-volume volumes: - name: pvc-demo-volume persistentVolumeClaim: claimName: hello-web-disk
  1. Ctrl+O キーの次に Enter キーを押し、編集したファイルを保存します。

  2. Ctrl+X キーを押して nano テキスト エディタを終了します。

  3. ボリュームがマウントされた Pod を作成するには、次のコマンドを実行します。

kubectl apply -f pod-volume-demo.yaml
  1. クラスタ内の Pod を一覧表示します。
kubectl get pods

出力:

NAME READY STATUS RESTARTS AGE pvc-demo-pod 0/1 ContainerCreating 0 18s

Pod の作成後すぐに一覧表示を行うと、ボリュームがマウントされている間のステータスは「ContainerCreating」と表示され、その後「Running」に変わります。

  1. PVC が Pod 内でアクセス可能であることを確認するには、Pod へのシェルアクセスを取得する必要があります。シェル セッションを開始するには、次のコマンドを実行します。
kubectl exec -it pvc-demo-pod -- sh
  1. Pod でシンプルなテキスト メッセージをウェブページとして作成するには、次のコマンドを入力します。
echo Test webpage in a persistent volume!>/var/www/html/index.html chmod +x /var/www/html/index.html
  1. テキスト ファイルにメッセージが含まれていることを確認します。
cat /var/www/html/index.html

出力:

Test webpage in a persistent volume!
  1. 次のコマンドを入力して、nginx コンテナの対話型シェルを終了します。
exit

PV の永続性をテストする

クラスタから Pod を削除し、PV がまだ存在することを確認してから、Pod を再デプロイして PV の内容が変更されていないことを確認します。

  1. pvc-demo-pod を削除します。
kubectl delete pod pvc-demo-pod
  1. クラスタ内の Pod を一覧表示します。
kubectl get pods

出力:

No resources found in default namespace.

クラスタに Pod がなくなっているはずです。

  1. PVC を表示するには、次のコマンドを実行します。
kubectl get persistentvolumeclaim

出力の一部:

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE hello-web-disk Bound pvc-8...34 30Gi RWO standard-rwo unset 22m

PVC はまだ存在しており、Pod が削除された時点で削除されませんでした。

  1. pvc-demo-pod を再デプロイします。
kubectl apply -f pod-volume-demo.yaml
  1. クラスタ内の Pod を一覧表示します。
kubectl get pods

出力:

NAME READY STATUS RESTARTS AGE pvc-demo-pod 1/1 Running 0 15s

PV はすでに存在しており作成する必要がないため、今回は Pod がデプロイされるとすぐにステータスが「Running」に変わります。

  1. PVC が Pod 内で引き続きアクセス可能であることを確認するには、Pod へのシェルアクセスを取得する必要があります。シェル セッションを開始するには、次のコマンドを実行します。
kubectl exec -it pvc-demo-pod -- sh
  1. テキスト ファイルにまだメッセージが含まれていることを確認するには、次のコマンドを実行します。
cat /var/www/html/index.html

出力:

Test webpage in a persistent volume!

Pod をクラスタから削除して再作成しても、永続ボリュームの内容は削除されませんでした。

  1. 次のコマンドを入力して、nginx コンテナの対話型シェルを終了します。
exit

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。

Google Cloud 永続ディスク PVC を Pod にマウントして確認する

タスク 3. PVC で StatefulSet を作成する

このタスクでは、StatefulSet で PVC を使用します。StatefulSet は、Pod に一意の識別子が付与されるという点を除いて Deployment と似ています。

PVC を解放する

  1. StatefulSet で PVC を使用するには、現時点でその PVC を使用している Pod を削除する必要があります。次のコマンドを実行して Pod を削除します。
kubectl delete pod pvc-demo-pod
  1. Pod が削除されたことを確認します。
kubectl get pods

出力:

No resources found in default namespace.

StatefulSet を作成する

マニフェスト ファイル statefulset-demo.yaml を作成します。これによって、LoadBalancer サービス、nginx コンテナを含む Pod の 3 つのレプリカ、hello-web-disk という名前の 30 GB PVC 用の volumeClaimTemplate を含む StatefulSet が作成されます。nginx コンテナは、前のタスクと同様に、hello-web-disk という名前の PVC を /var/www/html にマウントします。

  1. statefulset-demo.yaml というファイルを作成し、次のコマンドを実行して nano で開きます。
nano statefulset-demo.yaml
  1. nano が開いたら、以下を statefulset-demo.yaml ファイルに貼り付けます。
kind: Service apiVersion: v1 metadata: name: statefulset-demo-service spec: ports: - protocol: TCP port: 80 targetPort: 9376 type: LoadBalancer --- apiVersion: apps/v1 kind: StatefulSet metadata: name: statefulset-demo spec: selector: matchLabels: app: MyApp serviceName: statefulset-demo-service replicas: 3 updateStrategy: type: RollingUpdate template: metadata: labels: app: MyApp spec: containers: - name: stateful-set-container image: nginx ports: - containerPort: 80 name: http volumeMounts: - name: hello-web-disk mountPath: "/var/www/html" volumeClaimTemplates: - metadata: name: hello-web-disk spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 30Gi
  1. Ctrl+O キーの次に Enter キーを押し、編集したファイルを保存します。

  2. Ctrl+X キーを押して nano テキスト エディタを終了します。

  • ボリュームを持つ StatefulSet を作成するには、次のコマンドを実行します。
kubectl apply -f statefulset-demo.yaml

出力:

service "statefulset-demo-service" created statefulset.apps "statefulset-demo" created

これで、statefulset-demo-service という名前の Service の背後で StatefulSet が実行されるようになりました。

StatefulSet で Pod の接続を確認する

  1. StatefulSet の詳細を表示するには、以下のように「kubectl describe」を使用します。
kubectl describe statefulset statefulset-demo

出力の末尾に示されているイベント ステータスに注目すると、Service と StatefulSet が正常に作成されているのがわかります。

Normal SuccessfulCreate 10s statefulset-controller Message: create Claim hello-web-disk-statefulset-demo-0 Pod statefulset-demo-0 in StatefulSet statefulset-demo success Normal SuccessfulCreate 10s statefulset-controller Message: create Pod statefulset-demo-0 in StatefulSet statefulset-demo successful
  1. クラスタ内の Pod を一覧表示します。
kubectl get pods

出力:

NAME READY STATUS RESTARTS AGE statefulset-demo-0 1/1 Running 0 6m statefulset-demo-1 1/1 Running 0 3m statefulset-demo-2 1/1 Running 0 2m
  1. PVC を一覧表示するには、次のコマンドを実行します。
kubectl get pvc

出力:

NAME STATUS VOLUME CAPACITY ACCESS hello-web-disk Bound pvc-86117ea6-...34 30Gi RWO hello-web-disk-st...-demo-0 Bound pvc-92d21d0f-...34 30Gi RWO hello-web-disk-st...-demo-1 Bound pvc-9bc84d92-...34 30Gi RWO hello-web-disk-st...-demo-2 Bound pvc-a526ecdf-...34 30Gi RWO

元の hello-web-disk がまだ存在しており、新しい StatefulSet の Pod 内で各 Pod 用に作成された個別の PVC を確認できます。

  1. StatefulSet の最初の PVC の詳細を表示するには、「kubectl describe」を使用します。
kubectl describe pvc hello-web-disk-statefulset-demo-0

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 PVC で StatefulSet を作成する

タスク 4. StatefulSet によって管理される Pod への永続ボリュームの接続性を確認する

このタスクでは、Pod を停止して再起動した後に、StatefulSet 内の Pod が特定の PV に接続されていることを確認します。

  1. PVC が Pod 内でアクセス可能であることを確認するには、Pod へのシェルアクセスを取得する必要があります。シェル セッションを開始するには、次のコマンドを実行します。
kubectl exec -it statefulset-demo-0 -- sh
  1. /var/www/html ディレクトリに index.html テキスト ファイルが存在しないことを確認します。
cat /var/www/html/index.html
  1. Pod でシンプルなテキスト メッセージをウェブページとして作成するには、次のコマンドを入力します。
echo Test webpage in a persistent volume!>/var/www/html/index.html chmod +x /var/www/html/index.html
  1. テキスト ファイルにメッセージが含まれていることを確認します。
cat /var/www/html/index.html

出力:

Test webpage in a persistent volume!
  1. 次のコマンドを入力して、nginx コンテナの対話型シェルを終了します。
exit
  1. PVC 上で、ファイルを更新した Pod を削除します。
kubectl delete pod statefulset-demo-0
  1. クラスタ内の Pod を一覧表示します。
kubectl get pods

StatefulSet が statefulset-demo-0 Pod を自動的に再起動していることがわかります。

注: Pod のステータスが再び実行中として表示されるまで待つ必要があります。
  1. 新しい statefulset-demo-0 Pod でシェルに接続します。
kubectl exec -it statefulset-demo-0 -- sh
  1. テキスト ファイルにまだメッセージが含まれていることを確認します。
cat /var/www/html/index.html

出力:

Test webpage in a persistent volume!

StatefulSet が Pod を再起動し、既存の専用 PVC を新しい Pod に再接続するため、その Pod のデータは確実に保持されます。

  1. 次のコマンドを入力して、nginx コンテナの対話型シェルを終了します。
exit

ラボを終了する

ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。

ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。

星の数は、それぞれ次の評価を表します。

  • 星 1 つ = 非常に不満
  • 星 2 つ = 不満
  • 星 3 つ = どちらともいえない
  • 星 4 つ = 満足
  • 星 5 つ = 非常に満足

フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。

フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。

Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。