Certified Kubernetes Administrator (CKA) 受験ログ

[Certified Kubernetes Administrator (CKA)](https://www.cncf.io/certification/cka/)を取得しました。試験の内容については書いてはいけないことになっているので、どんな準備をしたかを書いておきます。

受験時の試験のバージョンはカリキュラムが`v1.11.0`（October 2018）で、Handbookは`v1.15`でした。

## 経緯

2018年6月上旬、CKAという資格の存在を知り、いずれ受けてみたいと思う
7月上旬、kubeadmでKubernetesをインストールしてみる
8月下旬、「[Docker/Kubernetes 実践コンテナ開発入門](https://amzn.to/2RXEN9d)」を買う
9月上旬、CKAを受けることを決めて会社に受験料を出してもらうための社内プロセスを申請
9月下旬、「[Kubernetes完全ガイド impress top gearシリーズ](https://amzn.to/2PzL2Dp)」を買う
11月上旬、[Kubernetes The Hard Way](https://github.com/kelseyhightower/kubernetes-the-hard-way)をやってみる
11月上旬、試験日を決める
11月中旬、[Linux AcademyのCKA準備コース](https://linuxacademy.com/cp/modules/view/id/155)を実施
11月下旬、受験

## 自分のバックグラウンド

- IT業界は10年以上
- これまでの主な業務はアプリケーション・サーバー製品のテクニカルサポート
- アプリケーションの開発経験はさほどなし
- 2017年後半から[IBM Cloud Private](https://www.ibm.com/cloud-computing/jp-ja/products/ibm-cloud-private/)（IBMのオンプレKubernetes製品）に関わる
- 2018年は[IBM Cloud Private](https://www.ibm.com/cloud-computing/jp-ja/products/ibm-cloud-private/)のデリバリー案件に参画

## 試験に向けてやったこと

### 情報収集

以下の情報が特に参考になりました。

- [How Heptio Engineers Ace the Certified Kubernetes Administrator Exam](https://blog.heptio.com/how-heptio-engineers-ace-the-certified-kubernetes-administrator-exam-93d20af32557)
- [Tips to crack Certified Kubernetes Administrator (CKA) Exam](https://link.medium.com/mnfqAzZHCR)
- [CKA (Certified Kubernetes Administrator) に受かったので所感とか](https://link.medium.com/lylKGX9ICR)

他にもググると複数の受験記があり参考にさせていただきました。「[Kubernetes完全ガイド impress top gearシリーズ](https://amzn.to/2PzL2Dp)」の著者の方のもあります。

- [Certified Kubernetes Administrator (CKA) を取得してみた](https://tech.griphone.co.jp/2018/04/17/take-cka-exam/)
- [Certified Kubernetes Administrator (CKA) 取得した](https://blog.shiftky.net/certified-kubernetes-administrator/)
- [Certified Kubernetes Administrator(CKA) を取得しました](https://adtech.cyberagent.io/techblog/archives/3421)
- [Certified Kubernetes Administrator 試験に挑戦してみた。](https://adtech.cyberagent.io/techblog/archives/3086)

### 勉強

使用した主な教材は以下です。

- 書籍
  - [Docker/Kubernetes 実践コンテナ開発入門](https://amzn.to/2RXEN9d)
  - [Kubernetes完全ガイド impress top gearシリーズ](https://amzn.to/2PzL2Dp)
- [Kubernetes The Hard Way](https://github.com/kelseyhightower/kubernetes-the-hard-way)
- [Linux AcademyのCKA準備コース](https://linuxacademy.com/containers/training/course/name/certified-kubernetes-administrator-preparation-course)
- [kubernetes.ioのドキュメント](https://kubernetes.io/docs/home/?path=browse)

#### 書籍

日本語のKubernetes本は複数あり、その中でも「[Docker/Kubernetes 実践コンテナ開発入門](https://amzn.to/2RXEN9d)」と「[Kubernetes完全ガイド impress top gearシリーズ](https://amzn.to/2PzL2Dp)」はとてもよい本と思います。前者はDockerに関する内容も多く実践的で終始面白く読めてとても勉強になります。後者はタイトルの通りKubernetesに関して網羅的に詳細に記載されていて情報量がすごい本です。

どちらの本もおすすめで、特に前者の本には個人的にとても感動したのですが、CKAの試験対策という意味では後者がよりおすすめと思います。既にKubernetesについてだいたいわかっている人は、本を読まなくてもこのあと紹介する[Kubernetes The Hard Way](https://github.com/kelseyhightower/kubernetes-the-hard-way)と[Linux AcademyのCKA準備コース](https://linuxacademy.com/containers/training/course/name/certified-kubernetes-administrator-preparation-course)をやっておけばよいと思います。

#### Kubernetes The Hard Way

- https://github.com/kelseyhightower/kubernetes-the-hard-way

いろいろなところでおすすめされている、名前の通りKubernetesをあえて難しい方法でインストールするチュートリアルです。GCP上に公式のバイナリからKubernetes環境を構築します。各コンポーネントはコンテナではなくSystemdサービスとして動かします。

チュートリアル自体はコマンドのコピペでサクサクと進んでしまうので、疑問に思ったところを調べつつ、繰り返しチュートリアルを実施した方がよいと思います。2回実施しました。

GCPを利用したことがなければトライアルで300ドル分が利用できるので、その範囲内で無料で実施できると思います。

以下は自分がやったときのメモです。

- [Kubernetes The Hard Wayする](https://qiita.com/sotoiwa/items/2b22dc21d88c7822e44b)

#### Linux AcademyのCKA準備コース

- https://linuxacademy.com/containers/training/course/name/certified-kubernetes-administrator-preparation-course

オンラインのコースとしては、Linux Academy意外にも[CNCFが提供する公式のトレーニングコース](https://www.cncf.io/certification/training/)や、[UdemyにもたくさんKubernetesのコースがある](https://www.udemy.com/courses/search/?q=kubernetes)ようでした。そちらの内容はやってないのでわかりませんが、Linux Academyのこのコースについてはやってみて結果的にはとてもよかったです。

内容は比較的ベーシックなところからなのでよい復習になります。先にKubernetes The Hard Wayをやってしまったけれど、こちらを先にやった方がよかったと思いました。チュートリアルで使う環境にはブラウザベースのターミナルでアクセスしますが（好きなSSHクライアントでもアクセスできます）、試験もブラウザベースのターミナルなので、ターミナルの使い勝手に慣れるのにも役に立ちました。また、特に役に立ったのはコースの最後にある模擬試験で、どんな問題が出るのかのイメージがわきました。手が早く動くように模擬試験は（同じ内容だけど）2回やり、1回目は2時間半かかりましたが2回目は50分くらいでできました。

コミュニティー内に試験を受けた人のフィードバックが書き込まれていたりして、そちらも参考になりました。例えば以下。

- https://linuxacademy.com/community/posts/show/topic/25094-cka-exam-experience-and-some-useful-tips

なお、上に書いたKubernetes The Hard Wayは最近Linux Academyのコースにもなったようです。[オリジナル版](https://github.com/kelseyhightower/kubernetes-the-hard-way)しかやっていないので内容はわかりませんが、[Linux Academy版](https://linuxacademy.com/linux/training/course/name/kubernetes-the-hard-way)の方が解説が聞けていいかもしれません。

-  https://linuxacademy.com/linux/training/course/name/kubernetes-the-hard-way

Linux Academyはトライアルで7日間無料で利用できるはずで、その範囲でやろうかなと思っていたのですが、会員登録の仕方が悪かったのかいきなり課金されてしまいました。1ヶ月49ドル。自分は別に有料でもよかったのですが、トライアルだけやりたい人は会員登録の仕方に注意した方がよいかもしれません。

#### kubernenets.ioのドキュメント

- https://kubernetes.io/docs/home/?path=browse

この時点までにKubernetes本を何冊か読みましたし、実際にかなりKubernetesに触っていましたし、Kubernetesについてある程度はわかっているつもりになっていたのですが、改めて公式ドキュメントを読むと、読む度にいろいろと発見がありました。しかし、分量が多くとても全部に目を通すことはできませんでした。たぶん半分も読めていないです。試験中に参照できる唯一のリファレンスなので、どこに何があるかをだいたい把握しておくことが重要と思われます。CONCEPTS、TASKSといったカテゴリに分かれており、例えば`securityContext`について調べようとするとCONCEPTSにもTASKSにも書いてあったりします。どこにあるか把握してないものは検索機能に頼ることになるので、検索の仕方も確認しておきました。

### その他の細かい準備

- [Handbook](https://www.cncf.io/certification/candidate-handbook)など公式に提供されている試験のドキュメントをちゃんと読んだ
- 普段Firefoxを使っているが、試験で使うブラウザがChromeなのでChromeに慣れておいた
- Chromeでkubernetes.ioの中でもよく見そうなページのブックマークを作っておいた
- kubernetes.ioでの検索の仕方を確認しておいた
- APIリファレンスのたどり方を確認しておいた
- `kubectl explain`の使い方を確認しておいた
  - [kubectl explain — #HeptioProTip](https://blog.heptio.com/kubectl-explain-heptioprotip-ee883992a243)
- `kubectl run`や`kubectl expose`や`kubectl create`を使ったオブジェクトの作り方に慣れておいた
  - `kubectl run`ではDeploymentだけでなく、`--restart=Never`でPodが、`--restart=OnFailure`でJobが作れます
- 上記の`kubectl run`と`--dry-run -o yaml`の組み合わせでマニフェストの雛形を素早く作れるようにしておいた
  - [Using kubectl to jumpstart a YAML file — #HeptioProTip](https://blog.heptio.com/using-kubectl-to-jumpstart-a-yaml-file-heptioprotip-6f5b8a63a3ea) 
- `source <(kubectl completion bash)`を活用できるように慣れておいた
  - [kubectl Shell Autocomplete — #HeptioProTip](https://blog.heptio.com/kubectl-shell-autocomplete-heptioprotip-48dd023e0bf3)
  - なお、試験の環境はデフォルトで補完が有効になっており、自分で`source <(kubectl completion bash)`を実行する必要はありませんでした
- 普段RHELかCentOSを触ることが多かったが、試験の環境はUbuntuなのでUbuntuに慣れるようにした
- Linux Academyで使われているブラウザベースのターミナルがきっと試験でも同じではないかと思い、使い方に慣れておいた

## 本番

会社の会議室を借りて早朝6:30から受験しました。リモートで監視されるためにWebカメラが必要ですが、MacBookにもともとついているもので大丈夫です。外部モニターも使いました。試験は3時間で24問。事前に読んだHandbookに問題文のみ日本語も利用可能と書いてあり、英語と日本語どちらで受験するか迷っていましたが、特に選択する場面があった記憶がなく、問題文は日本語でした（ブラウザの言語設定？）。日本語訳が変だと困るなと思っていましたが、特に違和感はなく困りませんでした。自分は集中すると無意識に手を口元に持っていく癖があるようで、試験中、試験官に一度注意を受けました。

[こちらの方](https://medium.com/@pmvk/tips-to-crack-certified-kubernetes-administrator-cka-exam-c949c7a9bea1)のように最初の1時間で10問を目標にし、結果的には1時間で12問解けました。後半に1問だけ極端に難しい問題があったのでそれは早々に回答を諦めました。その難しい問題以外を回答し、25分ほど見直しができる時間が残りました。

## 結果と感想

無事合格。1問を残して他は回答したのでもう少しいい点が取れていると思ったのですが、そうでもありませんでした。合格ラインは74%でした。

```
Congratulations!  You achieved a passing score on the CKA Exam that you took on 2018-11-20!

You scored 80% for this Exam. A score of at least 74% was required to pass.
```

この試験は、初期の頃は4時間で30問（好きなだけググってOK）だったようですが、現在は3時間で24問（タブ1つで[kubernetes.io/docs](https://kubernetes.io/docs/)と[kubenetes.io/blog](https://kubernetes.io/blog/)だけ見てもOK）というようにルールが変わっており、難易度も変わっているかもしれません。難易度についての感想としては、最初に参考リンクに挙げた[こちらの方](https://medium.com/@pmvk/tips-to-crack-certified-kubernetes-administrator-cka-exam-c949c7a9bea1)や[こちらの方](https://medium.com/mhiro2/certified-kubernetes-administrator-exam-ebb84ac686dc)とだいたい同じです。

## その他

- 公式ドキュメントでもLinux Academyのコースでも出てくるbusyboxを使ったDNSのデバッグが上手くいかず、しばらく悩んでいたがbusybox側の問題で`1.28.4`以下のバージョンなら上手くいった
  - [dns can't resolve kubernetes.default and/or cluster.local](https://github.com/kubernetes/kubernetes/issues/66924)
- `tmux`をおすすめしている受験記が多かったが、使ったことがなく学習コストが高そうだったので諦めたが、特に問題なかった

## その後

10日後にCKADも取得しました。

- [Certified Kubernetes Application Developer (CKAD) 受験ログ](https://qiita.com/sotoiwa/items/70cf93ebe2718a3be6b3)

2020年9月に試験の形式が変更になりました。試験時間が2時間になっています。

- [Certified Kubernetes Administrator (CKA) 2020:
予定されているプログラム変更](https://training.linuxfoundation.org/ja/cka-program-changes-2020/)

2021年1月にCKSも取得しました。

- [Certified Kubernetes Security Specialist (CKS) 受験ログ](https://qiita.com/sotoiwa/items/8b6ccc429c77bf2dea7e)

2021年10月にCKAを再認定のため受験し合格しました。クラスターのバージョンは1.21でした。2020年9月の改訂で試験時間が2時間になったとともに、合格点が66点に下がったようです。また、[2021年7月には受験料金が改定されて料金がやや高くなった](https://training.linuxfoundation.org/blog/certification-exam-prices-increase-july-1-lock-in-current-pricing/)一方、[2021年6月からよくできたシミュレーターが付いてくる](https://www.cncf.io/announcements/2021/06/02/linux-foundation-kubernetes-certifications-now-include-exam-simulator/)ようになっています。各問題の難易度自体はそれほど変わっていないと感じましたが、試験の準備はやり易くなっていると感じました。試験範囲も若干変わったようで、3年前の極端に難しい1問は試験範囲外になったようでした。

2021年10月にCKADも再認定のため受験し合格しました。クラスターのバージョンは1.22でした。[2021年9月末に試験内容が改定](https://training.linuxfoundation.org/ja/ckad-program-change-2021/)されています。

2023年1月にCKSも再認定のため受験し、一度不合格となり、リテイクで合格しました。クラスターのバージョンは1.25でした。[2022年6月に試験環境がリモートデスクトップ環境に変更](https://training.linuxfoundation.org/blog/update-on-certification-exam-proctoring-migration/)されており、操作感かなり変わっています。

|受験次期|試験|K8sバージョン|試験時間|合格点|得点|
|---|---|---|---|---|---|
|2018年11月|CKA |1.11|3h|74|80 |
|2018年11月|CKAD|1.11|2h|66|87 |
|2021年1月 |CKS |1.19|2h|67|74 |
|2021年10月|CKA |1.21|2h|66|95 |
|2021年10月|CKAD|1.22|2h|66|100|
|2023年1月 |CKS |1.25|2h|67|57 |
|2023年1月 |CKS |1.25|2h|67|80 |