はじめまして、ユービーセキュアのクラウドソリューション開発部で新規サービスの開発を担当している相馬です。現在はクラウドアーキテクチャーの設計やAPIサーバの構築を行っており、TerraformやOpenAPIと毎日睨めっこしています。 また、巷ではクラウドネイティブという言葉を頻繁に聞くようになり、その代名詞とも言えるKubernetesへの関心はとても高くなってきています。 サーバサイドの設計を担当している者としてKubernetesを利用するかどうかを適切に判断するためにも正確な知識を身に着ける必要があると思い、Certified Kubernetes Administrator (CKA) を受験することにしました。 本記事ではその内容について書こうと思います。

CKA(Certified Kubernetes Administrator) とは

Businesswoman hand touch cube as symbol of problem solvingCKAとは、Linux FoundationによってKubernetesクラスタの管理者として認められた人のことです。 似た資格に、CKAD(Certified Kubernetes Application Developer)がありますが、こちらはアプリケーション開発者向けの資格で、どちらもLinux Foundationによる認定という部分は共通していますが別の資格となっています。 資格の有効期限は取得から3年間となっていますが、資格が始まったころは2年間だったそうです。このように有効期限が長くなったことからもKubernetesがプロダクトとして安定してきたということがよくわかります。

ちなみに、私がCKADではなくCKAを受けた理由は、Kubernetesについて広く知識を獲得したかったからです。逆に言うとCKADはアプリケーション開発者に特化した内容となっているのでクラスター自体の知識はそこまで問われません。もし、どちらを受験しようか悩んでいる方がいらっしゃいましたら、自分がどの立場でKubernetesと戯れる可能性があるのかを判断の基準にするのがよいと思います。 また、試験内容は一部重複していますので、ついでに両方受験するのもよいと思います!その場合は、範囲が浅く広いCKAから受験されるのを個人的にはお勧めします。(CKAD受けてないけど、両方受けた人もそういってた!)

試験内容

試験内容は以下の通りです。

  • アプリケーションのライフサイクルの管理
  • インストール、設定および確認
  • 基本コンセプト
  • ネットワーク
  • スケジューリング
  • セキュリティ
  • クラスタの管理
  • ロギング/モニタリング
  • ストレージ
  • トラブルシューティング
詳細はこちら

CKAの試験はIPAのような筆記試験ではありません。Webブラウザを介して実際にコンソール上でコマンドを入力して課題を解決していくのでより実践的な試験です。試験中はKubernetesの公式ドキュメントを閲覧することができますのでコマンドなどを完全に暗記する必要はそこまでありません。ドキュメントのどこに何が書かれているのかを把握しておくことの方が重要です!! (資格が始まったころはなんと、どんなサイトを閲覧してもよかったそうです。)

 

試験勉強

私が行った試験勉強は以下の通りです。

    1. オンライン講座
    2. Kubernetes Hard Way
    3. kubectlコマンド特訓
1.オンライン講座
私はUdemyでもっとも人気な「Certified Kubernetes Administrator (CKA) with Practice Tests」という講座を受講しました。

正直これだけで十分です。

私が受講したときは日本語がなかった(今はあるかも)ので英語での受講でしたが、講師がインド訛りぽい英語を使う方でしたので、ネイティブな英語よりもむしろ聞き取りやすかったです。

講座内容すべて理解することが理想ですが、講座に含まれる模擬テストを何度も繰り返すだけでもとても価値があります。また、模擬テストを解くときはできるだけKubernetesの公式ドキュメントだけを見ながら解くようにするとより本番に近い環境になるのでおすすめです。(おそらくすでに改善されていると思いますが、模擬テストの答えが一部誤っている部分もありましたので、何度考えても答えがおかしいと思うときは自分を信じることも重要です。)

2.Kubernetes Hard Way
https://github.com/kelseyhightower/kubernetes-the-hard-way

これはKubernetesをクラスタ生成ツールを利用せずに自力で作成する手順を記載してくれているものです。

