CKA合格体験記

会社のお金でCKAを受けられる機会があったので受けてみました。

今回の受験に際して、数多くの受験記事が大きな支えになったので、その一つとして自分の合格体験記も加えておこうと思った次第です。

## CKAとは

CKAとは**Certified Kubernetes Administrator**の略で、Kubernetes管理者としての認定試験のことです。
主にKubernetesクラスターの管理者としてのスキルを問われる認定試験となっています。

その他にCKAD(Certified Kubernetes Application Developer)、CKS(Certified Kubernetes Security Specialist)といった試験もあります。

当時、Kubernetesにまったく興味のなかった私は、「CKAとCKADどっちがいい？」と聞かれて「枠の余ってるほうでいいです」と適当に答えたのですが、しがないデベロッパーである自分のスキルセットを考えるとCKADを選択するべきだったようです。
試験勉強を始めてしばらく経ってから「あれ、CKAってもしかして難しくない！？」って気づきました😇

なお、申し込んだのは厳密には`CKA-JP`という日本向けのやつですが、教材や試験が日本語なだけで、認定される証明書ではCKAとCKA-JPの区別はありません（たぶん。少なくとも`-JP`みたいな表記は出てこない）。

### 試験の方式

Linux Foundationの試験の多くは、ブラウザ上の仮想コンソールから実際に試験環境のマシンを操作して、与えられた課題をクリアしていく方式になっています。CKAももちろんその方式になっています。

そう、選択肢から回答をぽちぽち選んでいくような試験ではなく実技なのです。
例えば「myappという名前のnginxのPodを起動せよ」みたいな問題が出て、実際にコマンドを叩いてPodを作成するというような試験になります。
よって、自分で一からマニフェストのYAMLファイルを作成したりする能力が問われます。

試験用にコマンドライン風に仕立て上げたような疑似環境ではなく、実際にCentOSやUbuntuなどで稼働しているリアルな環境になっていて、普通に`/etc`の中を覗いたり`/usr/bin`の中のコマンドを叩いたりできます。そしてそういったLinux上での操作が試験に必要になってきます。
CKAだとkubectlだけではなくapt-get、systemctl、journalctlなども駆使する必要があります。

ちなみに、私が受けた時は次のような環境でした。

- Ubuntu 18.04
- Kubernetes v1.22
- etcd v3.5

## 申し込み当時の知識

- 名前は知ってる
- なんかコンテナベースのクラウド環境みたいなのを作るやつ
- 最小単位はコンテナじゃなくて、Podとかいうコンテナが複数入るやつ
- 触ったことはない
- Dockerは普段から使っているのでよくわかる

申し込み当時の知識は本当にこれぐらいで、触ったこともないしコマンドどころかアーキテクチャも何もわからない状態でした。

## 勉強期間は約1ヶ月

CKAは申し込みから1年間の間に受験すればいいのですが、業務が忙しかったりプライベートも忙しかったりして（言い訳）、なんだかんだしているうちに月日が過ぎていき、「期限が近づいています」っていう警告メールが飛んでくるようになってからようやく着手しました。ダメダメですね。

## 勉強の準備

最初は「そういやDocker DesktopにKubernetes環境をオンにするオプションあったよな」って思って、それを使ってみたのですが、Dockerを起動中はKubernetesクラスタもずっと起動していて邪魔でイマイチでした。

