Kubernetes認定資格CKA/CKAD受験のTips

## はじめに
9月にCKA/CKADを取得しました。
CKAについては2020年9月に試験内容が改訂されているので改訂後の受験となります。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">よっしゃ！！！！🎉🥳<br>資格自体よりも勉強の過程で得た物が大きかった。<br><br>Certified Kubernetes Administrator（CKA）<a href="https://twitter.com/hashtag/kubernetes?src=hash&amp;ref_src=twsrc%5Etfw">#kubernetes</a> <a href="https://t.co/Hl2aclWtxX">pic.twitter.com/Hl2aclWtxX</a></p>&mdash; mochizuki875 (@mochizuki875) <a href="https://twitter.com/mochizuki875/status/1306654527420944384?ref_src=twsrc%5Etfw">September 17, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">kubernetesのkの字完全に理解した。<br>とりあえず上期中にCKAとCKAD取得する目標達成🎊<br><br>Certified Kubernetes Application Developer（CKAD）<a href="https://twitter.com/hashtag/kubernetes?src=hash&amp;ref_src=twsrc%5Etfw">#kubernetes</a> <a href="https://t.co/Kmpfvhhufy">pic.twitter.com/Kmpfvhhufy</a></p>&mdash; mochizuki875 (@mochizuki875) <a href="https://twitter.com/mochizuki875/status/1309861864768040962?ref_src=twsrc%5Etfw">September 26, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

自身も既に投稿されているQiitaのいくつかの記事にお世話になったので、資格受験に際して個人的にポイントとなると思うところをまとめたいと思います。
以下では基本的に自身の解釈を記載していますので、正確な情報は以下をご確認ください。
https://www.creationline.com/cka-ckad-exam

※試験のポリシー上試験内容を公開することは禁止されているため、具体的にどう言う問題が出題されるかと言う内容は控えさせていただいております。

## 筆者のバックグラウンド
筆者のバックグラウンドとして、実質1.5年程度Kubernetesに触れた経験があります。
大体どうやってアプリをKubernetes上にデプロイするかを知っている程度です。
**ロゴがカッコいいのでKubernetesが好きになりました。**

![kubernetes_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246372/f5ae6af4-d7ee-51ce-a488-b5eb4db05deb.png)

## 受験して良かったこと

Kubernetesはそもそもの仕組みが複雑で学習難易度も結構高く、自身はこれまでKubernetesに触れてはいたものの体系的にそれらの仕組みを学ぶ機会がありませんでした。（ある意味ノリでKubernetesを触っていた）
なので今回の学習を機に機能や仕組みを網羅的に理解したり、今まで抽象化されていて曖昧だった箇所に対する具体的な理解を得られたのが何よりの収穫でした。
あとは認定証がカッコいい。

## 試験内容
両方取得した上での自身の解釈を記載します。
※繰り返しますが正確な情報は公式サイトでご確認ください。

### 共通
どちらも実技試験になります。試験の進み方としては、お題が出される→お題を満たすオペレーションをコンソール上で実施する、と言った流れを問題数分実施する形となります。(良くある選択式の問題ではないので注意)
なお、出題問題数は20問弱です。

(問題例)
※実際にこの問題が出題されたという訳ではないです。
 あくまでイメージとして捉えて下さい。

- xxxという名前でPodを2台デプロイせよ
- xxxというPodと△△△というPod間で通信出来るようにせよ
- クラスターのWorker Nodeが動いていないので直せ


### Certified Kubernetes Administrator (CKA)
Kubernetesの基本的な機能に加え、基盤自体の運用方法やトラブルシュートについての理解が求められます。
基盤管理者向けの試験になるので、**基盤自体がどう動いているかと言った仕組み**に関する理解が必要です。
基盤自体の仕組み、と言っても難しく構える必要はなく、「どう言うコンポーネントがあってそれらがどう連携して動いているか」と言う理解で足ります。ソースコードレベルでの理解は不要です。

### Certified Kubernetes Application Developer（CKAD）
Kubernetesの基本的な機能に加え、Kubernetesをアプリをデプロイ・運用する基盤として十分に利用できるスキルがあるかが求められます。
アプリケーション開発者として**求められる要件をどのようにKubernetes上で満たすか**を理解している必要があります。
アプリケーション開発者向けの試験になるので、基盤の裏の仕組みに対する理解は不要です。

## 試験範囲
### 概要
詳細は公式ページに任せるとして、ここでは自分なりにまとめた書き方をします。
※（）内には代表的な例を示しています。もちろんこれ以外の内容も試験範囲に含まれます。

- Certified Kubernetes Administrator (CKA)
  - Kubernetes上での基本オペレーション（Podをデプロイするにはどうやるか、どうやってlogを取得するか　など）
  - Kubernetes基盤そのものに関する内容（クラスタのバージョンアップをどうやるか、壊れているクラスタの異常コンポーネントを特定して直す　など）
