CKAD(Certified Kubernetes Application Developer) を取得した

次の職場でK8sを結構触ることになりそうなので、K8sについて幅広く知っておきたくて勉強のために取得した。自分でGKEに何か立ててみるでもよかったのだけど、過去に趣味でやったことがあったし、何となく動いたーで終わっちゃいそうだったので、体系的に学ぶために受験を決めた。試験も選択肢から答えを選ぶような形式でなく、実際にコマンドやyamlを書いてapplyするという実戦形式だったのも受験の後押しになった。

こちらはK8sを利用する開発者向けの資格なのだけど、Certified Kubernetes Administrator (CKA)というクラスタ管理者向けの資格もある。K8s自体がどうやって動いているかなどはCKAの方が勉強になりそうなので、そちらも取得するつもり。

受験前の自分の経験値

インフラエンジニア / SREではなく、アプリケーションエンジニア。K8sはGKEは自分の個人アプリで試しにつかってみたり、仕事でSREの人が用意したYamlを読んだりいじったりした程度の経験値。Pod / Deployment / Serviceなどの概念についての理解はあった。

やったこと

CKADでgoogle検索すると色んな方の体験記が出てきたので、それを参考に以下のようなことをやった。勉強期間は大体2週間くらい(仕事は週2〜3くらいに抑えた)。

Kubernetes完全ガイドを読んだ

体験記の殆どの人がこの本を読んだと書いてあったので、自分も購入して読んだ。K8s関連のことが体系的にまとまっていて、まずこれを読んでK8sについて全体感を掴んだのはとても良かったと思う。完全ガイドというだけあって、単純に概念を紹介するだけでなく内部的なアーキテクチャに踏み込んだ説明もあって、理解が深まった。

Kubernetes完全ガイド (impress top gear)

Kubernetes完全ガイド (impress top gear)

  • 作者:青山 真也
  • 発売日: 2018/09/21
  • メディア: 単行本(ソフトカバー)

Linux AcademyのCKADコースを取った

ビデオでCKADの出題範囲について学ぶコース + いくつかの模擬試験付き。ビデオと資料は全て英語で英語字幕しかないが、かなり丁寧に説明してくれるので英語に苦手意識がなければ大丈夫だと思う。またHands-On Labsという機能があり、サービスが用意してくれる練習用のK8sクラスターにsshして実際にkubectlコマンドを叩くことができる。

linuxacademy.com

コース自体に全く不満はないものの、月額$49で全てのコースが見られるという料金プランしかないので、CKAD以外に特に受けたいものがない場合はちょっとコスパが悪いかもしれない。

Udemyならセール期間なら¥24,000が93%OFFで¥1,610になっていたりするので、セール中に買えるならこちらをお勧めする。模擬試験の問題もこちらの方が多い。 Kubernetes Certified Application Developer (CKAD) Training | Udemy

github.com/dgkanatsios/CKAD-exercises

CKADのための練習問題がまとまっている。この問題がそのまま出るわけではないけど、これがスラスラ解けるようになれば合格できると思う。練習を始めるときにGKE上に環境を立ち上げて、練習が終わったら消す…みたいなことを以下のようなMakefileを作って簡単にできるようにしておいた。

setup:
    gcloud container clusters create k8s --cluster-version 1.14.10-gke.27 --zone asia-northeast1-a --num-nodes 2 &&\
        gcloud container clusters get-credentials k8s --zone asia-northeast1-a
cleanup:
    gcloud container clusters delete k8s --zone asia-northeast1-a

わからない問題があるとついついググりたくなってしまうけど、試験中はK8s公式のドキュメントしか参照できない(しかも試験とは別に開けるタブは1つだけ!)ので Kubernetes Documentation - Kubernetes で調べる癖をつけて、特に設定が複雑なやつはブックマークしておくと良い。自分はConfigMapとSecretをボリュームとしてマウント、環境変数として設定する方法がなかなかスッと覚えられなかったのでブックマークしてすぐにページを開けるようにしておいた。

github.com

Linux Academyのコースの進捗に合わせて一回、 Linux Academyのコースを全部やった後に一回、試験前に一回と合計3週した。試験前には3時間くらいで全部のエクササイズが終わるようになっていた気がする。

他には試験についてtipsがまとまっている以下のページも目を通した。 github.com

試験本番

試験部屋の準備

試験中だれも入ってこない、静かな部屋で、机の上にPC以外のものがない状態にできるならOKということだった。自分が普段使っている机は物が多くて片付けるのが不可能だったので、寝室にちゃぶ台を持ち込んで受験した。部屋自体にものがあっても問題ないと思うのだけど、机の上に電子機器やノートを置かずにキレイにするという条件は結構厳格っぽいので、机の上にスピーカーやスキャナー、プリンターとか置いてあるなら片付けておくのが無難な気がする。

試験前の試験管とのやりとり

試験前に机や部屋の状態、IDのチェックが行われた。

受験記によってはパスポートが必須とあったのだけど、ガイドを読む限りは運転免許証とクレジットカードで良さそうだったので、そちらを準備して待機。試験前のチェックが始まり、試験管に運転免許証とクレカを見せたら「アルファベットで書かれたIDは持ってないの?」と聞かれて、終わったか…?と思ったけど大丈夫だった。最初からパスポートは持ってません!って言った方がスムーズだったかも。あとMacの強制終了メニューを見せてくれと言われて指示されたコマンドを押したのだけど、karabinerのせいで反応せず焦ったりした。

試験

試験が始まるとWEB上に問題文と回答用のコンソールが表示される。試験のためのサイトが大分古臭かったので不安だったのだけど、試験自体のUIは割と洗練されていて、WEBのコンソールもスムーズで特にイライラさせられることはなかった。コピペがctrl + c でできないなどの制約があるのでそれは注意。(Macの場合は⌘ + cは普通に使えます)

時間が足りない!という感想が多かったのでかなり身構えていたのだけれど、自分の場合はたまたま簡単だったのか30分くらい時間が余ってしまって逆に不安になった。基本的に1からyamlを書いたりせず、kubectl editで済ませたり、dry-runしてyamlの雛形を作ったり、ブックマークしておいた公式ドキュメントのページからコピーアンドペースト(公式ドキュメントの参照は認められている)するようにしていたのが良かったのかもしれない。

結果

試験終了後に「36時間以内に結果を連絡するよ!」というメールが来る。自分の場合はだいたい30時間後に連絡がきた。特にわからなかった問題はなかったのだけど、ボーダー66%のところ91%だった。一通り見返したはずだけどnamespaceとかで何かミスっていたのかもしれない…

よかったこと

実際の開発現場でガンガンkubectl editしたり、手元のyamlファイルを本番にapplyしたり…みたいなことは基本ないとは思うのだけど、kubectlのコマンドになれることでK8sのリソースに対する理解も深まったと思う。またどなたかのブログにも書かれていたのだけど、busyboxなどで一時的にpodを作ってデバッグする、、、あるいは既存のpod上でデバッグのために何かを実行してみる、、、といった操作は本を読んだだけだとなかなか身につかないと思うので、手を動かすことが身につけられたのは良かった。

今後

CKADはK8sを利用する開発者向けということもあって、K8s自体に踏み込んだことは完全ガイドのほかは特に勉強できていない。UdemyでCKAのコースも取ってみて、もう少しK8s自体について詳しくなりたいな〜と思っている。