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

CKA — Kubernetes管理者

クラスタを調べて扱う

TT Labで続きを見る

目標

クラスターに初めて入ったときに行う7つのことを、手に覚えさせます。調査、ネームスペース、ラベルとアノテーション、コンテキストの切り替え、ノードへのラベル付け、kubectl explain、dry-runによるマニフェスト生成です。

なぜ重要なのか

CKAは120分で17問です。1問あたり7分です。マニフェストを最初から手で書いていると、時間が足りません。そのため、--dry-run=client -o yamlで骨格を取り出し、必要なフィールドだけを直す方法が、事実上の標準戦略です。

kubectl explainは、その次の半分です。試験会場で見られるドキュメントはKubernetesの公式ドキュメントだけですが、フィールド1つの正確なスペルと位置を確認するには、explainのほうがはるかに速いです。ラベルとアノテーションの違いも、同じ文脈です。ラベルはセレクターが選べる識別子なので、サービスやコントローラーが参照し、アノテーションは選べない付加情報なので、ツールがメタデータを載せて運びます。両者を取り違えて使うと、静かに何もつながりません。

ステップ

  1. ネームスペースcka-basicsを作成し、ラベルenv=labを付けてください。
  2. クラスターのすべてのノード名を、1行に1つずつ/root/cka-basics/nodes.txtに保存してください。ファイルには名前だけを含め、ヘッダーやnode/の接頭辞を含めないでください。
  3. cka-basicsにConfigMapapp-metaを作成してください。データはenv=lab、ラベルはtier=backend、アノテーションはowner=cka-studentです。
  4. 現在使っているclusterとuserをそのまま再利用しながら、デフォルトのネームスペースがcka-basicsであるコンテキストcka-basics-ctxを作成し、そのコンテキストに切り替えてください。
  5. ノードlab-node-1に、ラベルdisktype=ssdとtopology.kubernetes.io/zone=rack-a、アノテーションowner=cka-studentを付けてください。
  6. Podのトレラレーションのeffectフィールドの説明を、kubectl explainで取り出して/root/cka-basics/explain.txtに保存してください。
  7. dry-runで、Deploymentweb(イメージnginx:1.27、レプリカ3)のマニフェストを作成し、/root/cka-basics/web.yamlに保存してください。このステップでは、まだ適用しないでください。
  8. そのマニフェストをcka-basicsに適用し、Deploymentオブジェクトにラベルtier=backendを付けたあと、3/3 Readyを確認してください。

参考

ネームスペースを作成してラベルを付ける

ネームスペースcka-basicsを作成し、ラベルenv=labを付けてください。

ネームスペースを作成したあとにラベルを別途付けてもよく、最初からマニフェストに入れてもかまいません。ラベルはmetadata.labelsの下に入ります。

ノード一覧をファイルに取り出す

クラスターのすべてのノード名を、1行に1つずつ/root/cka-basics/nodes.txtに保存してください。ファイルには名前だけを含め、ヘッダーやnode/の接頭辞を含めないでください。

ファイルには、ノード名だけを1行に1つずつ入れる必要があります。出力からヘッダーやnode/の接頭辞を取り除く方法を考えてみてください。jsonpathのrangeや-o custom-columnsが役に立ちます。

ラベルとアノテーションを区別して付ける

cka-basicsにConfigMapapp-metaを作成してください。データはenv=lab、ラベルはtier=backend、アノテーションはowner=cka-studentです。

ラベルはセレクターで選べる識別子で、アノテーションは選べない付加情報です。保存される位置が違います(metadata.labelsとmetadata.annotations)。

kubeconfigのコンテキストを作成して切り替える

現在使っているclusterとuserをそのまま再利用しながら、デフォルトのネームスペースがcka-basicsであるコンテキストcka-basics-ctxを作成し、そのコンテキストに切り替えてください。

コンテキストは、cluster + user + namespaceの3つの組です。新しいclusterやuserを作る必要はなく、既存の名前をそのまま再利用してください。先にkubectl config get-clustersとget-usersで、名前を確認します。

ノードにラベルとアノテーションを付ける

ノードlab-node-1に、ラベルdisktype=ssdとtopology.kubernetes.io/zone=rack-a、アノテーションowner=cka-studentを付けてください。

ノードもオブジェクトなので、label/annotateコマンドがそのまま通用します。スラッシュを含むキーも、そのまま書いてかまいません。

kubectl explainでフィールドの説明を取り出す

Podのトレラレーションのeffectフィールドの説明を、kubectl explainで取り出して/root/cka-basics/explain.txtに保存してください。

explainは、ドット表記で入れ子のフィールドをたどります。Podのspecのトレラレーションの配列の中にあるフィールドを、指名してみてください。

dry-runでマニフェストを作成する

dry-runで、Deploymentweb(イメージnginx:1.27、レプリカ3)のマニフェストを作成し、/root/cka-basics/web.yamlに保存してください。このステップでは、まだ適用しないでください。

kubectl create系のコマンドに--dry-run=client -o yamlを付けると、APIには触れずにYAMLだけが出力されます。レプリカ数は、createのオプションで指定できます。

適用してラベルまで仕上げる

そのマニフェストをcka-basicsに適用し、Deploymentオブジェクトにラベルtier=backendを付けたあと、3/3 Readyを確認してください。

前のステップで作成したファイルを、そのまま適用します。ラベルは、Podテンプレートではなく、Deploymentオブジェクト自体に付ける必要があります。PodがReadyになるまで、少し時間がかかります。