CKAD 合格したのでTIPSを書く

## tl;dr
* CKAD-JPじゃなくても問題文は日本語が選べた
* 解き方だけじゃなくて確認の仕方もセットで覚えたほうがいい
* 時間配分は大事
    * ラスト5分からの数分で1問解けたりした。最後まで諦めない
* Don’t panic

## 前提
* Linuxホストの構成管理 や Webサービスの保守開発を業務で行っています。
* docker は 開発環境の準備や CI/CD のために少し触ってる程度です。
* k8s 自体はあまり触ったことがなく、helm で 起動したりする程度です。

## 結果
* 66点合格のところ9割は取れてたみたいです
* 全問回答はできていたけれど、後半 どうもうまく確認ができていないのが1つあったので、多分それを落としました

## 所管
* killer.sh と udemy をしていれば やり方はわかる
* わからないものは ドキュメントを調べれば良いので問題ない
* が、 この設定でうまく完了しているかどうかの確認の仕方は調べておかないとわからない
    * ある namespace の中で hoge:8000 に接続ができるか の確認は curl をするだけの pod を作ればいいんだが、
    * あるコンテナの中に入ってこのコマンドがうまく動いてるか確認したい とか
    * /tmp/hoge/fuga にちゃんとファイルが出力されてるか確認したい とか思ったときにスムーズにできるかどうかが大事
* pod で 任意の複数のコマンドを 一気に実行する方法とか while loop とかをやろうとするのに 散々 validation エラーが出て心が折れそうになった
* 時間がないというのはそのとおりで ドキュメントにある記述例をそのままコピペするレベルであったとしても、ある一つtypoや勘違いがおきるとハマって大変なことになりそうだった

## したこと
### udemy
https://www.udemy.com/course/certified-kubernetes-application-developer/
鉄板だと思います。セール時には千円ちょいで買えます。

ハンズオン環境がついていて、 4択の問題に答えたり 要件通りのpod や deployment などを作成するのを体験できるので、とても有用です。

とりあえず一通り 動画を見て、ハンズオンをして、ハンズオンの回答も見て、あ、そういう操作もあるのね？ふむふむとしました。

全くの予備知識がなくて、この動画の内容だけを学んでも大変かもしれませんが、動画 + ハンズオン環境のおかげで理解が深まると思います。

### killer.sh

https://killer.sh/


* CKADの受験料に同梱されています。
  * linuxfoundation の Exam Preparation Checklist の Schedule an Exam あたりから飛べました。
  * https://training.linuxfoundation.org/ja/blog/linux-foundation-kubernetes-certifications-now-include-exam-simulator/

* 多分本当の試験より難しいです。
  * 本番さながら 19問出題され、部分点込みで細かく採点されます。
  * 回答時間が過ぎても操作できるので、とりあえず採点後 NG だったところも抑えたり
  * 終了後 模範解答がもらえるので、試験直前にも見返すなどしました。

### それ以外
* 体験談を見てると、これを読もう、これをやろうみたいなのもあったんですが、 killer.sh を二時間ガチでやって燃え尽きたので、やってません。
* あとは部屋を片付けるのが一番大変でした。

## TIPS
### 試験
* 予約した試験時刻ピッタリから開始するわけではない
    * 15分前から開始できるとあるが、試験管は開始10分にならないと来ませんでした。
    * また、部屋のチェックや身分証の確認などなどを英語のテキストチャットでやり取りするのに20-30分かかったと思います。
* 試験官とのやり取り
  * テキストチャットなので、焦らずOK.  OK とか thankyou とか i see hogehoge みたいな ので理解してくれた. 
        * 伝わってないな。というとき めっちゃ同じ文章を送ってくるので焦らないように。
  * また、試験の残り時間は プログレスバーでしか示されないので 後半 what time remain hogehoge とか適当に投げかけたら 33 min だよ！って教えてくれました。 
        * また、 そのおかげか、 15 min だよ 4 min だよ！ ってリマインドまでしてくれました。
* 覚えてる範囲で聞かれたこと
      * 追加のディスプレイを利用するか?
      * 身分証を見せてくれ
      * キーボード laptop の下を見せてくれ
      * ゆっくり机の上を見せてくれ
      * ゆっくり机の下を見せてくれ
      * 1,2歩下がって机全体を見せてくれ
      * 部屋の4壁を見せてくれ
      * 引いて？部屋全体を見せてくれ 
          * (pan と言われたので カメラを振り回してしまったので、何度もコピペで言われる)
      * タスクマネージャを詳細表示ではなく簡易表示で他のアプリケーションを動かしてないか見せてくれ
      * 画面共有されてない外部モニタがないか、画面共有ダイアログを開いてくれ