- Certified Kubernetes Application Developer（CKAD）
  - Kubernetes上での基本オペレーション（Podをデプロイするにはどうやるか、どうやってlogを取得するか　など）
  - 開発者としての要件をKebernetes上でどのように満たすか（アプリケーションのバージョンアップやロールバックをどうやるか、DBクラスタなどmaster-slave構成のPodをどのようにデプロイするか　など）

### 試験範囲のイメージ
両試験の範囲のイメージを図に示すと以下のような感じです。

- **CKAの方がCKADよりも範囲が広い**
- CKADで求められる内容の大半はCKAの内容でカバーできる（領域①）
  - 領域①：Pod,Deployment,Service,Namespace,ConfigMap,Secret,PV,PVC,StorageClass,ServiceAccount,NetworkPolicy・・・
- 各試験独自の内容である領域②③については以下の通り（領域②>>領域③）
  - 領域②：kubeadm,クラスターバージョンアップ,RBAC,etcdバックアップ&リストア,Kubernetesコンポーネント（kube-api-serverやkubelet）・・・
  - 領域③：Job,CronJob,StatefulSet,Headless-Service,Rollout・・・

※領域②について、2020年8月までは証明書管理なども含まれていましたが2020年9月の改訂に伴い試験範囲外になったようです。

![cka-ckad-imag-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246372/e2fa769c-0b8f-3d0e-7718-3e435757a494.png)

## 試験難易度

基本的に範囲こそ違えど**どちらも難易度は変わらない**と思っています。
試験全体的にそこまで難易度が高いものではないですが、特に難しいと感じた点を以下に挙げさせていただきます。
（難易度の感覚は基本情報を★★☆☆☆としたらCKA/CKADは★★★☆☆くらい？）

### 共通的に難しいと感じた点

- 問題数に対して試験時間が足りない
  - どちらも2時間で20問弱出題されるので平均して**1問あたりに費やせる時間は6分程度**です。
  - 全問完答するのは結構難易度が高い。
- 実技試験である
  - よくある選択式の試験ではなく**実際にOPのスキルが問われる実技試験**のため、雰囲気での理解では問題に解答できません。
- 試験環境に慣れない
  - 試験はブラウザ上のコンソールで行うのですがkubectlの補完が効かなかったりと普段の環境と違うとどうも慣れません。
  - ちなみにMacの場合は通常通り⌘+C,Vでコピペできますが、Windowsの場合はCtrl+C,Vは使用できずCtrl+Insertでコピー、Shift+Insertでペーストを行うことになります。

### CKAで難しいと感じた点
- 範囲が広い
  - 通常Kubernetesを使用する上ではあまり意識しない基盤そのものに関する内容が範囲に含まれるため、覚えることがどうしても多くなります。
- 試験中にクラスタを壊してしまうと取り返しがつかない場合がある
  - 試験の特性上クラスタ自身に対して手を入れる必要があります。基本バックアップをとってから作業すれば良いのですが、意図せずクラスタを壊してしまってもそれに対するサポートはないので注意が必要です。

### CKADで難しいと感じた点
- 求められる要件が多い
  - 「〇〇と言うPodをデプロイして」と言う問題に加え、「△△と言う条件を満たして〇〇と言うPodをデプロイして」と言う問題も出題されます。
- 要件ベースで問われる問題が出題される
  - 通常は「〇〇と△△と言うKubernetesオブジェクトを作成して」と言う問われ方をするのですが、中には「アプリケーションとして〇〇を満たす必要があるからそれを満たすようにKubernetesオブジェクトを作成して」と言う問われ方をする場合もあります。

## 学習方法

基本的には以下Udemy講座を一通り受講して、練習問題をすんなり解けるように慣れば準備としては十分かと思います。
定価だと結構高額ですが、頻繁にセールがされているためそのタイミングであれば1,500円くらいで購入できます。
後述の通り以下講座を受講、練習問題を解きながらKubernetes公式ドキュメントを参照してブックマークを整理しておくと良いです。

Certified Kubernetes Administrator (CKA) with Practice Tests
https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/

Kubernetes Certified Application Developer (CKAD) with Tests
https://www.udemy.com/course/certified-kubernetes-application-developer/

## 受験環境

以下に記載の通り、試験の条件を満たしていれば自宅で受験が可能です。

https://docs.linuxfoundation.org/tc-docs/certification/lf-candidate-handbook/candidate-requirements#testing-environment-requirements
https://docs.linuxfoundation.org/tc-docs/certification/lf-candidate-handbook/candidate-requirements#system-requirements

ざっくり概要を書くと

- 机周辺に不要なものがない
- 壁に何か貼ってあったりしない（貼ってある場合は以下のように布などで隠せばOK）
- 明るい

