はじめに
三菱総研DCS 基盤開発部 山内です。
Kubernetes(以下k8s)の資格試験である、Certified Kubernetes Administrator(以下CKA)を受験しました。
k8sクラスタ管理者としての力を問われる試験です。(他にDeveloper向け試験があります)
k8sを体系的に理解するにはどうすればいいか、迷った部分が多かったです。
今回はこれからk8sを学ぶ人の取っ掛かりになればと思い、以下のようなことを書いてみます。
ちなみに、私が受験した際の情報は以下の通りです。 なお、実際にこんな問題が出た、という情報は出せないのでご承知おきください。
- 受験時期は2020年3月下旬
- 勉強期間は、合計で1ヶ月程度
- k8sバージョンは1.17
- スコアは83%で合格ラインは74%
受験の流れ
CKA受験を決意
事の発端は、課長に「k8sやってみる気はあるか」と聞かれ、二つ返事で「はい」と答えたことでした。
それまでk8sはおろか、コンテナも触れたことのない私でした。
ただ新しいことに触れてみたい気持ちだけ、ありました。
k8sの勉強を開始
12月下旬、後述する集合研修を受けて、k8sについておおよそのイメージを掴むことができました。
ただそれ以降しばらく、仕事の忙しさを理由に、勉強は一時中断しました。
2月も下旬となり、勉強に充てる時間を作り出せるようになってきたため、3月はほぼ毎日、自宅学習しました。
資格試験の形式や概要を確認
自宅学習と並行して、資格試験自体の概要やルール、形式を確認しました。
定められたルールに則っていない場合は、失格になってしまうため、これはとても重要なステップです。
具体的には、
- 試験当日の環境(試験を受ける場所や周囲の環境)
- PCのスペック
- 事前導入が必要なツール
など、様々な事柄がルールとして明文化されているため、必ず確認するようにしましょう。
CNCFの試験紹介ページにCandidate Handbookという資料があるので、これに目を通します。
試験の予約と試験場所の確保
CKAは受験環境についても、様々な規定があります。
- 受験場所は受験者で用意すること(テストセンターでの受験ではない)
- カフェなど公共の場はNG
- 自宅で受験する場合も、机と椅子以外できるだけ何もない空間を用意すること
などです。
自室では定められた試験のルールにそぐわないと考えたため、試験場所として貸会議室を確保することにしました。
私の場合は、試験が予約できる日時と貸会議室が予約できる日時を合わせるのに苦労したので、余裕を持って予約した方がよいです。(当たり前ですね...)
試験当日
試験当日の流れは、多くの方がインターネットで情報を公開なさっているため、割愛します。
私は月曜日の20時から試験を受けて、水曜日の午前11時ころに結果がやってきました。
今まで受けた試験より、受験の準備に苦労した
今まではテストセンターで受ける資格試験が多かったため、今回はルールの確認や場所の確保など、事前準備に苦労しました。
試験前にあたふたしないよう、試験開始直前までのイメージをしっかり持っておくことで、当日の試験に集中できると思います。
何を勉強したか
資格試験勉強は、合格を目指したお勉強 = 対象を体系的に学ぶ機会になるものだと思っています。
そこでCKAのカリキュラムを見てみましょう。以下のような情報が開示されています。
詳細は公式資料をご参照ください - CKA_Curriculum_V1.17.pdf(バージョンは最新版を参照)
- Application Lifecycle Management 8%
- Installation, Configuration & Validation 12%
- Core Concepts 19%
- Networking 11%
- Scheduling 5%
- Security 12%
- Cluster Maintenance 11%
- Logging / Monitoring 5%
- Storage 7%
- Troubleshooting 10%
(出典元:Exam Details|https://www.cncf.io/certification/cka/)
これを見ても、「あぁ、こういうのを勉強すればいいんだ!」とは理解できませんでした。
今振り返ってみると、このカリキュラムが表しているのは、
- k8sの機能を使うことができるか、という問題は、配点が低い。
- k8sのアーキテクチャを理解しているか、という問題は、配点が高い。
ということだと思います。
配点が10%未満の分野は、「k8sの機能を使って適切な操作をする」問題が多いです。
配点が10%以上の分野は、「k8sのアーキテクチャを理解した上で答えを導き出す」問題が多いです。
ここで言えることは、
小手先のテクニックではなく、k8sそのものがどのように動いているのかをちゃんと理解しましょう!
ということです。
小手先のテクニックも試験に合格する上では役に立ったので、実践したものを「おまけ」で紹介しています。
何で勉強したか
CKAの対策本や問題集というのは見つかりませんでした。
いくつかCKAコースと題した研修やWebで見られる授業がありました。
私が教材としたものは、以下の通りです。
- 集合研修: Kubernetes Administration(LFS458)日本語版
- Web授業: Udemy
- 書籍: Kubernetes完全ガイド
上記についてそれぞれ、個人的に感じたメリット/デメリットを挙げます。
教材
|
メリット | デメリット |
Kubernetes Administration
(集合研修)
|
広く浅く学べる
概要を学びつつ、手を動かしながら慣れる機会
初心者にとっての取っ掛かりになる
|
これだけで合格できる程の情報量ではない
|
Udemy(Web授業)
|
いつでも勉強できる
手を動かせる環境付き
|
題材になっているk8sバージョンが古い
授業は全て英語
|
Kubernetes完全ガイド(書籍)
|
詳細にわかりやすく解説されている。
|
CKAを受験するという観点では、詳細すぎる。
|
個人的にはUdemyのコースを基本として、わからないところについて書籍で理解を深める方法を採りました。
集合研修を最初に受けていたことで、Udemyのコースに苦労せずについていけたと思います。
そのため、集合研修でなくとも、k8s公式のチュートリアルなどでk8sとはどんなものなのか、イメージがつくようにしておくと良いと思います。
上記で挙げたものは内容が更新される場合があると思いますので、最新の内容を確認してみてください。
どのように勉強したか
アウトプットの繰り返し
CKAは実技試験です。
内容を暗記しているかではなく、理解してアウトプットできるかが問われます。
そのため、情報をインプットしアウトプットするという基本的な方法が一番効果的です。
暗記しなくてOK
これに加えて、CKAでは公式ドキュメントの一部は試験中に閲覧やコピペ可能です。
つまり、暗記は全く必要なく、いかに理解しているかが重要になります。
そのため、暗記する時間は0にしてOKです。
"こういう場合は、何をどうすればいいか"を理解する必要があり、
それを実現するためのパラメータ名や値は、ドキュメントから引っ張ればOKということです。
実際の試験をイメージしながらアウトプットする
以下のように実際の試験の流れをイメージしてアウトプットすることが重要だと思います。
- 問題文を読む
- 手立てを考える
- 詳細な方法をドキュメントから探す
- 答える
Udemyのコースにあった簡易的な練習問題を使って、上記の流れで練習していました。
さいごに(まとめ)
さいごに、要旨をまとめて書いておきます。
- 受験の流れ
- 事前準備が大変なので、前広に対応すればよかった。
- 何を勉強したか
- k8sのアーキテクチャを理解することに努めた。
- 小技みたいなものは後回しにした。(後でちゃんと確認した。)
- 何で勉強したか
- 集合研修で入門し、Web授業で勉強しつつ、書籍を参考書とした。
- どのように勉強したか
- まずは1度インプットする。
- その後はひらすらアウトプットする。
- 暗記はまったくしていない。
暗記せずに理解しよう
k8sのアーキテクチャ全体と各機能の役割を理解でき、
それらをアウトプットできるようになっていれば合格できるかなといった印象です。
ただ、理解すべきことが多く、試験に直接関係ない情報も世に出回っているため
迷子にならないようにカリキュラムを意識して、学習する必要があります。
受験の目的を忘れずに
"ここを抑えておけば合格できるよ"というものはないと思います。
出題範囲に比べて、試験問題は20問程度と少ないため、山を貼るのはリスクが大きいです。
k8sを学びたいなら純粋にカリキュラムに従って、体系的な知識を身につけましょう!
(1度までなら無料で再受験できますし。)
おまけ
私はk8sを勉強したいから、CKAを受験することにしました。
極論、試験結果より培った知識や経験の方が大事です。
しかし、不合格になったら悔しいです。受験するなら合格しないとどうしても気が済みません。
(すごく個人的な感想)
というわけで、CKAに合格することを目的としたときに、有効だと感じた小技をいくつか紹介します。
- 公式ドキュメントをブックマークする。
- yamlファイルでなく、コマンドでぱぱっとリソースを作成する。
- わからない問題を捨てる勇気をもつ。
公式ドキュメントをブックマークする。
kubectl applyする際のyamlファイルの内容や、あることを成すための一連の操作について公式ドキュメントに載っているページがあります。
- これをブックマークバーに保存します。
- カリキュラムの分野ごとにフォルダ分けして、すぐにアクセスできるようにしておきます。
- yamlを書く必要が出てきたら、ブックマークからそのページにアクセスしてコピペします。
- また、ある一連の操作が必要な問題が出てきたら、同様にコマンドをコピペします。
yamlファイルでなく、コマンドでぱぱっとリソースを作成する。
私はPodやDeployment、Serviceの作成は主に以下コマンドで実施しました。
# Deploymentの作成
kubectl run [deployment名] --image=[イメージ名] --replicas=[レプリカ数]
# Podの作成
kubectl run [Pod名] --image=[イメージ名] --restart=Never
# 既存Podを新規Serviceで公開する
kubectl expose pod [Pod名] --port=[Serviceのport] --name=[Service名]
わからない問題を捨てる勇気をもつ。
試験本番で、わからない問題が出てきたら、執着せず捨てることを視野に入れましょう。
解ける問題で確実に得点するための時間を確保するという目的です。
むやみに捨てるのは、もちろん合格が遠のくだけですのでやめましょう!
私は、明確な意思を持って1問捨てました。(他にも失点したようですが...)
CKAは3時間で20問程度を解くことになりますが、時間的に余裕はないです。
自分の理解度をきちんと示すためにも上記のような小技は、役に立ったと感じています。
以上、これから資格を受ける人やk8sを学ぶ人の参考になれば幸いです。