はじめに
CKAD-JPに合格しました。初めての実技、k8s試験ということもあって、色々混乱したので、記事にすることにしました。これから受ける人の参考になれば幸いです。
認定Kubernetes試験の種類
以下の試験があります。
- 認定Kubernetesアプリケーション開発者(CKAD)
Kubernetesクラスタ内のリソースに着目した試験です。 - 認定Kubernetes管理者(CKA)
Kubernetesリソースだけでなくクラスタ自体の設定にも触れた試験です。 - 認定Kubernetesセキュリティスペシャリスト(CKS)
セキュリティについて、KubernetesだけでなくLinuxの知識も必要になってきます。
CKAを合格している必要があります。 - 認定Kubernetesクラウドネイティブアソシエイト(KCNA)
2022年7月に日本語版が出た新しめの試験です。Kubernetesだけでなくクラウドに関する問題が出てきます。
他の試験とは異なり選択式の問題になります。
概要は以下のサイトに書いてあります。
CKAとCKADの違いが分かりづらいと感じたので、参考にしたサイトを載せておきます。
難易度について、、、
CKS>CKA>CKADなのかなと思っています。それぞれコンセプトが違うので、何ともですが、必要なスキルが幅広いと勉強量が多いと思います。KCNAは選択式でクラウド全体の話になるので、他とは全く違うものになるかなと思います。
日本語試験について、、、
それぞれの試験で日本語版(CKA-JP/CKAD-JP/CKS-JP/KCNA-JP)があります。ただあまり違いはないイメージです。2023年1月1日から英語を話す試験官になりましたし、日本語の問題文が微妙です。。教材含め問題文は英語だったので試験も英語にしました。言語は試験中に切り替えられます。
※その他参考にしたサイト
https://linuc.spa-miz.com/2022/09/27/kubernetes-crowdnaitiate-kcna-test-of-test/
https://www.linuxfoundation.jp/press-release/2022/07/kubernetes-and-cloud-native-associate-certification-is-now-available-in-japanese/
https://github.com/moabukar/Kubernetes-and-Cloud-Native-Associate-KCNA/blob/main/mock-exam-questions/questions.md
https://github.com/moabukar/CKS-Exercises-Certified-Kubernetes-Security-Specialist
https://kubernetes.io/ja/training/
実技試験の方法について
詳細は以下のページに書いてあります。受験日までに読んでおくことをお勧めします。
オンライン受験の要件やショートカットキーの違いなど詳しく書かれています。
注意点としては自分のブックマークが使えないことです。
たまにブックマークを作るような試験対策を見かけますが、現在は使えません。
試験ではPSIというブラウザをインストールします。PSI上でVMを操作してブラウザやターミナルを立ち上げます。私はブラウザからk8sのドキュメントを見て、検索窓を使って、欲しいリファレンスが載っているページを探していました。
文字だけだとイメージがわかないと思います。恥ずかしながら、初見は「どうやってターミナル立ち上げるんだ!?」ってなりました。。そのため、後述する模擬試験を1度はやっておくことをお勧めします。
試験の申し込みの流れ
以下のサイトの通りです。
https://lpi.or.jp/k8s/exam/
再受験できるか、予約日は変更できるかなどは以下のサイトを読むことをお勧めします。
https://lpi.or.jp/k8s/faq/
予約自体も色々なサイトを行き来して混乱するのでまとめておきます。
- EDUCO-IDの登録
以下のサイトにアクセスしてEDUCOのアカウントを作成します。
https://ma.educo-j.or.jp/ - 受験用のクーポンの購入
以下のサイトで購入します。
https://k8s.stores.jp/items/5f5b082df4cd006a5c33d521
クーポンが発行されるまで1日ほどかかりました。メールにて連絡が来ました。 - LFIDの登録
以下のサイトにアクセスしてlinuxfoundationのアカウントを作成します。
https://training.linuxfoundation.org/ja/
アカウントログインは上記サイトの「マイトレーニングポータル」から行います。
- 受験結果共有への承諾
以下のサイトにアクセスして承諾します。
https://www.surveymonkey.com/r/JPVFYN8
ここで、これまで作成したアカウントを使います。- EID
EDUCO-IDにログインした画面で確認でます。
- LF-ID
Linux Foundation Trainingにログインするときに使うIDを入力します。
もしくは以下のサイトから確認できます。
https://identity.linuxfoundation.org/ - クーポンコード
クーポン購入後に発行をお知らせするメールに記載してあります。
- EID
- 試験の登録
以下のサイトから試験を登録します。
https://training.linuxfoundation.org/ja/certification/certified-kubernetes-application-developer-ckad-jp/ - 受験日の予約
案内に従って受験日を予約します。途中ブラウザを閉じてしまっても再度アクセスすれば再開できます。
勉強方法
私は1年以上Kubernetesの実務経験があります。そのため、勉強目的はインプットというよりは試験問題に慣れることの方が大きかったです。その前提で読んでいただければ幸いです。
参考までに点数はkiller.sh1回目で87/112(77%)、試験本番で94/100(94%)でした。
勉強するために使ったサイトは以下の通りです。
Udemy(KodeKloud)
間違えてCKA用のコースを買ってしまいました。問題量としては後述する外部サイトも使って補いました。
以下のコースを使いました。
実際にコマンドを打てる環境を用意してくれていて便利でした。ちょっとわかりづらいと感じたのが、環境はUdemyではなくKodeKloudから使います。
Udemyでコースを買った後、受講すると以下のサイトとクーポンコードを使うように案内されます。追加でお金はかかりません。
上記サイトにアクセス後、「Enroll in this Course」を押します。
ページ移動したら、上の方にある「Click here to enter your code」をクリックすると、クーポンコードを入力する欄が出てきます。
クーポンコードを適用すると、追加でお金を払うことなく使えるようになります。
その他外部サイト
以下の外部サイトで公開されている問題集を解きました。実技試験だと答え方に迷うことが多いので、問題集毎の解き方を比べると参考になるのかなと思います。
模擬試験(killer.sh)
試験を登録すると、2回分の模擬試験が付いてきます。模擬試験は試験予約した際のページから受けることができます。
本番に近い環境で、より難しく作られているので、一度受けておくことをお勧めします。
試験予約ページから「Click here to access the Exam Simulator」をクリックします。
2回分の模擬試験がNot Activatedとなっています。選択するとActivateになり模擬試験を開始できます。
役に立ったコマンド
試験と実務で覚えておいて損ないなと思ったコマンドを紹介します。
kubectl describe <resource>
リソースがうまく動いていないとわかった場合にまず実行するコマンドです。Eventとしてエラーログが出ている場合があります。
もしPODがエラーで終了した場合には、kubectl logsコマンドも合わせて実行するとよいと思います。
kubectl <command> -h
コマンドをど忘れすることがあります。そんな時にとりあえずhelpを呼ぶと、オプションの使い方が出てきます。kubectlの場合はオプションの種類だけでなく実行例が出てくるので便利です。
$ kubectl create job -h
Create a job with the specified name.
Examples:
# Create a job
kubectl create job my-job --image=busybox
# Create a job with a command
kubectl create job my-job --image=busybox -- date
# Create a job from a cron job named "a-cronjob"
kubectl create job test-job --from=cronjob/a-cronjob
Options:
--allow-missing-template-keys=true:
If true, ignore any errors in templates when a field or map key is
missing in the template. Only applies to golang and jsonpath output
formats.
--dry-run='none':
Must be "none", "server", or "client". If client strategy, only print
the object that would be sent, without sending it. If server strategy,
submit server-side request without persisting the resource.
--field-manager='kubectl-create':
Name of the manager used to track field ownership.
--from='':
The name of the resource to create a Job from (only cronjob is
supported).
--image='':
Image name to run.
-o, --output='':
Output format. One of: (json, yaml, name, go-template,
go-template-file, template, templatefile, jsonpath, jsonpath-as-json,
jsonpath-file).
--save-config=false:
If true, the configuration of current object will be saved in its
annotation. Otherwise, the annotation will be unchanged. This flag is
useful when you want to perform kubectl apply on this object in the
future.
--show-managed-fields=false:
If true, keep the managedFields when printing objects in JSON or YAML
format.
--template='':
Template string or path to template file to use when -o=go-template,
-o=go-template-file. The template format is golang templates
[http://golang.org/pkg/text/template/#pkg-overview].
--validate='strict':
Must be one of: strict (or true), warn, ignore (or false). "true" or
"strict" will use a schema to validate the input and fail the request
if invalid. It will perform server side validation if
ServerSideFieldValidation is enabled on the api-server, but will fall
back to less reliable client-side validation if not. "warn" will
warn about unknown or duplicate fields without blocking the request if
server-side field validation is enabled on the API server, and behave
as "ignore" otherwise. "false" or "ignore" will not perform any
schema validation, silently dropping any unknown or duplicate fields.
Usage:
kubectl create job NAME --image=image [--from=cronjob/name] -- [COMMAND]
[args...] [options]
Use "kubectl options" for a list of global command-line options (applies to all
commands).
kubectl api-resources
さらにリソースタイプをど忘れしてしまった時のコマンドです。カスタムリソース含め、リソースタイプ、ショートカットの一覧が出てきます。
$ kubectl api-resources
NAME SHORTNAMES APIVERSION NAMESPACED KIND
bindings v1 true Binding
componentstatuses cs v1 false ComponentStatus
configmaps cm v1 true ConfigMap
endpoints ep v1 true Endpoints
events ev v1 true Event
limitranges limits v1 true LimitRange
namespaces ns v1 false Namespace
nodes no v1 false Node
persistentvolumeclaims pvc v1 true PersistentVolumeClaim
persistentvolumes pv v1 false PersistentVolume
pods po v1 true Pod
podtemplates v1 true PodTemplate
replicationcontrollers rc v1 true ReplicationController
resourcequotas quota v1 true ResourceQuota
secrets v1 true Secret
serviceaccounts sa v1 true ServiceAccount
services svc v1 true Service
...
alias k=kubectl; source <(kubectl completion bash); complete -F __start_kubectl k
まず、alias k=kubectl
についてですが、一番使うコマンドなので、alias
を設定すると楽です。
source <(kubectl completion bash)
は自動補完を可能にします。コマンドのオプションだけでなく、デプロイされているリソース名も補完してくれるので、焦っているときのタイプミスを防止できます。
complete -F __start_kubectl k
は自動補完をalias k=kubectl
設定後でも使えるようにするためのコマンドです。省略したk
コマンドでも補完してくれるようになります。
※参考
https://kubernetes.io/ja/docs/tasks/tools/install-kubectl/
Ctrl+R
同じコマンドを再度実行するショートカットが役に立つと思います。kubectl
はオプションが多いので、自動補完を使っても何か付け忘れることがあります。
Ctrl+Rはコマンド履歴から過去に実行したコマンドを探すことができます。
※参考
おわりに
CKADに合格して、技術が身についている自信を持つことができました。
実務経験はあるといっても、いざ試験勉強してみるとベストプラクティス的なものを知ることができて楽しかったです。別のk8s試験も受けてみたいなと思いました。
これからも勉強します。