と言う感じです。
参考までに自身の受験した環境の写真を載せておきます。（家バレとかはご勘弁ください）
不要なものがない、と言ってもこの程度は許されました。
因みに飲み物はラベル無しの透明な液体であれば良いらしいです。

![cka-ckad-imag-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246372/07441008-7c50-0780-7ee8-f099352c6d15.png)

## 受験時のポイント
受験にあたって意識した方が良いことを記載します。

### とにかくラクそうな問題から解く（★超重要★）

上でも記載した通り、2時間で20問近い問題を解くことになるため**時間は足りないもの**と考えた方が良いでしょう。
合格には66%の正答率で足りるので、**「まずラクな問題を解き切る→少し難易度の高い問題をやる」**とした方が難易度の高い問題で時間を使いすぎてしまうことがなく、圧倒的に不合格のリスクは少ないです。
自身が受験した際、初見で少し考えなきゃいけない系の問題は4~5問程度だったのでその問題に詰まって本来ラクに解ける問題に解答できないのは勿体無いです。
（ちなみにラクな問題の中には本当に一瞬で答えが出るものもあります）

以下に自分なりのラクな問題の見極め方を示します。

- 問題文が短い
  - 一般的にですが**問題文が短ければ短いほど問題として求める内容が少ない**ことになるので難易度は下がる傾向にあります。
  - また、問題内容を理解する時間も問題文が短ければあまりかからないことになります。
- 問題のパーセンテージが低い
  - 試験の問題には配点のウエイトを示すパーセンテージが表示されますが、おおよそ問題難易度と比例しているようでした。
  - ただしパーセンテージが高いのに難易度が低かったりその逆もあるので完全に信用しすぎない方が良いです。


### 受験時の言語設定は基本英語にする

試験が開始するといつでも言語設定を変更することができますが、自身が受験した際は日本語訳が不完全で解答をミスリードするようなものもありました。
なので**「基本的には英語で受験→怪しいところは都度日本語で表示」**として受験するのが良いと思いました。
上記Udemyの講座は英語なので、それに慣れていれば特に問題にはならないと思います。

### 公式ドキュメントを整理してブックマークに登録しておく

受験時は**Kubernetesの公式ドキュメントのみ参照が可能**です。
そのため問題に応じて必要なドキュメントにすぐアクセスできるよう、ブックマークを整理しておくのが良いです。
事前に演習を行う際も、公式ドキュメントを参照して問題解答するようにし、ブックマークを整理しながら行うと効率が良いです。
またブックマークを整理しておくと試験以外でKubernetesを触る際にも参照できて便利だと思います。
参考までに、自身は以下のようにブックマークを整理して使っていました。

![cka-ckad-imag-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246372/c2aa7cba-6ab0-a1e8-e7b8-1cad8f63f8b7.png)

### クリップボードを強化しておく

試験ではコピー&ペーストを多用することになると思いますが、その際クリップボードに1つしか履歴を保持できないと結構不便です。
MacであればClipy、WindowsであればCliborあたりを使ってクリップボードに複数の履歴を保持できるようにすると便利ですし解答スピードも上がると思います。

### デュアルモニタを使用できる

試験はブラウザベースで実施しますが、問題文と試験用コンソールが表示されるタブの他にkubernetes公式ドキュメントを表示するためのタブを1つだけ開くことが許可されます。
その際1画面のみの使用してタブ切り替えで対応しても良いのですが、**受験時に伝えればデュアルモニタも使用することができる**ため、公式ドキュメントは試験用とは別のもう1つのモニタに表示する方が効率が良いと思います。

## 試験結果の通知
**受験完了直後には合否が通知されません。**
受験完了時刻から36時間以内に通知されることになっており、自身の場合はCKA:34時間後、CKAD:33時間後にメールで結果が通知されました。
36時間=1.5日なので例えば夕方16時に試験が終わったら最遅で朝方の4時に結果が通知されることになり不安で寝不足になること間違い無しです。
そのため遅くとも午後一には試験を完了させておくのがお勧めです。

## 資格取得の順序

CKAとCKADの両方を取得するのであれば、どちらも難易度自体は対して変わらないので範囲の広いCKAを先に取得してしまい、足りない分を補ってCKADを受験するのがスムーズかと思いました。
自身の場合も3ヶ月程度の期間をCKAの学習に費やして資格取得後、+1週間の学習でCKADを取得しました。

---

### (参考)受験に際してお世話になった記事

- [CKADに合格したので、CKAと比べながら体験を振り返ります](https://qiita.com/sourjp/items/a966f26d7ca4d8797839)
- [CKA(Certified kubernetes Administrator)に合格した](https://www.grugrut.net/posts/202007070839/)
- [CKAD(Certified Kubernetes Application Developer)に合格した](https://www.grugrut.net/posts/202007111027/)