tldr
CKADのテクニックを紹介します
はじめに
この前CKADを受けてみました。
kubernetesは今年から使い初め、試験があることもなにも知らなかったのですが、社内の勉強会で存在を知り、なんとなく受けてみました。
結果2回目でなんとか受かりました。
試験を受けてみてkubernetesの理解と同時にCKAD特有のちょっとしたテクニックも必要かなと感じたので、本記事でそれらをまとめていきます。
CKADとは
CNCFが運営しているkubernetesを使用する開発者向けの認定試験です。
CKADはCertified Kubernetes Application Developerの略です。
試験内容は
13% – Core Concepts
18% - Configuration
10% - Multi-Container Pods
18% – Observability
20% – Pod Design
13% – Services & Networking
8% – State Persistence
な感じでカテゴリ分けされて配点が割り振られており、「規定のパーセント」以上を取ることができれば、合格になります。「規定のパーセント」は(たぶん)毎回異なりますが、大体60-70点ぐらいです。私が受けた2回はどちらも66%でした。
難易度
そんなに難しくありません。kubernetesのユーザーとして普段kubectlを叩いている開発者なら少しの学習で合格できます。
ちなみに私は4月までは「kubernetes、なにそれ、どっかの島の名前?」という感じで、そこから開発で使いはじめ、kubectl apply
とkubectl get
をまあまあ使っている程度でした。
勉強方法
ここからが本題です。
ここからは大分個人的な意見なので、そのつもりで呼んでください。
どうやって勉強したか
とりあえず模擬試験をやってみて、わからなかったら回答を見て、その中で知識が足りなかったらドキュメントとかその他資料にあたるという、至ってシンプルな方法です。
模擬試験は以下を参考にしました。
https://github.com/dgkanatsios/CKAD-exercises
ここに書いてある問題を2週して、一回目の試験に挑み、62%で見事に落ちました。
さらに2週して75%で合格しました。
試験で使ったテクニック
やらなかったこと
-
screenとかtmuxとかは使わなかった
使った方が便利だとは思いますが、キーバインドを変えて使っているtmuxのデフォルト設定を覚え直して。。。みたいなことはしませんでした。テスト中余計なつまづきを減らしたかったという思いもあります。 -
用意されたメモはほとんど使わなかった
ターミナルでほとんど完結するので、よくわからなかった問題にあとから戻るために問題番号をメモった程度でした。
kubectlのTips
以下のページを大いに参考にさせていただきました。学習を始める前に呼んだのですが本当に助かりました。
https://github.com/twajr/ckad-prep-notes
各リソースを作成する
テスト中はささっとdeploymentやpodなどをささっと作成する必要があります。ドキュメントを見ていると結構時間を使ってしまいます。
以下のコマンドで各リソースのyamlファイルを作成したり、ただしい書き方かどうかをチェックすることができます。
基本形
# 標準出力
kubectl run nginx --image=nginx --restart=Never --dry-run -o yaml
# ファイルに出力
kubectl run nginx --image=nginx --restart=Never --dry-run -o yaml > mypod.yaml
RUNコマンドでPod, Deployment, job, cronJobの作成
これがとてもテストで役に立ちました。
run
コマンドのフラグを追加したりするだけでPod, Deployment, job, cronJobの作成を自由自在にできます。
下記の表に書いた通り、覚え方もとても簡単です。
自信を持って臨んだ1回目の試験でcronJobの作成が出題されたのですが、--schedule
のそれぞれの時間が何を指しいてるのかがわからず落としてしまいました。笑
リソース | kubectl run <name> |
--image=<name> |
--restart フラグ |
--schedule フラグ |
---|---|---|---|---|
deplyoment | kubectl run | --image= | ||
pod | kubectl run | --image= | --restart=Never | |
job | kubectl run | --image= | --restart=OnFailure | |
cronJob | kubectl run | --image= | --restart=OnFailure | --schedule="* * * * *" |
secretの作成
上記のリソースと同じですが、Secretを作成するときに役に立ちます。
kubectl create secret generic my-secret --from-literal=foo=bar -o yaml --dry-run > my-secret.yaml
実行中のリソースを編集する
テスト中は結構時間がかつかつになります。
例えば、「実行に失敗しているポッドがあるから直せ」という問題があった場合、
yamlファイルを落としてきて、誤った部分を書き直して、kubectl apply -f
を叩く
といったことはせずに下記コマンドで直接設定を直した方が早いです。
kubectl edit
追加したい設定がspec階層構造のどこに位置しているのかがわからない。
これはテスト中というよりも勉強中の方が多かったのですが、大量の設定項目がspec下に階層的に配置されており、yamlを作成するときに「どこに何を書けばいいんだっけ?」という自体に陥りやすかったです。
そういったときは以下のコマンドで内容を確認することができます。
また、勉強中に「へー、こんなspecがあったのか」と新しい発見ができます。
kubectl explain po.spec
# recursively
kubectl explain po.spec --recursive
最後に
少しでもこれを読んでくださった方々のお役にたてれば嬉しい限りです!