資格に合格するだけであれば、必ずしもトライする必要はないのですが、Kuberenetesの仕組みを理解するにはとても素晴らしい内容となっているので是非一度トライしてみるとよいと思います。 ノード間の通信の暗号化、etcdやcontrol planeの振る舞いなどを正確に理解することはKubernetesをセキュアに利用することにも繋がると私は思っています。

例えば CVE-2018–1002105のような kube-apiserver に関する脆弱性とCVE-2019-11245のような kubelet に関する脆弱性とでそれらが及ぼすであろう影響範囲の違いをある程度想定できるようになります。 もちろん、脆弱性の詳細を確認することが重要であることは言うまでもありませんが、Kubernetesの仕組みを理解しておくことで迅速に正確な対応ができるようになると私は考えています。

3.コマンド特訓
Kubernetesをしっかりと理解できたら後はコマンドをしっかりと使えるようになれば怖いものなしです。 kubectl、kubeletはもちろんですがその他LinuxのコマンドもCKAでは使うことがあります! 必ずしも暗記する必要はないですが、こういうことができるということは覚えておいた方がよいですので 以下にいくつかお勧めのコマンドたちを記載しておきます。
  • kubectl
    • 補完機能をONにする(bash用)
      source <(kubectl completion bash)
      echo "source <(kubectl completion bash)" >> ~/.bashrc
    • dry-runを使ってyamlファイルのテンプレートを作る(不要な情報も出力されるので適宜削除しましょう。)
      kubectl run busybox --image=busybox --restart=Never --dry-run -o yaml --command -- env > envpod.yaml
    • jsonPathを使ってほしい情報だけを取得する
      kubectl get nodes -o=jsonpath="{.metadata}"
    • explainコマンドでリソースのドキュメントをCLIで確認する
      kubectl explain pod.spec.containers
  • journalctl
    • kubeletのlogを見る
      journalctl -u kubelet

 

試験当日

businessman hand working on laptop computer with digital layer business strategy and social media diagram on wooden desk試験は他人が入ってこない個室などで行う必要があります。公共スペースはNGですのでご注意ください。

私はたまたま実家に帰省していたので実家で受験しようと思っておりました。 しかし、、、実家のネット回線が信じられないくらい遅いことが判明し、急遽近くに住む姉の家にお邪魔して受講しました。 試験時間は3時間あり、Webカメラとマイクが必要です。周辺に怪しいものが無いかもチェックされますので整理整頓しておいた方がよいです。(整理整頓してくれていた姉に感謝です。)

試験問題は、英語や日本語など複数の言語に切り替えて問題文を読むことができます。私は日本語で受験していましたが、一部日本語がおかしい部分などもあり、英語で問題を確認した方がわかりやすい箇所もいくつかありました。(おそらく現在は改善されています!)

試験は順調に進み、1時間半経過したあたりで残すは1問。「これは余裕だ!」とおもったのですが残す1問がどうしても解けないまま試験終了となってしまいました。

試験結果

3営業日以内に通知があるようです。私は3日後の朝にメールで合格の連絡が来ました。 合格の基準は74%で、私は90弱だったので、最後まで解けなかった1問のほかにも間違ってしまったようです。 とはいえ、一発で合格出来てよかったです!

CKA(Certified Kubernetes Administrator)の合格証書

感想

とても実践的な試験内容なので、手を動かしながらKubernetesを勉強しようと思っている方にはとてもマッチする試験だと思います。

また、試験を受けてみて思ったのは、この試験は一度だけ再試験を無料で受けられるので、試験に慣れるためにも一通り勉強が終わったら試験を受けてみるのもよいのではないかと思いました。

最後に、私が思うKubernetesとの付き合い方について少しだけ書こうと思います。

試験勉強や開発環境でKubernetesに触れてみて思ったことは「Kubernetesってやっぱりすごいなー。」という感想です。なんでもできます。ただ、Kubernetesを管理する必要はどうしてもあります。(管理するコストも減ってきてはいますが。)

エンジニアとして新しい技術に触れていきたいという気持ちはありますが、「それってKubernetesじゃないとできないんだっけ、実はもっと楽な方法あったりしない?」ということは常に考える必要があると思います。(どんな技術もそうなんですが。)

最後まで読んで頂きありがとうございました。