本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「Kubernetes が普段使いの人のための CKAD 対策の話」を再編集したものです。
はじめに
Kubernetesを普段業務で使っている方で、業務で培った技術力の証明のために CKA(Certified Kubernetes Administrator)や CKAD(Certified Kubernetes Application Developer)といった資格を受験したいと考える方っていると思います。
実際普段からKubernetesを触っている人がこれらの受験しようとすることは試験に合格しようとする上ではDockerやコンテナ等の前提知識が備わっている点や試験内容である実際にコマンドラインで問題を解くという点において大きなアドバンテージになります。
しかし、一方で試験の形式や問題を受ける場面は普段の Kubernetesを用いた運用や開発を行う場面と大きく異なっている点もあります。
例えて言うならば、普段業務でKubernetesを使うことはそれなりに力を使うので仕事をしているだけで筋肉が鍛え上げられていくのですが、試験では仕事で使うのとは違う筋肉を使うこともあるようなイメージです。
なので、試験を受ける場合はそちらで使うことになる筋肉も鍛えておかなければならないのですね。
今回は、Kubernetes系資格の中でも特にCKADにおいて普段から Kubernetesを業務で使っている人向けに受験に向けた学習のコツのようなものを共有できればと思います。
できる限りコマンドでリソースを作成、操作する
普段Kubernetesを用いて業務を行っているとき、アプリケーションを展開するときにはまずマニフェストファイルを作成してそれを kubectl apply -f <ファイル名>のようなコマンドで展開しているかと思います。
アプリケーションのkubernetesへのデプロイはできる限り宣言的な方法でコードで記述した方が分かりやすく、管理もしやすいためです。
一方で、このCKADという試験は、試験の内容でも書いたとおり、この試験の制限時間は2 時間でその間に15~20問の問題を解かなければなりません。そのため、1問にかけられる時間は6~8分になります。
そんな中で、ある程度複数の概念が組み合わさったようなリソースを展開しなければならなくなった場合、いくら公式ドキュメントが参照できると言っても、マニフェストを作成して適用する方法だと以下のような手順を踏むことになります。
1.Pod リソースを kubernetesドキュメントで検索する
2.Pod リソースのマニフェストのサンプルをviにコピペしてくる
3.サンプルマニフェストの余計な部分を削除し、Pod 名、イメージ名等を書き換える
4.個別の概念(livenessProbeとか envとか)について調べてマニフェストのサンプルを探す
5.それぞれの概念のマニフェストのサンプルをviにコピペしてくる
6.適用
この方法だとさすがに、1問を解くのに時間がかかりすぎてしまいます。
なので、できる限りkubectlコマンドでリソースを作る方法を覚えるべきです。
例えば、イメージだけを指定した簡単なpodを作成したい場合は以下のようなコマンドだけで一発でPodを作成できます。
kubectl run --image=
このコマンドを覚えて使うことは、マニフェストファイルの内容を丸覚えしていたとしてもそれをviで記述してkubectl applyしたり、あるいは忘れていた場合は kubernetes の公式ドキュメントで Pod リソースのページを開いてマニフェストのサンプルをコピペして余計な部分を消してリソース名とイメージ名を修正してそれからkubectl applyしたり・・・なんてするよりはずっと早いです。
このようなリソースの展開方法をドキュメントではImperative Commandsと呼んでいます。
これを習得しましょう。
一応この方法にもデメリットがあり、それはこのコマンドの引数だけでは設定できない部分もあることです。
例えばkubectl runコマンドだけでは作成するPodに対する livenessProbeやReadinessProbeの設定ができません。
他にも、ConfigMapリソースからenvを引っ張ってくる等の設定もkubectl runコマンドだけでは行えません。
これらはマニフェストファイルにパラメータを設定することでしか設定することができません。
ではImperative Commandは実際の試験で使えないのかというとそんなこともないです。
例えば、先程のそこそこ複雑な要件の Pod を作成する例で例えると、Imperative Commandを使うと以下ただ、な手順になります。
1.kubectl run
2.個別の概念(livenessProbe とか env とか)について調べてマニフェストのサンプルを探す
3.それぞれの概念のマニフェストのサンプルを vi にコピペしてくる
4.適用
1番のコマンドについては追加で説明するべき点が3つあります。
一つは、--out-put=clientのオプションの部分で、これによってコマンドの実行を実際には行わず、コマンドを実行した場合どのような結果になるかだけを取得します。
二つ目は、-o=yamlの部分です。これは、コマンドの実行結果を yaml 形式で出力するものです。podを作成するコマンドにこのオプションを実行すると、yaml形式で表現されたPodの情報が出力されます
この出力をコピペしてマニフェストを生成すると、適用するとコマンドで生成するのと同じリソースが作成できます。
三つめは、リダイレクト>です。ご存知の方はご存知かと思うのですが、これで出力結果をそのままファイルに出力できます。
これらを行うことで、マニフェストを1から作る際の手順の1~3を省略することができ、時間も大きく節約できます。
戦術としては、Imperative Commandsで設定できる限りの設定をオプションで行い、それで設定しきれない部分についてはマニフェストに吐き出して個別に調べて設定、適用するというような形になります。
Imperative Commandで設定できる項目については、kubectlコマンドのリファレンスに載っているので、試験に備えてブックマークしておくのであればここはマークしておくべきかと思います。
CKAD は制限時間がタイトな都合上、Imperative Commandsを使いこなせるようになることがほぼほぼ必須なところがあります。
ぜひ覚えましょう。
普段あまり使っていない分野の学習に集中する
普段Kubernetesを触っている人が CKAD のような試験の学習をすることは、それらを全く触っていない状態から学習を始めることよりははるかに初期の知識において優位にあるかと思います。
学習の方法としては様々な他の人が書いているようにCKAD-excerciseやudemyコンテンツのKubernetes Certified Application Developer (CKAD) with Testsあたりが有名どころですが、これらのコンテンツの全体を同じ濃度でやるよりは、自分の弱点になっている分野を重点的に学習した方が有利です。(当たり前といえば当たり前)
普段触っていても忘れていたり知らなかったりする部分を学ぶために一周は全体を流しても、二週目は普段触っていなかったり各種サンプル問題を解いてみて分かりづらかった部分を重点的に学習するのが効果的です。
自分の場合は Security ContextやVolume周り、NetworkPolicy周りが弱かったのでその周りを集中して学習しました。
また、2021年の試験の更新で試験範囲にhelmも加わったため、そこも重点的に学習しています。
コマンドラインでのファイル編集には慣れておく
普段業務でマニフェストを触る時、コマンドラインで扱えるvi以外で編集を行っている人も多いと思います。
ただ、CKA/CKAD本番では試験を受けるためのブラウザのタブとドキュメント確認用のタブを一つ開くことだけを許されているので、マニフェストファイルなどのファイル編集になれておく必要があります。
自分の場合viを使うことにしたのですが、普段そこまで vi 操作になれていなかったので自分用のショートカット集的なものを作って学習中はちょくちょく読み直していました。
自作のよく使うショートカットは以下の4つでした。
's,'ed
vi中でms,meコマンドを打ってマーク付けした間の行を削除(マークは目立つ形では表示されない)
's,'ey
vi中でms,meコマンドを打ってマーク付けした間の行をコピー(マークは目立つ形では表示されない)
pキーでペースト
u
アンドゥ
dd
1行削除
おわりに
ちなみにここまで対策を書いておいてなのですが、実は試験はまだ受けていません。来週あたりを予定しています。
こういった記事は合格してから書けよという話ですが、最近この辺りの話を周りの人とする機会ができたためそれに合わせて先に書いています。
ここまで書いておいてもし受験して落ちたりしたら、その時は笑ってやってください。
参考
・Managing Kubernetes Objects Using Imperative Commands
・kubectlのコマンドリファレンス
・CKAD-exercises
・Kubernetes Certified Application Developer (CKAD) with Tests
なゆむ/FIXER
最近インフラ始めました。
k8s社内最強を目指します。