[保存版]短期間でKubernetesのCKA、CKAD、CKSの三冠達成したので攻略法(勉強方法の解説とコツ)を共有

# はじめに
2022/8月から11月の約3ヶ月弱でKubernetesのCKA、CKAD、CKSの三冠達成をしましたので、
記録として残します。

勉強期間としてはあまりにも短いので、そこは真似しない方がいいと思いますが、本記事を参考にすれば、5ヶ月以内で三冠は現実的にいけるかと思います。勉強した時間以外の部分で参考になればと思います。
試験対策のような内容ですが、確実に実力はつきます。
むしろ、実力がないと試験合格は不可能であるため、試験合格＝実力がついたと言っても過言ではないです。
（資格があると某ムスカ大佐みたいに、「読める、読めるぞ！!」状態になります。)
~~「Podは滅びぬ！ 何度でもよみがえるさ！」~~

## 筆者＆読者のターゲット
私は、Kubernetesの実務経験がない状態で取得しています。
(職場でKubernetes環境はあるが実際に触っていない人や、minikubeを少し触った人、Kubernetesが何なのかあまりわかっていない人など)
既に、Kubernetesを業務で使用されている方は、資格の難易度が半減または激減するイメージを持っていただければと思います。


## Kubernetesの雰囲気
「何か色々複雑そう、理解大変そう」、と思いますが、その通りです。
資格取得したら、これらの図を余すことなく、全てが理解できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136416/9a25e3eb-a851-eef7-3bcd-61d76798d392.png)

##### 資格取得日と受験した所感
* CKA  9月30日
    * 問題数は17問あり、想定通りの問題がいくつかありつつ、捻った問題が４問ほど合ったので苦戦した。
    * 一周して見直しする時間は合ったのでよかった。
* CKAD 10月4日
    * 問題数は17か18問で、CKAと同じような問題があったので比較的楽にできた。
    * Pod操作メインだったので、楽にクリアできたような気がしました。
    * 十分見直す時間があったので、最後は落ち着いてできました。
* CKS  11月9日
    * 超難しかった。一つ一つの問題が重すぎて大変だった。
    * 最後の問題がボーナス問題で確実に点が取れたが、なんと時間切れで、最後の問題が途中で終わった。
    * 当然、見直し無しだった。この後、話で出てくるkiller.sh並に難しかった。

##### 勉強時間
平日3-4h, 休みの日8hが目安

## あると嬉しい前提知識、経験
- Linuxの基本コマンドとネットワーク、プロセス周りのコマンド　(netstatやpsコマンドなどバリバリ試験で使います。)
    - ここはMUSTでした。必ず基本コマンドは慣れておくようにしてください。
- Dockerなどのコンテナ知識 (DockerFileに書き慣れていると、マニフェストが読めるようになりやすい)
- 何かしらのサービス開発やサービス運用の実務経験でサービスの流れがわかっていること(なんでこの機能がいるのか？と言う疑問が沸きにくくなるのと、その経験とKubernetesの機能が合致した時に完全に理解した！!状態になれる)

## 資格試験についての前提知識
- CKAなどのバウチャーというチケットを購入します。有効期限は1年間。
- 好きなタイミングで受験できます。
- 条件が揃っていれば、自宅で受験可能。コワーキングスペースで個室を借りると、楽々受験する条件クリア。
- killer.shと言う模擬試験が2回ついてきます。(※超重要)
- Kubernetesは頻繁にバージョンアップしていく特徴がありますが、試験時も可能な限り最新バージョンになってきます。
    - **よって、バージョンアップすることで新機能追加や、既存機能の削除が行われるので、古い資料で勉強するのは非常に危険になります。**
- **試験は全て実技です。選択問題はありません。PSIと言う試験システムを使っており、Linuxにリモートデスクトップ接続してそこで作業します。**
    - 試験する上でかなり作業しづらい環境ですので、問題はわかっても操作にもたつくような状況も十分あります。これを克服するためにkiller.shを最大限に活用します。別途、下の方で解説します。
- 試験は決められたサイトを見れるので、サンプルソースをコピペできる環境です。 https://kubernetes.io
    - いかにスムーズにコピペできるかが重要になります。
- 仮に試験が不合格でも再試験を無料で1回ついてきますので、ご安心を。
- 試験のイメージです。
    - https://docs.linuxfoundation.org/tc-docs/certification/important-instructions-cks
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136416/52237df5-f628-a11f-c9e9-8e1ac67469a8.png)