* 伝えてもらえたこと
      * 画面上にメモ帳があるよ 動かせるよ
      * メモ帳の内容は試験が終わったら消えるよ
      * 追加の1タブでドキュメントが見れるよ
      * 透明なラベルを剥がした飲み物が飲めるよ
      * 休憩したいときは Web UI から Request してくれ
      * 試験を終わりたいときも Web UI から Request してくれ
      * 何かあればテキストチャットをWeb UI から呼び出してくれ

* CKAD-JPじゃなくても問題文は英語/日本語/中国語から選択可能で、試験中に切り替えられる
    * なので、英語わかんない！というときは日本語で確認するなどできて有用でしたが、日本語のニュアンスが怪しい場合があるので、基本は英語で解きました。
    * 問題文に慣れているほうが良いと思います
* 合格結果は 予約してた試験開始時刻の24時間後に送られてきました。

### kubectl 
* k8s の基本的な利用方法は別として、今回の勉強を通じて学んだ便利な使い方 分け方はどれだけ使ったかの主観

#### MUST -- 多分使えないと詰む
* ```--dry-run=client -o yaml```
    * これで yaml を作って それを改変していくのが安定です。 
    * スクラッチする必要ないです。
* ```kubectl create hoge fuga```
    * pv,pvc,sc 以外なら 大体 これで雛形が作れます。 
* ```kubectl run hoge fuga```
    * pod を作る となればこれ
* ```kubectl export deploy....```
    * kubectl create svc をするよりは export のほうが 大体便利です。
    * どうせ dry-run して あとで改変するので
* ```kubectl edit hoge```
    * svcのセレクターを変えるとかならこれで
    * 動いてるpod は 改変できないので yaml を書き出して delete && create になります
* ```kubectl hogefuga -n namespace```
    * たいてい namespace を指定したりする必要があるので必須です。
    * また、 context の 変更が指示されることがあります

#### SHOULD -- なくてもどうにかなるかもしれないけどわかると便利
* ```kubectl get all -A```
    * 全部の全部(一部含まれないものもある) を出す
* ```kubectl explain pod.spec.hoge.fuga```
    * 大体合ってるはずだけど何かが足らないみたいなときはこれを使ってキーの高さがあってるかと子供の構造を確認します。
* ```kubectl explain pod --recursive``` 
    * command なのか commands なのか とか細かいキーがわからなかったり そもそも 構造が全くわからないときに使います。
* ``` kubectl delete pod hoge --force```
    * force をつけてあるとすぐ消されるので便利
* ``` kubectl run tmp --rm -i --image=nginx:alpine --restart=Never -- curl hoge ```
    * temporary な pod を作って 実行する
    * 正常に実行が完了した場合は 完了時に削除される
    * そうでないと、毎回 作って消し手をしないといけなくて大変手間
    * secret を volumes で mount してる場合など の確認にも有用

#### MAY -- たまに便利かも
* ```kubectl get pod --show-labels```
* ```kubectl label pod -l app=hoge```
    * 大量のpod に label を追加したい
* ```kubectl annotate pod -l app=hoge ```
    * 大量のpod に anotation を追加したい

### 他
* chrome の カスタムプロファイル
    * CKAD 受験専用のプロファイルを入れておけば何かと変な動きをしなくて良い
    * デスクトップ共有はブラウザのみだけでなく全部が共有されるので、壁紙とかデスクトップとかすべて整理しておくべき
* vim の VISUAL BLOCK編集
    * https://atmarkit.itmedia.co.jp/ait/articles/1106/15/news127.html
    * YAML の indent 変更するのに有用だった

## 参考にした記事

https://www.infracloud.io/blogs/prepare-cka-ckad-certification/

https://medium.com/sreake-jp/pass-the-cka-exam-4a19b8fab8b6

https://ryusa.hatenablog.com/entry/2021/05/16/113345

https://qiita.com/nsega/items/bd17363583c04f49847a

https://qiita.com/sotoiwa/items/3509ca3d18d1bed00dee

https://uzimihsr.github.io/post/2020-08-17-ckad/