CKADに合格したので、CKAと比べながら体験を振り返ります

Certified Kubernetes Application Developer(CKAD)を先日受験し、84%で無事合格しました。CKA受験の時を振り返りながら体験をまとめます。

#CKAとCKAD
CKAとCKADの出題範囲を下記に転記しました。
ぱっと見の印象から分かるようにCKAはKubernetes Clusterのアーキテクチャについての理解が求められ、CKADはPodを中心とした理解について理解が求められます。

| CKA<br>(対策：★★★★★、難易度：★★★☆☆) | CKAD<br>(対策：★★☆☆☆、難易度：★★★★☆) |
|-----------|------------|
| Application Lifecycle Management 8%<br>Installation, Configuration & Validation 12%<br>Core Concepts 19%<br>Networking 11%<br>Scheduling 5%<br>Security 12%<br>Cluster Maintenance 11%<br>Logging / Monitoring 5%<br>Storage 7%<br>Troubleshooting 10%|Core Concepts 13%<br>Configuration 18%<br>Multi-Container Pods 10%<br>Observability 18%<br>Pod Design 20%<br>Services & Networking 13%<br>State Persistence 8%| 

各カテゴリの詳細は[cncf/carricuram](https://github.com/cncf/curriculum)に出題範囲が記載されています。
細かいことは書けませんが、「対策」と「難易度」を軸に所感からスターを勝手につけました。

・CKA
準備に幅広い知識が必要なので大変です。もちろん難しい問題もありますが、YAML格闘というより、何をすべきか？を知っているかが問われる印象です。どれだけ事前に準備して、広い知識を身につけていたかによるかが合格に関わると感じます。

・CKAD
PODに関わる内容が深く問われます。そのため、CKAで勉強したベースがあれば周辺知識は十分なので、そこまで準備は大変ではないと感じます。ただ試験では頭でわかっていてもYAMLと格闘する時間が長いので、慣れていないと難しいと感じます。（私は普段の業務でKubernetesを使っていないのでYAML格闘が難しく感じました。）

#合格に向けた勉強
###事前勉強
CKAの合格に向けて具体的にしたことは[CKAの体験記](https://qiita.com/sourjp/items/5822aa4c9e3a96caf225)を参照ください。
CKADの合格に向けては、下記２点を実施しました。

①[Kubernetes Certified Application Developer (CKAD) with Tests](https://www.udemy.com/course/certified-kubernetes-application-developer/)
CKA体験記にも記載しましたが、Mumshad Mannambeth先生の講座です。kode kloudを利用するハンズオン型のコースで、対策の勉強はほとんど済みます。また対策だけに焦点を当てているわけではなく、それを理解するために必要なアーキテクチャの解説も含まれるため、勉強という意味でも価値があると思います。ただCKAコースが済んでいたので、半分程度は復習でした。

②[dgkanatsios/CKAD-exercises](https://github.com/dgkanatsios/CKAD-exercises)
上記を実施後、お気に入りの整理と合わせて、CKAD対策で有名なGitHubの問題も一通り解きました。

CKADからスタートの場合はこれだと知識が不足すると思いますが、私のようにCKA->CKADのパスであればCKAで基礎的な知識は広く習得しているはずなので、十分な内容だと思います。

###事前準備
振り返りの意味を含めて、事前準備をしたほうがいい内容は下記だと感じています。

①大半のYAMLをCLIから作れる練習をする
CKADはコンセプト通りYAMLと格闘する時間が多いです。つまりどれだけ頭で描いたYAMLを早く作成するかが大事なポイントだと思います。受験に向けて一通りまとめた内容を記事([kubectl run/create/expose のススメ](https://qiita.com/sourjp/items/f0c8c8b4a2a494a80908)
)にしていますので、よかったら参考ください。

②kubectl editの使い所を考える
kubectl editによってリソースの変更ができますが、あまり普段使いはないかと思います。ただ、テストにあたっては重要なコマンドです。xxxリソースのyyyを変更しろという問題で、'kubectl get xxx -o yaml > xxx.yaml'してから、'vi xxx.yaml'でいじって、、とやっていると時間が足りません。どのリソースならeditでいじっても問題なくて、どれなら/tmp/ファイルから再作成したらいいかなどを慣れておくことが大事だと思いました。

③公式サイトを整理したブックマークを作る
YAMLを作成するにあたって、よっぽどのYAMLerでもない限りインデント含めて一言一句覚えておくことは困難だと思います。つまり何かリソースを作りたいときには公式サイトのこれを引っ張ってきて、ここをいじれば作れるといった自分なりの作成方法を確立しておくことが重要です。普段はIDEによっては補完してくれるものは多々あると思いますが、対策に向けては愚直な方法を身に付けるのが重要だと思います。

#Don't Panic
CKA, CKADの合格に向けての色々な体験記に"Don't panic"とあります。これは正にそうでした。
CKAでは一通り解けそうな問題を最後までといて１時間ほど余ったので、CKADでは１問ずつ丁寧にしていく配分でいけるだろうと臨みました。
結果、CKADの受験は最初は順調に進みましたが、最後に時間がなくなり軽くpanicに陥りました。

2/3ほど進み、時計を確認したら15時でした。受験時間が14-16時だったのであと１時間あると思いました。
しかし残り時間を確認したらあと50分でした。なぜなら受験は15分前から開始できるので、5分ほどで手続きが終わったので13:50に開始していたのです。
ここで50分で全部解けるか残り時間を計算しました。ですが、今挑んでいる問題の答えは頭で描けていますが、そのYAMLを作成するには、公式サイトのサンプルをいくつか引っ張り出す必要があり、5-10分は必要でした。つまり、仮に10分かかったとして残りの問題が同じようなレベルだと時間内に終わるか微妙なラインでした。

残りの問題が解きやすかったら勿体無いので、まずは問題だけ確認しようと次の問題に進みました。しかし次の問題で指示されているリソースが見当たらず、これも解けそうにないと感じました。原因はclusterが異なるだけだったのですが、これに気づくことができないほどの焦りでした。（CKADは全部で[4cluster](https://training.linuxfoundation.org/wp-content/uploads/2019/08/Important-Tips-CKA-CKAD-Master-8.5.19.pdf)あります。）

ここで「不合格」の言葉が頭をよぎり、panicに陥ります。所謂、頭真っ白です。

とりあえず落ち着きたいと思い、残りの問題をざっと読み、一番取っ付きやすそうな問題があったのでそれに挑みました。結論としてはこれがよかったです。解ける問題があったので、自分を鼓舞することができたので冷静になれました。（これを挑んでいる時も、普段ならしないオペミスが連続してpanicに拍車がかかったので本当に危うかったです。。）

色々な体験記を読んで、緊張してもpanicというほどでは、、と思っていましたが、まさか自分がそうなるとは思っていませんでした。今思うとだからこそのpanicなのかもしれません。

#まとめ
2019/4から勉強を開始し、約７ヶ月でCKAとCKADに合格できました。普段の業務では使っていませんが、学習を通してネットニュースや色々な勉強会で出てくる用語が深く理解できるようになったと感じます。次はK8Sをより深掘りすべくCRDなどの方面や、周辺システム(CI/CDなど)へ足を伸ばして行こうかと思います。

ありがとうございました。