# 各資格について簡単な解説
各資格は試験範囲については下記のgithubで管理しています。

https://github.com/cncf/curriculum

ではそれぞれの資格を私なりに解説して行きます

## CKA
https://training.linuxfoundation.org/ja/certification/certified-kubernetes-administrator-cka-jp/

Kubernetes管理者と言うだけあり、Kubernetes自体について知ることができる資格になります。
ですので、Kubernetesの基本操作から始まり、Kubernetesのコントロールプレーンと呼ばれる核となるシステムの動作、設定方法、バックアップ、リストアなどを扱います。
管理者側としてどのようにサービスを動作させるかを考え、もしサービスが止まったらどうやって対処するかなど、サービス保守運用の基礎の基礎を学べる良い資格になります。

## CKAD
https://training.linuxfoundation.org/ja/certification/certified-kubernetes-application-developer-ckad-jp/

アプリケーション開発者として、Kubernetes上でどうやってデプロイするかを重点的に学ぶことができます。
Kubernetesの基本操作から始まり、アプリケーションの色々なデプロイやマニフェストをメインに学びます。デプロイする種類がいくつかあるので、それらの特徴を学びます。Kubernetes自体の構造に関しては浅めに学ぶので、開発者目線でどのようなマニフェストを描くかなどを多く学びますので、結果的にPod操作も多くなってきます。
幸か不幸かCKAと8割ほど試験範囲が被っていますのでCKA、CKADはほぼセットで取得すると良いかと思います。

## CKS
https://training.linuxfoundation.org/ja/certification/certified-kubernetes-security-specialist-cks-jp/

**※CKAを取得しないと受験資格すらないため、実質CKAの上位資格の位置付けになります。CKSを目指すならまずCKAを取得することを目指しましょう。**
セキュリティスペシャリストと言う名前の如く、Kubernetesを運用していくためのセキュリティノウハウをこれでもか!ってぐらい学ぶことになります。
**この資格の大きな特徴はセキュリティノウハウであるが故に半分以上はKubernetesの範囲を超えています。誤解を恐れずに言うと、正直もうKubernetesとは関係ないです。**
なぜなら、セキュリティにおける有名なサードパーティ製のOSSツールを使った問題が大半を占めているからです。そのツールをKubernetesに設定することになりますので、別ツールとKubernetesを紐づけるために設定を行なっていくイメージです。めちゃ根気がいる箇所になります。~~(Kuberntesと、興味もない複数の知らないツールを同時に勉強している状況のため、私は短期間で何回も心が折れております。ええ、折れましたとも何回も😇)~~

## 試験難易度は？
CKS>>>>>>CKA>=CKAD

### 合格点は？
CKA,CKAD 66スコア以上で合格
CKS　67スコア以上で合格
各試験には重み付があるので、配点が多いものはできれば取っておきたい。
幸運なことに、部分点があるため、難しいと感じながらもやれるところまでやると、合格率がかなり上昇します。

## どの資格から取ればいいの？
どの資格から取れば良いかわからない方はまず**CKA**をお勧めします。
Kubernetesそのものがどのように動いているかがかなり細かく学べますので、ここでしっかりと基礎を身につけておくと楽になります。

その後、**CKAD**に挑戦します。CKAとの差分はCronJob、Jobや、マニフェストの一部など少しの差分しかないので、勉強量がかなり少ないのと、CKAで基礎を学んでからCKADをすることで、比較的楽に資格取得できます。ここまで資格取得したらで、Kubernetesをひと段落しても十分と言えます。

が、セキュリティはサービス運用において切っても切り離せないほど重要な項目ですので、**CKS**の受験有無問わず、試験勉強することで、今まで見えていなかったセキュリティに対する意識や目線、ノウハウを身につけることができます。このノウハウはKubernetes以外でも使えるので、今は学んで良かったと本当に思っています。
CKSはある種、苦行、修行モードのようなものに入るので、腹落ちするまで理解するには十分に時間をかけて勉強する必要があります。それを乗り越えた先は、明るいです。

と言うことで、以上が前置きになります。
そんなKubernetesの資格をどうやって攻略していくか、一つずつ解説して行きます。

# 資格対策に入る前に教材の補足
基本的にudemyをお勧めしていますが、定価が24000円などかなり高いので、セールの日を狙って購入するようにしましょう。
いつのセールでも良いのですが、おおよそ1900-2300円前後まで安くなるので、90%以上のセールならいつでも購入して良さそうです。

