CKAD / CKAを受けてきた
例によって放置しまくってますが,あまり気にせず書きたいことを書くことにします.
タイトルの通り,今年の2月から9月にかけて,Certififed Kubernetes Application Developer(認定Kubernetesアプリケーション開発者.以下,「CKAD」),Certified Kubernetes Administrator(認定Kubernetes管理者.以下,「CKA」)を受けてきたので,何をやっていたかとちょっとした感想を残しておきます.
試験の概要
CKAD:
CKA:
どちらもCloud Native Computing Foundation(CNCF)が運営する,Kubernetesについてのスキルを認定する資格試験. 実際にKubernetesクラスタを操作することで問題に回答する,ハンズオン形式であることが特徴.
CKADとCKAの違い
注意点として,2020年9月からCKAの出題形式(試験範囲,試験時間,問題数など)が大きく変わっていることに注意.古い記事に当たるときは気をつけること.
CKAD | CKA | |
---|---|---|
試験の目的 | 「Kubernetesを利用するアプリケーション開発者(クラスタ利用者)」としてのスキルを認定 | 「Kubernetesのクラスタ管理者」としてのスキルを認定 |
受験料 | 300USD*1 | 300USD |
有効期限 | 受験日から3年間 | 受験日から3年間 |
試験時間 | 2時間 | 2時間 |
問題数 | 15-20問 | 15-20問 |
合格点 | 66% | 66% |
出題範囲 |
|
|
最も大きな違いとして,CKADは,ほぼすべての問題が与えられたKubernetes上のリソースを閲覧/作成/変更することで解答できるものであるのに対し,CKAの試験範囲には,Kubernetesのアーキテクチャについての理解と,クラスタのインストール,アップグレード,トラブルシューティングなどのオペレーションも含まれる点が挙げられる.
個人的な所感として,CKADは一問一問の実装量がそれなりに多く,ちゃんと対策していかないととうてい時間が足りない. 対して,CKAはカバーする範囲が広い分,ひとつひとつの問題は易しめ,といった感じ.
どちらから始めればよいか
「マネージドサービスのKubernetesを雰囲気で使ってきたけどそろそろ覚えたい」とか,「Kubernetesそんなに知らないけどこれからガッツリやっていきたい」のであれば,CKADから始めるのがよいかと思う. Kubernetesを利用する機会と運用する機会であれば,たぶん利用する機会の方が多いし,試験内容が「Kubernetesを利用してアプリを作る」ことにフォーカスしていることが理由だ.
逆に,「SREとしてKubernetesを運用できるようになりたい」とか,「Kubernetesのアーキテクチャについても知りたい」のであれば,CKAから始めることをおすすめする. Kubernetesはもともと複雑な分散システムなので,この試験だけでKubernetesのすべてがわかるわけではないが,これからどういう勉強をしていけばいいかの指針にはなると思う.
試験範囲はわりとかぶっているので,ある程度理解に自信があるのであれば,両方一気に受けてしまうのもよいと思う.
受験記的ななにか
受験前のスペック
以前からクラスタ利用者としてはKubernetesを使っていたが,当時はせいぜい,DeploymentとServiceを作るのと,デバッグが必要になったときkubectl execでコンテナにログインしてログを読むぐらいだった. デバッグに必要なコマンド(kubectl get / describeとか)は知っていたが,それ以外は全然.
2019年秋
8月からアサインされたプロジェクトでKubernetesやIstioに触れる機会ができ,そろそろ体系的に理解したいなぁと思っていた.
社内プライベートクラウドでKubernetesを管理している人たちとお酒を飲む機会があり,そこで,
「自分たちの部署に入るなら最低限CKAは取ってて欲しいよねー」
という話になった.
ちょうど今後何をしていくか悩んでいた時期だったこともあり,Kubernetesという技術自体に興味はあったので,「受けてみてもいいかなー」と思うようになった.
2020年1月
正月特有の謎のやる気のままCKADに申し込んだ.
たぶんこの時にはCKAも受けようと思っていたと思う. 最初がCKAではなかったのは,両方チラッと比較した上で,CKADの方がすでに知っていることが多かったし,とりあえずちゃんとManifestが書けるようになりたかったから,だったかな.
ちなみに申し込んだのは日本版のCKAD-JP. 試験としての違いはないが,日本語で試験監督が受けられる.
2020年2月
そのまま1ヶ月放置してしまったが,重い腰を上げて試験日を決めた(CKAD/CKAは申込日から1年間の間,試験日を自由に選べる.受験場所さえ自分で確保すればわりといつでも予約できるので,かえってモチベーションが上がらなかった).
とりあえずいろいろググってみて,
の#ckad-exam-prepチャンネルでおすすめされていたUdemyの講座*2をやった.
この講座は,
- 動画の講義
- 実際にクラスタを使った理解度テスト
- 模擬試験
に分かれており,講義パートで覚えたことを理解度テストですぐに試せる構成になっているのが良い点. 講師はインド人のようだが,英語の訛りもさほどきつくなく,非常に聞き取りやすかった(英語字幕もある).
最終的に1週間ほどでこの講座を2週したが,試験対策としてはこれで十分だったと思っている.
その他には,
公式ドキュメントのブックマーク(後述)をしたり,
Kubernetes完全ガイド(当時は第1版)
で知識を確認したり,
このあたりで試験範囲とTipsを確認したり,
界隈では有名なKubernetes the hard way(自動化ツールに頼らずVM上にKubernetesクラスタを構築するハンズオン)をやってみたりしていた.*3
試験対策はトータルで2週間ちょいだったと思う.
CKAD当日
CKAD/CKAはリモートで行う試験のため,受験者の責任で「片付いていて」「人の入ってこない」部屋を選んで,受験会場とする必要がある. 試験のために自室を片付けるのは面倒だったので,休日の午前中を選んで会社の会議室を会場にした.
持ち物は,
- パスポート(身分証明用)
- MacBook Pro(Webカメラが付属しているのでわざわざ用意する必要がないのが便利)
- キーボード(いつも使っているHHKB)
- ディスプレイ(会社に転がっていたもの)
予定した時間の15分前ぐらいに試験用のポータルサイトが開くので,そこで待っていると監督者からチャットで指示が来る. パスポートをWebカメラで見せた後,不正防止のために会議室全体や机のまわりをWebカメラで写すように言われる(MacBookだとここがしんどい). その後試験に関しての注意事項が伝えられたあとで,試験開始となる.
普通に時間が足りなくて,3問ぐらい一瞥もできなかった問題があったと思う.
あと,最初は試験問題の言語を日本語にしていたが,翻訳の質があまり良くなく,出題意図がわからなかったので,すぐに英語に変更した. ここは改善してもらえると嬉しい…
翌日,合格通知があった. 得点は86%.
2020年4月
受かった直後はすぐにCKAも受けようと思っていたが,気づいたら1ヶ月経っていた(ちょうどこの頃仕事が忙しかったのもある).
申し込む.
2020年8月
長過ぎた五月病(笑)から復帰したので受験日を決める.
ちょうど前述のカリキュラム変更があったこともあり,変更後の9月に受けることを決めた.
2020年9月
すでにCKADを取っていたこともあり,試験対策としては,
前述のKubernetes完全ガイドを副読本にしながら,
上記のUdemyの講義のCKA版
を2周したのと,
の内容を読んだことぐらいしかない.
特に,クラスタをインストール/アップグレード/トラブルシューティングするタイプの問題については,アーキテクチャを念頭に置きながら,動きを理解するために手順含め何回も試して覚えた.
トータルで1週間程度.
CKA当日
こちらも休日に会社の会議室で受けた.
試験のポータルサイトがアップグレードされていてUXが良くなっていた. 試験全体の流れはCKADと同様.
試験慣れしていたこともあってか,終了20分前には完答できた.
こちらも,翌日に合格通知が来たが,得点は81%だった.
自分の感触的にはほぼ完答だと思っていたので,なんか問題文の誤読が多かったのかな… すこしもやもや.
Tips
以下,試験対策時,試験時に使えそうなTipsをまとめておく. 基本的にCKAD/CKAに共通して使えると思われる.
1. aliasを登録する
試験の性質上,コマンドのタイプ数はどうしても多くなるので,(指を壊さないためにも)できるだけ減らしたい. 毎回入力するコマンドについてはalias登録しておく癖をつけておくとよい.
$ alias k=kubectl
2. リソースのshort nameを覚えておく
Kubernetesの一部のリソースには,"short name"というものが定義されている. 例えば,PersistentVolumeClaimのresource nameは"persistentvolumeclaims",short nameは"pvc"であり,kubectlを使って取得する際には,
$ k get persistentvolumeclaims $ k get pvc # こちらでも可
のようにできる. 必須ではないが,タイプ数が減らせるなら減らした方がよい.
ちなみに,
$ k api-resource
で,各リソースの有効なshort nameを確認できる.
3. YAMLのテンプレートを作る
Kubernetesの魅力の1つは,YAMLファイルのManifestを使うことでInfrastructure as Codeを実現できることだが,この試験に関して言うと,毎回エディタでYAMLファイルを書いてkubectl apply -f
していると率直に時間が足りない.
うまい時短の方法を考える必要がある.
ひとつの方法として,YAMLのテンプレートを作るコマンドを使うことができる. おそらくほとんどの受験者がこの方法を使っているとみられ,この試験の必勝法のようになっている.
例えば,test
という名前の,nginx
コンテナを持つPodを作る際には,
$ k run test --image=nginx --restart=Never --dry-run=client -o yaml > 01-pod.yaml $ cat 01-pod.yaml apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: test name: test spec: containers: - image: nginx name: test resources: {} dnsPolicy: ClusterFirst restartPolicy: Never status: {} $ k apply -f 01-pod.yaml
のようにすればよい. コマンドを覚える必要はあるが,これでかなり時短できる.
コマンドだけで望みのManifestが作れない場合は,テンプレートを作った後にエディタで編集するようにするとよい.
この方法は,DeploymentやServiceなど,主要なリソースについてはだいたい使える.
リソースによって使うコマンドが微妙に違うので,kubectl run
,kubectl create
あたりのヘルプを確認するとよい.
4. kubectlの命令的コマンドを使う
3.に関連して,さらに時短したい場合は,kubectlの命令的(Imparative)コマンドを使うという手がある.
よく使っていたのは,
$ k edit svc mysvc # "mysvc"という名前のServiceを直接編集する $ k set image deploy mydeploy nginx=nginx:1.9.1 --record # "mydeploy"という名前のDeploymentの,"nginx"という名前のコンテナイメージを"nginx:1.9.1"に差し替える.それを履歴に残す $ k expose deploy mydeploy2 nginx --name=mysvc2 --type=ClusterIP --port=80 --target-port=8080 # タイプClusterIPのService"mysvc2"を作成し,"mydeploy2"という名前のDeploymentが内包するPodのポート8080番を,"mysvc2"のポート番号80番で露出する $ k label po mypod foo=bar # "mypod"という名前のPodにfoo=barというLabelを付与する $ k taint no mynode foo=bar:NoSchedule # "mynode"という名前のNodeにfoo=bar:NoScheduleのTaintを付与する
こんな感じ(もっとあったかも). 全部覚えることは不要だが,覚えてちゃんと使えるようにしておけば有利にはなる.
5. kubernetes.ioをブックマークする
試験中には,試験用のWebアプリ以外にもう一つブラウザのタブを開くことができ,
と,これらの子ページの参照が可能.
特によく使うのは https://kubernetes.io/docs/ (Kubernetes公式ドキュメント)だが,毎回必要なページをサイト内検索しているとけっこう時間がかかる. ブラウザのブックマーク機能を使うことは許されているので,よく使いそうなものについては登録しておくとよい.
以下,自分が使ったものを雑に晒しておく.
kubectl Cheat Sheet | Kubernetes
Persistent Volumes | Kubernetes
Configure a Pod to Use a ConfigMap | Kubernetes
Labels and Selectors | Kubernetes
Taints and Tolerations | Kubernetes
Assigning Pods to Nodes | Kubernetes
Managing Resources for Containers | Kubernetes
Configure a Security Context for a Pod or Container | Kubernetes
Configure Liveness, Readiness and Startup Probes | Kubernetes
Manage TLS Certificates in a Cluster | Kubernetes
Define Environment Variables for a Container | Kubernetes
Installing kubeadm | Kubernetes
Upgrading kubeadm clusters | Kubernetes
Operating etcd clusters for Kubernetes | Kubernetes
リソースを作る際,kubectl create
等で作れるリソースについてはコマンドで作り,PersistentVolume,PersistentVolumeClaim,Ingress,NetworkPolicy,CertificateSigningRequestなど,コマンドで作れないリソースについては,ドキュメントからのコピペで作れるようにしておくとよい.
6. kubectl explainを使う
Manifestを編集する必要がある問題が出された際に,どこにどのkey/valueを追加すべきかわからなくなることがよくある.
こういう場合,ドキュメントを調べるより,kubectl explain
を使う方が早く見つけられる場合が多い.
$ k explain po.spec.securityContext # Pod("po")のspec.securityContextについてのヘルプドキュメントを参照する
これにより,YAMLのどこにどういった型の値を入れれば望みの動作になるかがわかる.
これは普段の運用でも使えるコマンドだと思う.
7. エディタに慣れておく
kubectl edit
等で起動するエディタはデフォルトでVimに設定されている.
Vimに慣れておくか,
$ export KUBE_EDITOR="nano"
のようにしてエディタを変えておく.
8. 試験時は解いた問題のメモを取る
試験の各問題には傾斜された配点が付いており,難しい問題には多めの配点が付与されている.
試験中,試験用のWebアプリ内のエディタを使ってメモを取ることが許されているので,試験の最初に全問題の配点をメモし,配点の高い問題から取り組むようにした. 加えて,すでに解いた問題をメモにマークしておいた.
結果的に,無駄な時間を使わずに済んだと思う.
9. Chromeの設定をしておく
試験時に使えるブラウザは,所定のChrome拡張をインストールしたChromeかChromiumのみ. 他のブラウザを使っている人は動きに慣れておくとよい.
あと,意外とやってしまうのが,誤クリックやショートカットキーでブラウザを閉じてしまうこと. できれば不要なショートカットキーは無効化しておくとよい.
試験の流れや試験環境については,
このあたりに詳しい記載があるので一読しておくとよい.
まとめ
CKAD/CKAともに,Kubernetesの基礎を体系的に理解したい人には非常に良い試験だと思う. 特に,実際にkubectlや他のコマンドを使ってクラスタを操作する体験は,実際のプロジェクトでもかなり役立った.
反面,資格試験としてみると,2/3の得点が取れれば合格してしまうので,「技術力の証明」という観点からだとちょっとよくわからないなとは思った. 逆に考えれば,もっと軽い気持ちで受けてみてもけっこう受かるのかもしれない(CKAD/CKAともに,不合格でも追加費用無しで1回再受験ができる).
これにてKubernetesのチュートリアル終了!と思っていたが,今年の11月にCertified Kubernetes Security Specialist(認定Kubernetesセキュリティスペシャリスト.CKS)という新しいKubernetesの試験ができるらしい.
気分が乗ればこっちも受けてみたい,ような気もしないでもない.
*1:"CKAD coupons"とかでググると値引きのためのクーポンコードが見つかる(かも)
*2:いつもは\24,000とけっこうするが,Udemyはちょいちょい95%セールをやってるので,そのタイミングを狙ってみるとよい
*3:Kubernetes the hard way,やってみればわかるが,ちゃんと理解するためにはインフラの知識がかなり必要になる.いちおう手順を最初から最後まで流しはしたが,正直あんまり理解できていなかったと思う