12月末にCKADを、3月末にCKAを受験して合格しました。この記事では受験の動機や受験してよかったことなどについて書きます。
なぜ受験したのか
Kubernetesを中心とするプラットフォーム開発に携わるための基礎を学び、深く学んでいくための見取り図(目次)を頭に入れたかったためです。
僕は2018年、決済サービスをGo、Kubernetes、GCP、gRPCを利用して開発する会社に転職しました。いずれも業務では未経験な状態でスタートし、特に苦手意識が強かったのがKubernetesです。Serverlessが好きで、書いたコードはワンコマンドでデプロイされてくれ!という気持ちでした。Dockerファイルは見たくも書きたくもない(ほぼ書いたことない、書けない)し、Kubernetes何もわからんかったです。
そういう状況で出会ったのがKnativeでした。サーバーレス × Kubernetesという文脈なので、趣味のサーバーレスを継続しつつ、業務に近い領域ということで興味を持ちました。
そこから何冊かKnativeの本を書いたり、登壇してアウトプットしながらKnativeを学んでいきました。その中でそもそもKnativeはKubernetesのカスタムリソース・カスタムコントローラーという仕組みで実現されているということを知り、Kubernetesに入門しました。
勉強していく中で、会社のMicroservices Platformチームが開発・運用する仕組みに興味を持つに至りました。マイクロサービスの開発者がアプリケーション開発に集中するための仕組みをいろいろと提供してくれたいたことを改めて実感し、僕も加わりたいと考えるようになりました。
- MTC2018 - Microservices Platform at Mercari
- メルペイのマイクロサービスの構築と運用
- Terraform Ops for Microservices
- Kubernetes manifests management and operation in Mercari
- Securing microservices continuous delivery using grafeas and kritis
- Kubernetes Cluster Monitoring
ただ、単に技術スタックの深い知識と経験がないだけでなく、インフラエンジニアとしても働いたことはありません。どうにかしてキャッチアップが必要です。
そこで、これまでのインフラレイヤーをいい感じに抽象化したKubernetesを主軸にインフラ構成を学び、目の前のタスクに応じて深掘りをしていくと効率的にキャッチアップできるのではないかと考えました。その大まかな見取り図を整理する上でCKADやCKAのような試験はうってつけだったのです。
さらに、いずれも実際にkubectlを操作しながら問題を解き、時にデバッグもするので本を読んで鉛筆を転がして選択肢をマークして終わり、みたいなことにもなりません。相対的に知識は定着します。
これらを踏まえ半年くらいで両方を取得することにしました。
両方取得できたらMicroservices Platformチームで十分戦力になるということはないけれど、どちらもとれないようでは話にならないのだろうなぁという気持ちで自分にプレッシャーをかけました。
CKAD
準備
CKAを2019年10月〜12月に取得するというのがこの時期のプライベートOKRを立てたときのKey Result 2でした。
やったのは2種類です。
10月、11月の平日毎朝30分〜1時間本を読み直し、ServerlessDaysの諸々の準備が終わった12月半ば以降CKAD-exercisesを3周手を動かしながら解きました。
Kubernetes「超」完全ガイドは大幅にパワーアップするようで楽しみですね!これから手にされる方はバージョンにご注意ください。(※ツイートは4/1のものです)
『Kubernetes 超完全ガイド第三版』がいよいよ本日発売です。ページ数は3倍、図は2倍になりました。よろしくお願いいたします。
— MasayaAoyama(青山 真也) (@amsy810) March 31, 2020
Kubernetesの入門には『Kubernetes: Up and Running: Dive into the Future of Infrastructure』もよいと聞いていて、ちょうど第2版も出たところだったので並行して読んでいました。
最終的に準備期間がかなり限られ、CKAD-exercisesを何周かするしかできないと自覚した時点(12月初旬)でターゲットをCKAからCKADに変更しました。
本番
12月28日の朝に受験し、29日夜、神戸サウナ & スパという、僕がもっとも好きなサウナの1つで整った直後に結果を受け取りました。
ボーダーライン66%の69%でギリギリでした。問題見て「わからん…」みたいなものはなかったものの、時間は全然足りませんでした。
全然時間足りないのでYAMLは書くな。kubectlの命令的コマンドでがんばれ!みたいなのを散々聞いててこれなので、2時間19問は侮れません。
Podのeditできるケース・できないケースを理解してなくて試験中に混乱した覚えがあります。
まとめると神戸サウナ & スパは最高です。
CKAD受かってたー!🐳🐳🐳来期はCKAがんばろう🐸😺 pic.twitter.com/jaEjIWsNbd
— 🐸😺Knative Gateway本@技術書典応援祭 (@toshi0607) December 29, 2019
よかったこと
普段マイクロサービスを開発する中で書いていた(コピペしていた)YAMLがほぼDeployment、Service、CronJob、Jobに偏っていて、kubectl操作に全然慣れていなかったことを認識できました。
特にkubectlのexecで実行中のPodに入ったり、busyboxなどで一時的にPodを作ってshell操作したりは「本を読んで知っていたが、実際に使ったことがなかったのでいざというときに手が動かなかった」状態でした。今ではデバッグにとてもよく使っています。
運用上自分で作らずSREに作成を依頼していたSecretなど、自分では操作していなかったこともたくさんあり、どういう情報が必要なのか、どう依頼されないと困るのかなども理解が進みました。(もちろんドキュメント化されています)
僕には気付いたら机上の勉強ばかりで手を動かさない時期がある弱点があるので、それを補いながら進められたのが何よりもよかったです。
CKA
準備
CKAを2020年1月〜3月に取得するというのがこの時期のプライベートOKRを立てたときのKey Result 1でした。
当初取り組もうと思っていたのはこの2つです。
kubernetes-the-hard-wayは1月に1周やって、証明書とネットワーク周り厳しいという感想を持ちました。
あとはCKAD-exercisesのようにcka-lab-practiceを何周かしようと思ったのですが、クラスタ立てたりするのは準備なかなか大変(回数あまりこなせそう)だなぁという気持ちになったところに出会ったのがUdemyのCertified Kubernetes Administrator (CKA) with Practice Tests
という講座です。
15分くらい講義を聞いてみてよさそうだったので、技術書典で新刊を出した3月5日頃から再開して取り組みました。
講義にはKatacodaを利用したPractice testが47種類とMock examが4種類付属しています。それぞれ5〜10分と30〜40分かけて取り組むもので、かなり練習になりました。試験直前の1週間にはMock examを3周取り組みました。いずれもテスト環境が用意され、指定されたDeploymentを作ったり、壊れたクラスタをデバッグしたり、クラスタを立てたりする実践的なものです。
アンケートに基づいてコンテンツが改定されているのもポイントで、Dockerやネットワークプラグインの仕組みや証明書の基礎講義も追加されていて痒いところに手が届く作りです。
作者も「CKAはこれだけやっていれば大丈夫」と言うだけあって、完成度が高かったです。
講義やテストで質問があれば、SlackやFacebookで質問ができます。Slackはかなり活発で作者含め作者の会社?の人たちがすぐさま質問に答えてくれ、合格者がたくさん報告していました。
あとは、クラスタ管理には『Managing Kubernetes: Operating Kubernetes Clusters in the Real World』がよいと教えてもらったので、1月上旬に読みました。
本番
3月28日の朝に受験し、3月29日の夜に結果を受け取りました。外出を自粛していたのでサウナには行っていません。
ボーダーライン74%の94%でした。3時間24問。今回は時間も40分以上あまり、特にわからない問題もなかったはずが何か間違っていたようです。
CKA受かってたー!CKADはあんまりよくなかったけどCKAは94%だったので年末よりは進捗してそう😊 そういうわけでYAML Engineer やっていきます🐳🐳🐳 pic.twitter.com/JTfqFkUiGq
— 🐸😺Knative Gateway本@技術書典応援祭 (@toshi0607) March 29, 2020
よかったこと
実務でクラスタのメンテナンスをするにあたり、kubectl drainやuncordonは必要なもののそこまで機会があるわけでありません。
taintやtolerationsの設定は本を読むだけではNode affinityとごっちゃになっていました。
それらをKatacodaのテスト環境で何度も試したことで、いざ実務でやるタイミングがきたときも困らずに取り組めました。
Udemyの講義で出てきたネットワークの仕組みや証明書の基礎は全然理解していなかったのと、最近は仕事でずっとIstioを触っているのでネットワークの基礎を学ぶモチベーションが高まったのもよかったことです。
CKAもよかったですが、教材がよかった感があります。
今後学びたいこと
きっと1〜3月の振り返りブログでも書きますが、ネットワークの基礎勉強もしつつ、GCPとTerraformに軸足を置きそうです。
無事Microservices Platformチームへの異動も確定したのでやっていきます。