# CKA
## 教材
基本udemyで完結します。こちらのコースを購入することで無料のKodeKloudと言うシミュレーターを使って手を動かしながら、学べます。先日、完全日本語化したので今の人は学びやすいです。

https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/

udemyでわからなかったことがあったら原則公式ドキュメントを見る。暇な時も公式ドキュメントを読む。
※この行為は超重要です。なぜなら、基本的に資格試験の答えが公式ドキュメントにサンプルコード付きで載っているからです。
　なので公式ドキュメントをある程度どんなところにほしいサンプルコードがあるかを体に染み込ませるぐらい、必要です。
　公式サイトに検索機能があるので、原則検索機能を使ってページ移動するようにしてください。

https://kubernetes.io/ja/docs/home/

バウチャーを買うと2回分の模擬試験が使えます。試験直前の仕上げに使うことをお勧めします。
1回使うことで、特定の環境を36時間使えるようになり、36時間経過するまでは何回でも模擬試験を受けることができます。
またこの模擬試験は本番試験よりも遥かに難しくかつ問題数も多いあるため、絶対に試験時間2時間以内に終わることはありません。
ここで心を折れる必要はないです。時間切れになってもいいので、何回も問題を解くようにて理解に努めてください。
本番は簡単に見えてきます。
**あと忘れてはいけないのが、リモートデスクトップという超やりづらい環境をkiller.shで体験できることです。
特にブラウザ、ターミナル間のコピペのショートカットが全く違うので、killer.shでスムーズにコピペできるように練習は絶対にしてください！絶対にしてください！
本番試験の合否に関わってきます。**

https://killer.sh/


補足として、Kubernetesの書籍として青山本は素晴らしいですが、この本は本当に全てを網羅しているため、資格勉強よりは辞書代わりとして使う方が良いかと思います。※この本はかなり細かく解説しているため、全てを理解するとスーパーマンになります。

https://www.amazon.co.jp/dp/4295009792


## 勉強の流れ
1. udemyの解説動画を一語一句ちゃんと聞いて理解する。
    1. バックミュージックがないので、私は延々とBGMを流しながら、udemyを勉強してました。
        1. https://www.youtube.com/watch?v=jfKfPfyJRdk
        1. モチベ維持と、この曲を聴くと勉強モードに切り替わるような習慣化につながるのでお勧めです。
