CKA受験ログ

# はじめに
## この記事の内容
CKAを受け、無事合格に至ることができたので合格に向けて必要と思われることと、受けるまでにやったことをログに残しておきたいため書いてみました。
試験に向け、とりあえずこれだけやっておけば大丈夫では？と思ったのは

- [公式ページ](https://kubernetes.io/)でのググり力をつけておく
- `kubectl --help` で表示されるコマンドがどんなコマンドかわかるようにしておく
- kubeadmを用いて一度は自前のクラスタを組んでおく

の3つだけやっておけば、最低限求められる技能としては網羅できている気がします。
下にいろいろと書いていますが、つまりは一意見として**CKA受かるためにはこれら3つをやっておけば行けると思います**、ということを書いています。


## 筆者の経験値は？
kubernetesに関しては全く触ったことはありませんでした。
業務としてはインフラエンジニアとして働き始め、オンプレ環境でOS周りの構築を行うことを半年ちょっと行ってきた身です。
機械言語に関してはshell、python、JSなどをかじっています。
コンテナ関連技術としてdockerは触っていましたが、正直技術として理解しようとしていたわけではなく単純にツールとして使用していた感じです。
4月に初めにkubernetesに触りはじめ、5月末に一度受験、6月中旬に再受験して合格に至りました。

## なぜ受けた？
kubernetes自体に興味はあったものの外部的な要因として触る機会がなかったのですが、ある日会社が補助金を出してくれる案内が来たので、それを機に受験を計画しました。

## 合格までに何をした？

自分の場合は

- [kubernetes-the-hard-way](https://github.com/kelseyhightower/kubernetes-the-hard-way)
- [CKAD用のエクササイズ](https://github.com/dgkanatsios/CKAD-exercises)
- 一度受けてみる（スコア66%（/74%）で落ちる）
- [公式ドキュメント](https://kubernetes.io/)で復習
- 二度目を受験、スコア　89%で合格

と、合格までに4つのプロセスをたどりました。
ネットで探してみるとそれこそいろいろな人が同じように受験ログを出していたのですが、自分が真っ先に手を付けたのが[kubernetes-the-hard-way](https://github.com/kelseyhightower/kubernetes-the-hard-way)でした（ただ、ちょいちょい他のところでいわれているようにここで得られる知識は試験内容自体にはほとんどリンクしていないと感じました。。。）
すぐに終わるものと高をくくっていたので、これを終わらせてから構成した環境上でCLI操作を練習しようと考えていました。
自分は基本的にお金のかかる教材は買わないという謎のポリシーがあるので、クラウド上に環境を構築しようというチュートリアルの内容に反発し、自前の環境上で**手軽に**済ませようとdockerコンテナの上にkubernetesクラスタを構築する方針で奮闘していました。結果的には[構築できました](https://qiita.com/DaichiSasak1/items/6d23ebd1a82aeed23923)が、当初予定していた「4，5月の自粛期間中にクラスタを構築し、そのうえでCKA用にCLIの扱いに慣れてから受験しよう」という目論見は見事に外れ、5月の中旬くらいに慌ててminikubeで[CKAD用のエクササイズ](https://github.com/dgkanatsios/CKAD-exercises)を一巡します。
できれば自粛期間中に終わらせたかったので上記を一巡終えたところで一度受けたのですが、スコア66%（/74%）で見事に落ちました。しかしこれは強く薦めておきたいのですが、リテイクポリシーがあり2回目無料なので、**模試だと思って一度思い切って受けておいたほうがいいと思います**
一度受けてみて、結果一番上で挙げた

- [公式ページ](https://kubernetes.io/)でのググり力をておく
- `kubectl --help` で表示されるコマンドがどんなコマンドかわかるようにしておく
- kubeadmを用いて一度は自前のクラスタを組んでおく

の3つを（3つ目はやっていないけど）やっておけばいけるという結論に至り、そこから二度目を受験して89%の得点率で合格できました。

# 試験概要
## 問題について
内容の記載などはできませんが、試験のページに下記の様に書かれています。

- Application Lifecycle Management 8%
- Installation, Configuration & Validation 12%
- Core Concepts 19%
- Networking 11%
- Scheduling 5%
- Security 12%
- Cluster Maintenance 11%
- Logging / Monitoring 5%
- Storage 7%
- Troubleshooting 10%

kubernetes触っていないとなんのこっちゃという単語たちですが、

- Application Lifecycle Management 8%
`deployment`などのリソースを作り、サービスの公開（`expose`）までの操作ができるか

- Installation, Configuration & Validation 12%
⇒`kubeadm`を用いて自分でクラスタを作れるか

- Core Concepts 19%
⇒目的のためにどのリソース（`pod`, `deployment`, `volumes`, `namespace`等）を用いればいいか判断できるか

- Networking 11%
⇒podへの通信のためにどのコンポーネント（`coredns`や`Calico` 等）が足りていないのか判断できるか

- Scheduling 5%
⇒リソースに付加する`labels`の役割を理解しているか

- Security 12%
⇒`secrets`リソースを作成し、`pod`にマウント、もしくは変数化できるか

- Cluster Maintenance 11%
⇒`cordon`などの用途がわかるか

- Logging / Monitoring 5%
⇒`pod`のログの表示の仕方がわかるか

- Storage 7%
⇒Volumeに係わるリソースの作成、デプロイができるか

- Troubleshooting 10%
⇒クラスタが正常に動いていない原因を特定し、お手当てできるか

大体このようなことが求められていると感じました（結局kubernetesの中の単語たち使っていますが、、）。
これらのことが24問出題され、問題ごとに配点が明記されています。

sshやクラスタの切り替え(`kubectl config`)などは問題文中からそっくりコピペして使えるようになっているので、このあたりの操作に気を使う必要はありません。

クラスタから見たときに、試験の対象となる範囲は大体下記で緑破線枠で囲ったような範囲になるかなと思います（[元画像](https://github.com/kubernetes/kubernetes/blob/release-1.1/docs/design/architecture.md)）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368438/609a5562-1e49-2e12-6180-0625c06943c6.png)

問題によっては`pod`の中に入ったりなどもあるかもしれませんが、kuberenetesを構成している各コンポーネントを直接触ったりなどのレベルまで関わることはないかなと思います。



## 受験した所感
#### 一度目を受けて
一度目を受けたときはtmuxを用い、片方でリソースの作成、編集を行いながら片方で`kubectl explain`コマンドで調べつつ進める。というやり方をしていました。
が、tmuxを用いた場合、大きい標準出力があると途端に画面が崩れてしまいストレスとなることと、必要なメモや情報は試験の機能として用意されているので正直あまり画面分割などを行う必要ないと感じました。
試験後に公式ページでよくわからなかった問題について復習した結果、tmuxを用いなくても一画面、公式ページを参照で進めるのが一番効率いいという結論に至りました。
#### 時間について
大体受験ログ系の物では「時間がないから工夫しろ」みたいなことが書かれているのですが、個人的には問題文の内容がちゃんと読み取れればそれほど時間が切迫するような内容ではないかなという感じです。
下記`alias`くらいは設定しておいてもいいかなとは思いますが、ぶっちゃけそれほど変わらないと思います。

```bash
$ alias 'k=kubectl'
$ alias 'kd=k describe'
$ alias 'kw=k get po -o wide -w'
```


## 試験を受けてタメになったと感じた点
- `kubectl`を用いたアプリケーションの作成方法など、ツールとしてのkubernetesの使用方法がわかる
- kubernetes-the-hard-wayなどに触れる動機付けとなる。
- 付随してコンテナを実現する技術（cgroup, namespace, cni）についてもハンズオンで学ぶ動機づけとなる。
- `kubernetes`、`kubeadm`のありがたみを肌で感じるw

と、どちらかというと試験内容というよりはkubernetesを実現している技術に触れるための、一つの動機づけとしてとてもありがたく感じました。ただ当たり前のことながら上記のことは**本試験というよりkubernetes-the-hard-wayの内容**ですので、kubernetesを使いたいというよりはkubernetes自体に興味があるという人は試験ではなくkubernetes-the-hard-wayを掘り下げて行うことをお勧めし、そうではなくkubernetesというツールの利用方法が知りたいという場合にはこの試験に向けて動くといいと思います


# さいごに
CKA受験を計画し、脇道に逸れていくつか記事を書きました。

- [centOS8でDockerコンテナから名前解決ができない話をnftコマンドで解決する](https://qiita.com/DaichiSasak1/items/11687a3c613c8811350c)
- [コンテナ技術に必須のネットワーク名前空間(Network Namespace)をiproute2で操作する](https://qiita.com/DaichiSasak1/items/64732bb24826d38f8091)
- [k8s-the-hard-way in Docker ~ Dockerコンテナ内でkubernetes-the-hard-wayしてみた](https://qiita.com/DaichiSasak1/items/6d23ebd1a82aeed23923)

すべてkubernetes-the-hard-wayをコンテナ上で完結させるために奮闘した結果生み出された記事たちです。
そのためここまでに何度も言ってきたようにCKAとはほとんど直接の関係がない内容となっていますが、もし興味持ってくれた方いたら一読していただければ幸いです。
以上です。