kubernetes
ckad

CKADをさっさと合格するためのTips


tldr

CKADのテクニックを紹介します


はじめに

この前CKADを受けてみました。

kubernetesは今年から使い初め、試験があることもなにも知らなかったのですが、社内の勉強会で存在を知り、なんとなく受けてみました。

結果2回目でなんとか受かりました。

試験を受けてみてkubernetesの理解と同時にCKAD特有のちょっとしたテクニックも必要かなと感じたので、本記事でそれらをまとめていきます。

Screen Shot 2018-12-09 at 16.57.08.png


CKADとは

CNCFが運営しているkubernetesを使用する開発者向けの認定試験です。

CKADはCertified Kubernetes Application Developerの略です。

試験内容は


13% – Core Concepts

18% - Configuration

10% - Multi-Container Pods

18% – Observability

20% – Pod Design

13% – Services & Networking

8% – State Persistence


な感じでカテゴリ分けされて配点が割り振られており、「規定のパーセント」以上を取ることができれば、合格になります。「規定のパーセント」は(たぶん)毎回異なりますが、大体60-70点ぐらいです。私が受けた2回はどちらも66%でした。


難易度

そんなに難しくありません。kubernetesのユーザーとして普段kubectlを叩いている開発者なら少しの学習で合格できます。

ちなみに私は4月までは「kubernetes、なにそれ、どっかの島の名前?」という感じで、そこから開発で使いはじめ、kubectl applykubectl getをまあまあ使っている程度でした。


勉強方法

ここからが本題です。

ここからは大分個人的な意見なので、そのつもりで呼んでください。


どうやって勉強したか

とりあえず模擬試験をやってみて、わからなかったら回答を見て、その中で知識が足りなかったらドキュメントとかその他資料にあたるという、至ってシンプルな方法です。

模擬試験は以下を参考にしました。

https://github.com/dgkanatsios/CKAD-exercises

ここに書いてある問題を2週して、一回目の試験に挑み、62%で見事に落ちました。

さらに2週して75%で合格しました。


試験で使ったテクニック


やらなかったこと


  • screanとかtmuxとかは使わなかった

    使った方が便利だとは思いますが、キーバインドを変えて使っているtmuxのデフォルト設定を覚え直して。。。みたいなことはしませんでした。テスト中余計なつまづきを減らしたかったという思いもあります。


  • 用意されたメモはほとんど使わなかった

    コンソールでほとんど完結するので、よくわからなかった問題にあとから戻るために問題番号をメモった程度でした。



kubectlのTips

以下のページを大いに参考にさせていただきました。学習を始める前に呼んだのですが本当に助かりました。

https://github.com/twajr/ckad-prep-notes


各リソースを作成する

テスト中はささっとdeploymentやpodなどをささっと作成する必要があります。ドキュメントを見ていると結構時間を使ってしまいます。

以下のコマンドで各リソースのyamlファイルを作成したり、ただしい書き方かどうかをチェックすることができます。

基本形

# 標準出力

kubectl run nginx --image=nginx --restart=Never --dry-run -o yaml
# ファイルに出力
kubectl run nginx --image=nginx --restart=Never --dry-run -o yaml > mypod.yaml


RUNコマンドでPod, Deployment, job, cronJobの作成

これがとてもテストで役に立ちました。

runコマンドのフラグを追加したりするだけでPod, Deployment, job, cronJobの作成を自由自在にできます。

下記の表に書いた通り、覚え方もとても簡単です。

自信を持って臨んだ1回目の試験でcronJobの作成が出題されたのですが、--scheduleのそれぞれの時間が何を指しいてるのかがわからず落としてしまいました。笑

リソース
kubectl run <name>
--image=<name>

--restartフラグ

--scheduleフラグ

deplyoment
kubectl run
--image=

pod
kubectl run
--image=
--restart=Never

job
kubectl run
--image=
--restart=OnFailure

cronJob
kubectl run
--image=
--restart=OnFailure
--schedule="* * * * *"


secretの作成

上記のリソースと同じですが、Secretを作成するときに役に立ちます。

kubectl create secret generic my-secret --from-literal=foo=bar -o yaml --dry-run > my-secret.yaml


実行中のリソースを編集する

テスト中は結構時間がかつかつになります。

例えば、「実行に失敗しているポッドがあるから直せ」という問題があった場合、

yamlファイルを落としてきて、誤った部分を下記直して、kubectl apply -fを叩く

といったことはせずに下記コマンドで直接設定を直した方が早いです。

kubectl edit


追加したい設定がspec階層構造のどこに位置しているのかがわからない。

これはテスト中というよりも勉強中の方が多かったのですが、大量の設定項目がspec下に階層的に配置されており、yamlを作成するときに「どこに何を書けばいいんだっけ?」という自体に陥りやすかったです。

そういったときは以下のコマンドで内容を確認することができます。

また、勉強中に「へー、こんなspecがあったのか」と新しい発見ができます。

kubectl explain po.spec

# recursively
kubectl explain po.spec --recursive


最後に

少しでもこれを読んでくださった方々のお役にたてれば嬉しい限りです!