1. kodekloudで小テストをやって8〜10割理解できたら次に進む。
    1. 小テスト中もわからないところは、必ず[公式ドキュメント](https://kubernetes.io/ja/docs/home/)を読む癖をつける。
1. udemy, kodecloudが一通り終わったら、kodecloudにある、「トラブルシューティング」、「Lightning Labs」、「exam mock1-3」は、かなり時間の余裕を残しつつ、満点近く取れることまで行う。
    1. 暗記ではなく、理解しながらコマンドを打っているし、そのConfigを修正しているなど腹落ちを意識して解くようにする。
1. 熱が冷めないうちに試験日を2週間先ほどに設定しておく。(試験日は平日木曜日あたりとかが良いかもしれないです。)
1. 試験の前の週までには仕上がったという自信がついていれば、その週の土日を使ってKiller.shの一回を使う。
    1. 豆知識として、模擬試験の有効時間は36時間なので、土曜日の12時に開始したら、日曜日の24時にちょうど終われるので、自分に合ったペースで行う
    1. ここで余りの難易度の高さに、試験の半分も解けずに時間切れになるため、**心が一回折れます。**
        1. あとは時間切れのまま、解説ページを見つつ、解けなかった問題を解きます。
        1. そして環境をリセットして、再度模擬試験に挑戦して、1回目より少し進めばOKです。
        1. そして解説なしでどこまで解けるか挑戦します。
            1. 感覚としては2時間で5、6割解ければOKです。
    1. 土日、ずっとkiller.shをやっているんで心を2,3回以上折られますが、何回か解いていくと、急に見えてくるようになります。
1. killer.shの戦いが終わった余韻として、月曜日から水曜日はudemy, kodecloudにある、「トラブルシューティング」、「Lightning Labs」、「exam mock1-3」あたりを解いて自信を取り戻します。
1. 本番に挑戦します。
1. 試験のちょうど24時間後の翌日に試験結果が出ます。

以上が、合格までに行なった私の行動です。
私の場合は仮に、不合格になった場合でもまだkiller.shが1回分と無料の再試験があるので、手順３あたりから再度やるイメージで合格できると想定しています。
**※重要な補足として、試験日の2日前ぐらいに、完全に受かる気がしないと思ったら、リスケできますので、迷わずリスケをお勧めします。試験開始時間まで24時間切るとリスケできなくなります。(私はCKS試験1週間前に、今の理解度では合格は無理と判断したので、試験日を2週間先にリスケしました。)**

# CKAD
## 教材
基本udemyで完結します。こちらのコースを購入することで無料のKodeKloudと言うシミュレーターを使って手を動かしながら、学べます。先日、完全日本語化したので今の人は学びやすいです。

https://www.udemy.com/course/certified-kubernetes-application-developer/

公式ドキュメントを読む。※この行為は超重要です。割愛

https://kubernetes.io/ja/docs/home/

試験内容が数回心を折ってきますが、踏ん張る！内容割愛
**リモートデスクトップ上のブラウザ、ターミナル間のコピペのショートカットのコピペの練習は絶対にしてください！絶対にしてください！
本番試験の合否に関わってきます。**


https://killer.sh/

## 勉強の流れ
1. CKAの時とほぼ同じ立ち回りで問題ないですが、試験範囲が被っているので、CKADのコースで全く同じ動画が流れたりしますので、そこは飛ばしつつ、被っていない箇所のみを見るイメージでいいです。
    1. Cron Job、Jobや、2021追加機能、コンテナ周りあたりのセクションは差分があるので要学習
1. ただし、KodeKloudは復習も兼ねて全てやることをお勧めします。
1. そして試験の前の週の土日でkiller.shやって〜の流れは同じなので、それでいけるかと思います。


# CKS
## 教材
基本udemyで完結します。今回は講師が違うので、KillerCodaと言うシミュレーターを使って手を動かしながら、学べます。こちらは日本語に対応していないですが、動画の右側にセリフを表示してChromeの翻訳機能を使うことで、実質日本語字幕で見れるので、日本語で学習可能です。

学習内容はサードバーティのOSSのfalcoやtrivy、OPA、gatekeeper、seccomp、cis-benchmarkなど色々学ぶ必要があります。習得する項目が多くて大変ですが、焦らず少しずつ時間をかけて理解していきましょう。udemyを繰り返し見れば、いずれ理解できるようになります。

CKSのみfalcoやOPAなどの公式サイトを見れるように配慮されていますので、少し覗くといいと思います。
特にfalcoの[ここ](https://falco.org/ja/docs/rules/supported-fields/)は必須級で使いますので、ここのページの存在意義がわかるタイミングで思い出してもらえればと思います。

https://www.udemy.com/course/certified-kubernetes-security-specialist/

※2024/11/11追記
現時点でudemyのコースが無くなってましたが、youtubeの方で見れることを確認しました！
こちらでも日本語翻訳してみれるので、こちらで代用してみてください
https://www.youtube.com/watch?v=d9xfB5qaOfg


udemyが終わって満足の方が唯一満足できないのが、小テスト数と難しさかと思います。なので、ここでもう一押しした人向けには、CKA時代からお世話になった人のサービスのCKSコースを使うことをお勧めします。こちらは無料コードはないので、月額35ドル払って一ヶ月で仕上げる気持ちでやれば問題ありません。(その他色々コースが見れたりするので、もう少し払い込んで、色々なコースを学ぶのも良さそうです。)
実際に私も1ヶ月払ってやりました。mock examの難易度も高くポイントが絞られていてよかったです。お勧めです。

https://kodekloud.com/courses/certified-kubernetes-security-specialist-cks/


公式ドキュメント。割愛

https://kubernetes.io/ja/docs/home/

今まで一番試験内容が心を折ってきますが、踏ん張る！内容割愛
**リモートデスクトップ上のブラウザ、ターミナル間のコピペのショートカットのコピペの練習は絶対にしてください！絶対にしてください！
本番試験の合否に関わってきます。**

https://killer.sh/

## 勉強の流れ
1. CKSを学んでいると、Kubernetesを勉強していないような錯覚になるので、辛い感じがしますが、だんだんわかってくると、「これって今の仕事で使えそうだ」とか、そういった別観点でのモチベーションが湧いてきますので、そのモチベーションが湧くか、自身で何かしらモチベを上げるようにすることをお勧めします。
1. udemyが終わった後、KillerCodaでCKSの練習問題があるのでそれらを一通り解いてみてください。
1. そして試験の前の週の土日でkiller.shやって〜の流れは同じなので、それでいけるかと思います。
(冒頭でも書きましたが、CKSは非常に難しかったです。killer.shに並ぶ難しさでした。なのでkiller.shの練習問題の理解が最重要になります。)

## 補足
CKSで直近の注意点としては1.24バージョンではPSPという機能を使えていますが、すでに非推奨になっており、1.25バージョンでは機能が削除されて別の機能を代用するようになっています。
CKA,CKADはすでに1.25バージョンに対応しているが、2022年11月12日時点ではまだCKSは1.24バージョンですので、非推奨のPSPが試験範囲になります。実際受験する際にPSPの試験が出題されました。
バージョンアップによるカリキュラムの変更があるため、CKSの受験時期は少し注意したほうが良いかもしれないです。


# 個人的に試験時で活躍した必須コマンド集
多すぎて書ききれませんでしたが、よく使っているコマンドをいくつか並べました。
あとは、勉強していく際にここに書いてあるコマンドは出てくるので、それは手癖のように打てるようにした方が良いです。(出ないと、時間切れで詰みます。)

※コマンドに出てくるkはkubectlのショートカットのaliasです。実際の試験時でも使えます。

https://kubernetes.io/ja/docs/reference/kubectl/cheatsheet/

チートシートというページで色々ショートカットを学ぶこともできるので、このページは必見です。

### とりあえず、何のリソースか確かめたい時に便利
```bash
k get all -A # 全てのネームスペースのリソース全表示
k get all -n hogehoge #特定のネームスペースのリソース全表示
k get all --show-label # ラベル使うことが多いので、ラベル確認した時
k get po --all-namespaces # 全てのネームスペースで特定のリソースを表示したい時
```

### 何かpodを作れと言われた時
```bash
#一番簡単にpod名はhogeで中身はnginxというpodを作る
k run hoge --image nginx 

#最重要 ドライランでpodを作らず、マニフェストを作るだけのコマンドでそれをpod.yamlに出力する。
#ドライランは一番多用するので慣れておくこと。
#理由は、細かい設定を記載する際に簡単なテンプレートをドライランコマンドで作ってから作業するため。
k run fuga --image nginx --dry-run=client --oyaml > pod.yaml 
```

### 特定のpodのサービスを公開したい時
```bash
# pod同士で通信する際はserviceというリソースを介して通信するのが慣わし。
$ k expose pod hoge --port 80
$ k get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
hoge         ClusterIP   10.106.184.118   <none>        80/TCP    21s
```

### 何かpodとservice以外を作れと言われた時
```bash
# パッとdeploymentを作りたい時、しかもpodは3つの例
k create deployment hoge --image nginx --replicas 3
# パッとdeploymentを作りたい時、しかもpodは3つの例　だけどもっと細かく修正したい場合、
k create deployment hoge --image nginx --replicas 3 --dry-run=client -oyaml > deploy.yaml
```

### podを削除してほしい。
```bash
# 通常の削除
k delete pod hoge

# 待ち時間すら惜しいので一瞬で削除したい場合。(試験時の時間節約に役立つ)
k delete pod hoge --force --grace-period 0
```

### podを作り直さないといけない箇所を編集する場合
```bash
# editコマンドで直接修正します。
k edit po hoge
# 修正できない旨があるがそれでも保存します。そうすると、以下のtmpファイルが作成されます。
$ k edit pod
error: pods "hoge" is invalid
A copy of your changes has been stored to "/tmp/kubectl-edit-132148342.yaml"
error: Edit cancelled, no valid changes were saved.

# この状態でリプレイスコマンドで差し替えます。
$ k replace --force -f /tmp/kubectl-edit-132148342.yaml
pod "hoge" deleted
pod/hoge replaced

#この方法で hogeをdeleteする時間が長い場合は、下記のようにすることで高速でpodを起動することができる
k delete pod hoge --force --grace-period 0
k create -f /tmp/kubectl-edit-132148342.yaml
```

エラー内容とかステータス情報を見る
```bash 
k describe [po/deployment/svc/secret/などなど] [リソース名]
```

# まとめ
いかがだったでしょうか。これで少しでもKubernetesの資格取得者やKubernetesのエンジニアが増えれば幸いです。
勢いで書いたのもありますので、間違いがあれば、コメントいただける助かります！
「こんなコマンドも便利だよ」などがあれば、コメントいただけると嬉しいです。

実務経験の無い私にとっては、CKA、CKAD、CKSをとってやっとチュートリアルが終わったと考えています。
これからスタートしていきますので、皆さんもKubernetesエンジニアとして、良いサービスを作っていきましょう。

twitterでもKubernetesについて発信などしていますので、興味があったらフォローをお願いいたします。

ここまで見ていただき、本当にありがとうございました。