次に、CKADを受ける同僚から[kind](https://kind.sigs.k8s.io/)をおすすめされたので、それを使って少し遊んでいました。
が、CKAのeラーニング教材に着手したあたりで、「あれ、CKAってクラスター自体の管理能力を問われるから、もしかしてkindは不向きでは？」と気づきました……。

CKAではkubeadmを使ったクラスターのアップグレードだとか、障害が起きているノードにsshして復旧させるといったタスクも含まれるので、kind環境では勉強しづらい部分があります。
そうでなくても、Docker上にクラスターが構築されるという特性上、ServiceやLoadBalancerなどへのアクセスでIPアドレス周りがややこしくなるので、やはり通常のVMによる環境のほうが勝手がよさそうです。

それで、これはkubeadmを使ってきちんと環境を作ったほうがいいなと思い、改めて環境の準備に取り掛かりました。
最初は先人のこしらえてくれた「Vagrantで勉強用のKubernetes環境を構築できるセット」などをGitHubで見つけて試したりしたのですが、環境が古かったり、色々なものがセットアップされすぎてて逆に勉強に不向きだったりと、しっくりくるものがありませんでした。

結局、試験勉強も兼ねて公式ドキュメントの環境構築ページをなぞりながら、自分で「Kubernetes勉強用Vagrant環境」を作りました（1master、2workers）。
みなさんも是非とも一度は自分でセットアップしてみると良いかと思います。いい勉強になりますよ（ちなみにある程度ネットワーク周りの知識がないとめちゃくちゃハマります）。

だいたいここまでで1週間ぐらいかかっており、本格的な勉強を始めたのはそれからです。

## 勉強内容

基本的にはバンドルされていたeラーニング教材(LFS258)を毎日少しずつ3週間弱かけてこなしたのと、Killer Shellの試験シミュレーターを2日かけて1回やっただけです。
あとはネット上の問題集などをちょろっとつまみ食いした程度。
決して余裕ぶっているわけではなく、単にリミットが迫っていて十分に勉強する時間がなかっただけです😇

### eラーニング教材(LFS258)

会社で申し込んだやつは教材と試験がバンドルになっているやつだったので、[Kubernetes Fundamentals（LFS258）](https://training.linuxfoundation.org/ja/training/kubernetes-fundamentals/)を一通りやりました。

最後についてる試験対策の演習みたいなやつも一応やりました。
回答例がないのでいまいち手応えがわかりませんでしたが、検索すると似たような問題や、あるいはこの演習のことを指していると思しきQAがStack Overflowなどで見つかります。

### ネットに転がっている問題集

恐らく試験対策で色々検索した人は一度は見かけたであろう「CKA-exercises」とかそういう名前のGitHubリポジトリの問題を3種類ぐらいやりました。
ちょっとバージョンが古くて、模範解答にあるコマンド打ったら`DEPRECATED`って出てきたりしますが、「じゃあ今だとどうやるんだろう？」とか調べながら勉強しました。

### Killer Shellの試験シミュレーター

昔はなかったらしいですが、今はCKA/CKAD/CKSを申し込むと[Killer Shell](https://killer.sh/)という試験シミュレーターを無料で使える権利がついてきます（普通に買うと29.99€します）。

- 36時間使えるセッションが2回分ついてくる
    - 2回とも問題の内容は同じ
- 試験同様に2時間のタイマーがついているが、2時間を過ぎてもそのまま回答を継続できる。
- ブラウザを閉じれば模擬試験の2時間タイマーは止まるが、セッションの有効期限である36時間にはカウントされる。
- 別の環境でもブラウザでログインすれば、引き続き同じセッションで作業できる。
- **UIや機能が本試験の環境とそっくりに作られている**
- スコアも出る（問題別に正否もわかる）
- **問題の解説がとても丁寧**
- 問題の内容が**本試験よりも格段に難しい**
    - Killer Shellの画面にも`Our simulators are harder than the real exam`と書いてある。

実際の試験と似たような画面（機能もほぼ一緒）で体験できるので、ぜひとも事前に触っておいたほうがいいと思います。
ただし時間制限があるのと問題が激ムズなので、まとまった時間を確保してから挑んだほうがよいです。

あまりの難しさに挫けそうになりそうですが、意図的に難しく作られているだけなので、公式ドキュメントを見てじっくり調べながら解いていけば良い勉強になります。ついでにその際に調べたページを本試験に向けてブックマークしておきましょう。

ちなみに、試験の2日前と前日でやりました。崖っぷちですね。でもやっておいてよかったです。

### 使わなかったけど、有用な教材

#### Udemyの教材

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

色々な記事を見てもこれをやっている人が多い印象でした。内容も充実してるそうです。
なかなかいいお値段しているので、セールを狙うとよいかもしれません。

弊社ではUdemy Businessを契約していて、ちょうど対象に入っていたようなのですが、私にはこれをやっている時間はもうなかったのでやりませんでした。

#### 書籍

- [Kubernetes完全ガイド 第2版 \- インプレスブックス](https://book.impress.co.jp/books/1119101148)

バイブル的な本なんでしょうかね？　買ってる人が多そうな印象でした。
体系的に勉強したり、辞書的に置いておくのによいかと思います。

私は買いませんでした。

#### Kubernetes The Hard Way

やはり試験対策として色々検索していると出てくるやつですね。
正直なところ**hard**過ぎです。
たぶん、ここまで理解していなくても試験には影響ないと思います。
「俺はKubernetesマスターになるぜ！」という方は挑戦してみてもいいのではないでしょうか。私はやりませんでした。

#### Katacoda, Kode Kloud

- [Katacoda](https://www.katacoda.com/)
- [Kode Kloud](https://kodekloud.com/)

私は触れなかったのでよく知らないのですが、オンラインの仮想環境でハンズオン的に学習できるサービスのようです。
（KataKodaが環境で、Kode Kloudが問題集っぽい？？）

中でもKode KloudにあるGame of PODsというコンテンツは、ゲーム感覚で腕試しができるとあって、ちょっと面白そうです。

## 試験の準備

- [Training and Certification \- T&C DOCS \(Candidate Facing Resources\)](https://docs.linuxfoundation.org/tc-docs/)に目を通す
- Google Chromeに試験専用のプロファイルを作る
- 試験専用プロファイルで`Compatibility Check`を行う
    - 途中でChromeの拡張機能を入れろと言われるので、試験用のプロファイルでインストールしておく
- 試験用のブックマークを作っておく
- 当日試験を受けるための部屋の確保
- 身分証明書の準備

### [Training and Certification](https://docs.linuxfoundation.org/tc-docs/)に目を通す

英語でたくさん書いてありますが、受験内容について色々と有用な情報が書かれているので全部目を通したほうがいいです。

「試験環境のバージョンはいくつで、 `k`エイリアスと補完は設定済みです。
他にも`tmux`や`jq`などがインストール済みです。」

などといった内容が書いてあります。
ほら、気になってきたでしょう？　読みましょう。

### 試験用のChromeプロファイル

普段使っている、機能拡張やら何やら色々入っているプロファイルで受験して、仮想コンソールの操作がおかしくなったり、不正判定を受けてしまっては怖いので、専用のプロファイルを作りました。

専用プロファイルで改めて`Compatibility Check`を実行して、途中で指示される機能拡張もインストールし直しました。

ちなみに、`Compatibility Check`は3つぐらいチェックマークのつかない項目がありますが、別に問題はないです（確か3rd party cookiesに関するやつとハードウェアスペックのやつと部屋の環境だったかな）。

### 試験用ブックマーク

試験中は試験の画面とは別に1タブだけ追加で開いて、規定されているURLのみ（公式ドキュメント、公式GitHubリポジトリなど）閲覧を許可されているので、そこから自分に必要そうなものをブックマークしておきます。

特に`kubectl create`で作れないタイプのマニフェストサンプルが載っているページなどは大事です。
あとはクラスターのアップグレードやetcdのバックアップとリストアなど、とにかく問題に出てきたらすぐに見られるようにブックマークしておきました。
自分に分かりやすいようにブックマークのタイトルを変更しておくのも有用です。

ちなみに、公式ドキュメントの検索窓で検索するとDiscussion Forumなども出てきますが、そこは試験中に見てはいけないページなので注意が必要です。
重ねていうと検索ページのURLは、見ても良いページの条件を満たしていないのですが、みんなわりと検索しているみたいなのでギリセーフなのかもしれません（自己責任でどうぞ）。

### 部屋の確保

私は自宅で受験したのですが、色々と物が置いてあったりごちゃっとしてるとまずそうだったので、ある程度片付けておきました。
どういう部屋ならいいのかは先の`Training and Certification`に書いてあるので、チェックしておきましょう。

貸し会議室などを利用する場合は、事前に部屋の予約をしたり、Wi−Fiの電波に問題がないか等をチェックしておいたほうがいいでしょう。試験中の接続障害などは自己責任となります。

### 身分証明書

これも`Training and Certification`に書いてあるのですが、ものによってPrimary IDの他にSecondary IDが必要だったり、日本の場合は健康保険証がSecondary IDとして使えるよとか、英語表記の名前が確認できるSecondary IDも必要だよとか色々書かれていて、結局どれがあれば足りるのかわからなかったので、パスポート、マイナンバーカード、健康保険証、クレジットカードをまとめて用意しました。

ちなみに、結果としてはパスポートだけでOKでした。
パスポートがある人はパスポートが確実です。

## 試験当日

### 準備

1時間ぐらい前から部屋の環境をセットアップして、時間までずっとソワソワしていました。
事前に部屋は片付けてあったのですが、念の為に簡単に運び出せるものは運び出しました（引っ越しかよ）。
直前まで勉強して疲れてもなんなので、ざっと公式ドキュメントを眺めるぐらいで特に勉強はしませんでした。

通信に影響があるといけないので、念の為、試験中は動画視聴やオンラインゲームは控えるように家族に協力してもらいました。

### 試験開始

当日は15分前から試験開始のボタンが押せるようになります。
他の体験記を見ると「いつまで経ってもボタンが押せなくて焦った」というような話をよく見かけましたが、そんなことはなく時間とともにすぐに押せるようになりました。改善されているのかも知れません。

スタートボタンを押すと試験の画面が起動して、試験官からチャットで色々と指示が飛んできます。
「どこそこのメニューから画面共有を実行してください」「カメラで部屋をぐるっと映してください」とか。
言われたとおりに操作するだけで、特にチャットに返信したりはしませんでした。

巷の情報では試験官とのチャットは英語という話でしたが、普通に違和感のない日本語でした（ただし、事前に用意された文章をコピペしてるような早さだった）。

ちなみに、CKAD-JPの方は英語だったそうです。試験の違いなのか試験官の違いなのかはわかりません。
ただ、eラーニング教材の方もCKA-JPは日本語なのに対してCKAD-JPは英語だったそうなので、CKA-JPは全体的に日本語化が進んでいるのかも知れません。

なお、試験中の言語についてはいつでも英語と日本語を切り替えられます。なんなら中国語とかも選べるので、CKAかCKA-JPかに関わらず、対応している言語は全て切り替えられるのだと思います。
試験問題の日本語は自然な感じで、特に違和感は感じませんでした。

### 試験中

試験問題の日本語も全然違和感なかったし、Killer Shellとほとんど同じようなUI構成だったので、すぐに試験に集中できました。やっててよかったKiller Shell。

試験中、「あ、これポート違うじゃん…」などと、ついつい独り言を発しては「あっ、喋っちゃいけないんだった！」って、指摘されないかビクビクしてを繰り返したりしましたが、そのくらいでは特に何も咎められませんでした。聞こえてなかったのかも知れませんが。

問題はランダムな順番で出題されるのか、私の場合は序盤にいきなり難問が出てきたり、最後の方でとても簡単な問題が出てきたりしました。
問題間に関連性も感じられなかったので、簡単な問題から解いていくのが良いと思います。
フラグ（しるし）を付けてあとで振り返ったりできます。というか、いつでも好きな問題に行ったり来たりできます。

だいたい1時間ぐらいで1周回って、残りの時間で難問と確信の持てなかった問題を見て回りました。

結局最後までよくわからなかった（自分ではきちんと設定しているつもりなのに、確認操作がうまく通らない）問題があったのですが、時間切れになるまで足掻いて変な実行状態になるよりは、途中点（あるのかは不明）狙いで、ある程度無難な状態にしたままで、5分前ぐらいに試験を終了しました。

## 試験後

正直、短期集中でざっくり勉強したわりには手応えを感じました。
というかKiller Shellのほうが数段難しかった印象しかないです。
「えっ、こんなんでいいの？　Killer Shellだともっとこう踏み込んできてあれこれ要求されるのに」みたいなことを思っていました。やっててよかったKiller Shell。

最後までよくわからなかった7%の問題2つと部分的にわからなかった4%の問題1つをフルに落として、その他ケアレスミス等でいくらか落としたとして、まぁ70%前後でギリギリ合格（66%以上で合格）できるかな？　ぐらいに感じてました。
結果としては、予想を大きく上回るスコアで合格できました🎉

## おわりに

今回のCKA受験をきっかけにKubernetesを触ってみて、わりと楽しいなと感じました。
じゃあ、これからKubernetesを使っていくかというとまた別ですが……。

だいたいみなさんCKAとCKADはセットで受けてるようなので、忘れないうちにCKADにチャレンジするのもいいのかなぁ、と思ったりしてますが、忙しいのは事実なのと気が抜けたのもあって、しばらくゆっくりしたいなぁとも思っています。

最後に、この記事はよくある体験記のひとつに過ぎませんが、これからCKAを受けようと思っている方、興味を持たれた方の一助になれば幸いです。

やっててよかったKiller Shell。いいですか、Killer Shellですよ。