Linux経験ゼロからCKAD（Certified Kubernetes Application Developer）に合格するまで

# この記事について
この度、Cloud Native Computing Foundationが認定するKubernetesの開発者向け資格[「Certified Kubernetes Application Developer（CKAD）」](https://www.cncf.io/certification/ckad/)に合格することができました！

合格証↓

![IMG_2826.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58650/4ada2556-1cbe-6c38-9ee6-adc2420af8b1.jpeg)

この記事では、資格に向けた勉強方法などを共有しようと思います。

> 守秘義務があるため、「どんな問題が出たか」は書いていません

# 僕の前提知識
僕のキャリアはJava開発者から始まり、その後は長くJava系の研修講師をしています。担当する研修はほとんどがSpringやJava EEなどのアプリケーション開発系であり、実務・研修ともインフラ系の経験はほとんどありません。

- Linuxにはほぼ触れたことが無い
    - 個人・業務ともMacなのでbashコマンドなどは多少分かる
    - viエディタによるテキストの編集・保存はできる
- 普段からDockerは使っている
    - データベースなどのミドルウェアはすべてローカルのDockerで動かしている
- ネットワーク系の知識は多少ある
    - [「マスタリングTCP/IP」](https://www.ohmsha.co.jp/book/9784274068768/)読破
    - [CompTIA Network+](https://www.comptia.jp/certif/core/comptia_network/)（ネットワークの入門資格）所持
    - ネットワーク入門研修を担当経験あり
- Cloud Foundryの知識は多少ある
    - Pivotal Cloud Foundry（今で言うPivotal Application Service）の開発者向け資格所持、およびその認定講師

# なぜ受験しようと思ったか
最近はKubernetesの研修も担当しています。そのために、自分に自信が欲しいと思ったのが一番の理由です。

今年の[Pivotal SpringOne Platform](https://springoneplatform.io)に行ってKubernetes一色という空気を感じたので、「もうこれは覚悟を決めてやっていくしか無いな」と思ったのもきっかけです。

# 受験に向けた学習
まずは書籍での学習です。和書・洋書いろいろ読んだ中で、自分に合っていたのは下記の2冊でした。

## [Kubernetes実践ガイド](https://book.impress.co.jp/books/1118101053)
この本は図が豊富なのが特徴です。色々な本を読んでもKubernetesの仕組み（特にService）が分からなかったのですが、この本を読んでようやっと理解できました。

CKAD試験で重要なのは第1部（第1章〜第5章）です。

## [Kubernetes完全ガイド](https://book.impress.co.jp/books/1118101055)
この本は網羅性と説明の深さが特徴です。どちらかというとリファレンスに近い本という印象です。

CKAD試験で重要なのは下記の章です。

- 第4章　APIリソースとkubectl
- 第5章　Workloadsリソース
- 第6章　Discovery & LBリソース
- 第7章　Config & Storageリソース
- 第9章　リソース管理とオートスケーリング
- 第10章　ヘルスチェックとコンテナのライフサイクル
- 第13章　セキュリティ
- 第16章　コンテナログの集約

## 実際にKubernetesに触れる
上記の本を読むだけではなく、Kubernetesを実際に操作しての学習も行いました。

CKAD試験は管理者向け資格ではないので、Kubernetesを自分でインストールする必要はありません。

> 管理者向けには[Certified Kubernetes Administrator（CKA）](https://www.cncf.io/certification/CKA/)という資格もあります。

僕が使ったKubernetes環境は、下記の3つです。

- Docker for Mac
    - Docker内でKubernetesを動かす環境
    - ローカルマシンで動かすのでとにかくお手軽
    - 反面、シングルノードなのでネットワーク通信の仕組みなどが想像しづらかった
- Google Kubernetes Engine (GKE)
    - Google Cloud上のKubernetes環境
    - クラウドでのKubernetes環境の中では、環境構築手順などが比較的お手軽
    - Kubernetesのバージョンがやや古いのが難点
        - 2019年11月時点では、CKAD試験で使われるKubernetes 1.15に対応していなかった
- Azure Kubernetes Service (AKS)
    - Microsoft AzureのKubernetes環境
    - 2019年11月時点ではプレビュー扱いだが、Kubernetes 1.15を利用できた
    - GKEよりはちょっと環境構築手順が難しかった
        - 無料体験の範囲だと2ノード（正確には4 CPU）までしか使えないが、AKSのデフォルトでは3ノードになってて最初の構築に失敗した、などなど

最初の頃はDocker for Macを使っていて、その後にしばらくGKE、試験直前の数日のみAKS・・・といった感じでした。今後はAKSをメインで使うかも。

GKEは無料体験期間が過ぎていたので有償で使っていました。でも、学習目的くらいなら1日100円くらいしかかかりませんでした。

実は、最初のクラウド環境はAmazon EKSを試したんですが、何か設定が悪かったのか上手く動かなかったため、GKEを使ったのでした・・・

> 2020-01-23追記 : 今日あらためてEKSを試したらちゃんと動きました。何だったのかな・・・？

## [CKAD exercises](https://github.com/dgkanatsios/CKAD-exercises)
CKAD試験対策では、**これがいちばん重要**です。

有志の方が作っている、CKAD試験内で重要なコマンドを練習できるリポジトリです。本番の試験でも、使うべきコマンドのレベルはこの練習とほぼ変わりません。**これがしっかりできれば合格できます。**僕は2回通り練習しました。

載っているコマンド自体の練習をすると共に、

- コマンドに `-h` を付けて出てくるヘルプを読む
- `kubectl explain` で調べる
    - 試験中もよくやります
- [Kubernetes公式ドキュメント](kubernetes.io/docs)の該当箇所を読む
    - 試験中もこのサイトは見ることができます
- 前述の書籍の該当箇所を読み直す

などをしていました。最後の書籍以外は、試験本番中でも調べる際に使いますので、どんな情報がどこに載っているかを知っておくことが重要です。

# 試験の形式、申込み
会社の会議室などを使って、自分のノートPCで実施します。詳細については、同じく受験された方々がたくさんブログを書いていますので、そちらを参考になさってください。「CKAD」でググると日本語のブログがいっぱい出てきます。

**試験問題は、日本語（JP）を選択可能**です。しかし、**試験官とのテキストチャットは英語のみ**のようです（後述）。

# 試験当日の準備物
## 必須
- パスポートなど、**英語で書かれた**身分証明書（ID）
    - Webカメラの向こう側にいる試験官さんは、どうも英語しか通じないようです。実は僕はパスポートを用意しておらず、免許証・マイナンバーカード・クレジットカードを見せてと言われたので、それで大丈夫でした。しかし、パスポートを用意するのが一番早いと思います
- ノートPC
    - Google Chrome（Extensionの追加が必要）
    - Webカメラ必須
    - たまにブラウザ内で試験システムが固まるので、スペックが良いほうがいいです
    - 僕が受験したとき（2019年11月時点）は、「macOS Catalinaは互換性に問題があります」と書いてありましたのでご注意を😅

## あった方がいいもの
- 飲み物
    - ラベルを取った透明なペットボトルに入った透明な液体でなければならないようです
- 追加のモニター
    - [kubernetes.io/docs](kubernetes.io/docs)を見る用。1画面ではキツイので、あったほうがいいです（試験官に確認したところOKと言ってくれました）

# 問題を解く上での注意点
## クラスタの切り替え、namespaceの指定を忘れずに！
とにかく時間が足りません。間違ってる暇は本当に無いです。この試験では、Kubernetesクラスタが複数用意され、さらに各クラスタごとに複数のnamespaceが用意されています。

まず、各設問を解く前に `kubectl config use-context クラスタ名` でクラスタを切り替えましょう。

また、各 `kubectl` コマンドを実行する際は `-n namespace名` を忘れずに指定しましょう。

> 僕は1回namespaceを忘れて実行してしまい、慌てて修正しました・・・

## 配点の高い問題から解く
僕の実感では、試験時間内に全問を解くのはかなり難しいです。各設問には配点と思しきパーセンテージが書かれているので、配点の高い設問から解いていきましょう。各設問はクラスタやnamespaceなどを利用して依存関係が無いように設計されていますので、問題を解く順番は関係ありません。

オススメの方法は、試験開始直後に全問を軽く読んでいって、NotePadに問題番号・配点・何の問題かをメモしておくことです。

## 画面に表示されている残り時間は正確でない
画面左上のほうに「残り時間○分」と表示されているのですが、これは正確な時間ではありません。

正確な時間は、試験官にチャットで確認できます。僕のときは、「残り6分」と書いてあって絶望してたら試験官の方から「残り20分ですよ」と教えてくれました。その後の20分間の集中力は凄かったですｗ

## YAMLはなるべく書かない
全部YAMLを書いていると、時間が足りません。なるべく、CKAD exercisesで練習したコマンドで乗り切りましょう。

既存のPodなどを修正する場合は、 `kubectl edit` コマンドで、必要箇所のみを修正しましょう。

どうしてもゼロからYAMLを書かなければならない設問もいくつかありますが、[kubernetes.io/docs](kubernetes.io/docs)で検索してコピペ（これは試験中でもOK）してから編集しましょう。

# 試験終了〜合格発表
試験終了から36時間以内に、メールで結果が届きます。営業日とかは関係ないようで、僕は受験したのが金曜日にも関わらず日曜に結果が届きました。

合格すると、冒頭に載せた合格証が届きます。メール内のリンクからLinux Foundationのサイトにアクセスすると、こんな電子バッジも取得できます。

![logo_ckad.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58650/c3a5aa6f-2af6-7f4a-90fd-4879820fc18a.png)

残念ながら不合格の場合は、無料で1回だけ再受験ができます（有効期限は12ヶ月以内）。

# 受験してみて
Linuxなどインフラの素養はあまり無かったのですが、何とか合格できました。

ただし、試験中にはbashコマンド操作やviエディタによる操作は必須なので、それに慣れていない方はその練習もしておいたほうがいいでしょう。

今後、合格を目指す方の参考になれば嬉しいです。