TT Lab
はじめる
学ぶ 学習パス コース

CKA — Kubernetes管理者

PVCが実際にバインドされるのを見る

TT Labで続きを見る

このラボは本物のプロビジョナーがあるクラスター上で動きます

VM内のk3sでは、local-path動的プロビジョナーが実際に動いています。PVCを作成するとPVが自動で作られ、ファイルを書き込むと、Podを削除しても残ります。

CKAコースのほかのストレージのラボが動く偽のクラスターには、プロビジョナーがなく、PVCが永遠にPendingです。そのため、YAMLを書く練習までが、すべてでした。

最初の起動に2分ほどかかります。

目標

StorageClass・PVC・PVの3層がどのように噛み合うかを、状態の変化で確認し、WaitForFirstConsumerがなぜあるのかを、自分で見ます。

なぜ重要なのか

ストレージでは、「YAMLを正しく書いたか」よりも、「今なぜこの状態なのか」を読むことのほうが、はるかに多くあります。その中で最もよく誤解されるのが、Pendingです。

WaitForFirstConsumerのStorageClassでPVCを作成すると、わざとPendingのままになります。欠陥ではなく、設計です。ボリュームをどのノードに作るかは、そのボリュームを使うPodがどのノードに配置されるかによって決まりますが、Podがなければわからないからです。

先にボリュームを作ってしまうと、スケジューラーはPodをそのノードにしか配置できなくなり、空きがないときに、Podが永遠に起動しません。順序を逆にして、この問題をなくしたのが、WaitForFirstConsumerです。

これを知らないと、「PVCがPendingなのに、プロビジョナーが故障したのか」と、しばらく調べ回すことになります。

ステップ

すべて、cstネームスペースに作成します。

  1. local-pathStorageClassのプロビジョナーとバインドモードを確認して記録してください(保存先: /root/cst/sc.txt)。
  2. dataという名前のPVC(1Gi、ReadWriteOnce)を作成し、Podを付ける前の状態を記録してください(保存先: /root/cst/pending.txt)。なぜその状態なのかも書きます。
  3. writerというPodを作成して、そのPVCをマウントし、PVCがBoundに変わることと、自動で作られたPV名を記録してください(保存先: /root/cst/bound.txt)。
  4. ボリュームにファイルを書き込み、Podを削除して作り直して、データが残るかを確認して記録してください(保存先: /root/cst/persist.txt)。
  5. ReadWriteOnceが何を制限するかを確認して記録してください(保存先: /root/cst/accessmode.txt)。
  6. tempPVCをもう1つ作成して削除し、そのPVがどうなるかを記録してください(保存先: /root/cst/reclaim.txt)。
  7. webStatefulSet(レプリカ2)をvolumeClaimTemplates付きで作成し、PVCがいくつ作られるかを記録してください(保存先: /root/cst/sts.txt)。
  8. 次の3行と、3つの層の関係を書いてください(保存先: /root/cst/report.md)。binding_mode=、reclaim_policy=、sts_pvcs=の3行です。

参考

誰がボリュームを作るのか

local-pathStorageClassのプロビジョナーとバインドモードを確認して記録してください(保存先: /root/cst/sc.txt)。

kubectl get sc local-path -o yamlに、プロビジョナーとバインドモードがあります。

Pendingが正常な場合

dataという名前のPVC(1Gi、ReadWriteOnce)を作成し、Podを付ける前の状態を記録してください(保存先: /root/cst/pending.txt)。なぜその状態なのかも書きます。

PVCだけを作成して、Podはまだ作成しないでください。その状態が、このステップの観察対象です。

Podを付けるとボリュームができる

writerというPodを作成して、そのPVCをマウントし、PVCがBoundに変わることと、自動で作られたPV名を記録してください(保存先: /root/cst/bound.txt)。

PVCをマウントするPodを作成すると、プロビジョナーがPVを新しく作ります。その名前を確認してください。

Podを削除してもデータは残る

ボリュームにファイルを書き込み、Podを削除して作り直して、データが残るかを確認して記録してください(保存先: /root/cst/persist.txt)。

ファイルを書き込み、Podを削除し、同じPVCでPodを作り直して、読んでみてください。

ReadWriteOnceはノード単位

ReadWriteOnceが何を制限するかを確認して記録してください(保存先: /root/cst/accessmode.txt)。

「Pod1つだけ」ではありません。同じノードの複数のPodは、一緒に使えます。

PVCを削除するとPVはどうなるか

tempPVCをもう1つ作成して削除し、そのPVがどうなるかを記録してください(保存先: /root/cst/reclaim.txt)。

一時的なPVCを1つ作成して、Podを付けてバインドさせたあと、削除して、PVを確認してください。

Podごとにボリュームを別々に与える

webStatefulSet(レプリカ2)をvolumeClaimTemplates付きで作成し、PVCがいくつ作られるかを記録してください(保存先: /root/cst/sts.txt)。

volumeClaimTemplatesは、Podごとに、PVCを1つずつ作成します。名前のルールを確認してください。

何を学んだか

次の3行と、3つの層の関係を書いてください(保存先: /root/cst/report.md)。binding_mode=、reclaim_policy=、sts_pvcs=の3行です。

binding_mode=、reclaim_policy=、sts_pvcs=の3行と一緒に、3つの層の関係を書いてください。