NFLabs. エンジニアブログ

セキュリティやソフトウェア開発に関する情報を発信する技術者向けのブログです。

認定Kubernetes資格3種(CKAD, CKA, CKS)を制覇しました

この記事は、NFLaboratories Advent Calendar 2023 7日目の記事です。

こんにちは、ソリューション事業部セキュリティソリューション担当の大沢です。
今年の10月から2ヶ月ほどKubernetes認定技術者試験の学習をしており、先日3種の資格(CKAD, CKA, CKS)を無事に取り切れたので、今回はその勉強方法や実際の試験での注意事項について書いていこうと思います。

本当はアドベントカレンダーで「資格取得しました記事」は書きたくなかったのですが、シングルタスク人間にはアドベントカレンダーの仕込みとの両立は難しく、このような形になってしまいました。
ただ、この資格は非常に実践的な試験を受ける必要があり、実際にすぐに業務に役立ったということもあるので、布教も兼ねて紹介させていただければと思います。

N番煎じの合格体験記ですが、これから勉強しようとしている方や今まさに取り組んでいる方の参考になると幸いです。

受験のきっかけ

今年の夏に現場の配置換えによって、私が所属していたチームとKubernetes基盤の運用チームが合併されたことが受験のきっかけでした。
それまではお客様向けのシステム開発チームの中でDevOps関連の業務をしていました。

元のチームではアプリケーションの大半をKubernetes上で動かしており、基本的にデプロイはチームの誰かが作ったHelm Chartを、これまたチームの誰かが作ったCI/CDのパイプラインで実施することがほとんどでした。
実際、2年間で私が実行したことがあるkubectl(Kubernetes基盤の各種操作を行うコマンド)は以下の4つだけでした。

  • kubectl get pod
  • kubectl get all
  • kubectl logs
  • kubectl exec

流石にDockerやDocker Composeには慣れ親しんでいましたが、Kubernetesは「超高級なDocker Compose」くらいの認識でなんとなく業務を進めていました。

そんな状態である日突然Kubernetes基盤の全権限を与えられ、無知万能と言える立場となったのです。
流石にこれは真面目に勉強しないと立ち行かなくなるな、ということで、Kubernetes認定技術者試験の学習を通じてチーム内でちゃんと戦力になっていくことを目指すことにしました。

大まかなバックグラウンド

  • Linux
    • 大学生の頃から10年程度
    • この前LPIC Level2の期限が切れた
  • コンテナ技術
    • 6年程度
      • ほぼDockerだけ
    • サービスとして本格的な運用経験はほぼ無し
  • Kubernetes:
    • 3年ほど現場で使っているけどほとんど触っていない
      • 叩いたことのあるコマンドは実質3種類
    • Pod=コンテナだと思ってる
  • セキュリティ:
    • 完全に理解してる(ダニング=クルーガー効果)

認定Kubernetes資格の紹介

本題に入る前に、そもそもKubernetes認定技術者試験(認定Kubernetes資格)とは何か、について簡単に説明したいと思います。

認定Kubernetes資格とは、Cloud Native Computing FoundationとLinux Foundationが提供する以下の4つの資格のことを表します。

  • Kubernetes and Cloud Native Associate (KCNA):Kubernetesの入門資格
  • Certified Kubernetes Application Developer (CKAD):アプリケーション開発者向け資格
  • Certified Kubernetes Administrator (CKA):Kubernetes基盤の保守運用者向け資格
  • Certified Kubernetes Security Specialist (CKS):セキュリティ管理者向け資格

実際にはKCNAを除いた3種の取得を目指している人が多いと思います。
それと、CKSはCKAに合格していないと受験することができません。

Linux Foundationのページか、LPI-Japanの以下のページから詳細が確認できるので、気になる人はそちらを確認してください。

lpi.or.jp

受験にはLinux Foundationから直接申し込む他に、前述のLPI-Japanからも申し込むことができます。
Linux Foundationはドル払い、LPI-Japanは円払いなので、為替レートと相談してどちらから申し込むか選択すると良いでしょう。
最終的にCKSを取得する予定の場合はLinux FoundationでCKA + CKSのバンドルが割安で購入できるため、こちらの方が安くなることが多いと思います。

認定Kubernetes資格取得の考え方

実際に資格取得を目指す場合に、どの資格をどの順序で取得すると良いかを簡単にまとめました。

1. アプリケーション開発者でHelmを日常的に使う:CKAD
2. Kubernetes基盤の運用チームに所属している:CKA
3. Kubernetes基盤を使っている現場でセキュリティの機運が高まっている or 担当者である:CKA → CKSの順で取得する
4. どうせなら全て取得したい:CKA → CKAD → CKSの順で取得する

先程書いた通りCKSはCKAを取得しないと受験できないので、CKSの取得を目指す場合はCKAから取得します。
3種全ての取得を目指す場合はCKAとCKADはどの順番で受けても良いのですが、個人的にはCKAから取得することをおすすめします。
CKAとCKADの内容はほとんど被っており、CKADがほんの少し扱うリソースが多いだけであるのに対して、CKAはKubernetes基盤全体の管理が範囲に含まれています(難易度もCKAの方が高いです)。

そのため、CKADからCKAを受けると改めてKubernetesの構成要素について学び直さなければならないのに対して、CKAで体系的にKubernetesについて理解した状態でCKADを受ける場合はスムーズに学習を進められることになります。
実際、私のチームではCKA取得後にそのままCKADを取得したという猛者もいます。

試験形式

  • 形式:パフォーマンスベース
  • 時間:2時間
  • 問題数:15~20問
  • 合格点
    • CKA/CKAD:66点以上
    • CKS:67点以上
  • 環境:専用ブラウザ
    • PSI-SecureBrowserという名前だったと思う
  • 再試験:1回のみ可

Kubernetes認定技術者試験はパフォーマンスベースを採用しており、実際にコマンド操作を行って問題を解いていくことになります。
具体的には専用ブラウザ内でLinuxのデスクトップ環境が与えられて、そこでTerminalからKubernetes基盤を操作し、問題の通りにKubernetes基盤の設定を行ったり、指定されたアプリケーションをデプロイしたりしていきます。
(画像は公式サイトより拝借)

問題数は15~20問ということになっていますが、私が受けた試験は16~17問だった気がします。
問題の難易度のばらつきはあるとはいえ、試験時間を考えると1問あたり6~8分程度を目安に解いていくことになります。
他の方の合格体験記でも何度も言及されているように基本的には時間に追われることになるので、少し考えて回答の道筋が見えない問題はマークを付けて飛ばしましょう。

試験の制約と注意事項

試験時の制約は大きく以下のようなものがあります。

  • 周囲に電子機器が無い環境
  • 専用ブラウザ以外のアプリケーションは全て停止
  • ディスプレイは1枚
  • 内蔵or外付けのカメラで常に監視
  • 試験中にアクセスできるウェブサイトが限定的
  • 水分は透明なペットボトルのみ可(ラベルは剥がす)
  • その他(キャプチャ禁止などの問題漏洩対策系が少々)

他にも細かい制約があるので、受験の前には以下の公式ドキュメントを確認しましょう。

docs.linuxfoundation.org
docs.linuxfoundation.org

私は自宅から電子機器を追い出すことができなかったので、コワーキングスペースをレンタルして受験しました。
30分前から試験の事前チェックが開始できるのと、万が一試験開始が遅れた場合を考慮して、試験時間の前後30分余分に計3時間レンタルしました。

また、ディスプレイは1枚しか使えません。
自宅で受けるのでなければ多くの人はノートPCで受験することになると思うので、その際には外部ディスプレイを使うことを強く推奨します。
一部の合格体験記では外部ディスプレイが使えなかった旨が書かれているものもありますが、以下の公式FAQでも

One active monitor (either built in or external)  (NOTE: Dual Monitors are NOT supported)

とあるように、デュアルモニタやミラーリングではなく One active monitor にしましょう。
試験中はカメラで常にモニタリングされており、外部ディスプレイを使用するとカメラの真正面を向くことは難しいですが、真正面を向かなくても怒られなかったので安心してください。

docs.linuxfoundation.org

試験準備

試験準備に利用したコンテンツです。

1. Udemyの動画

2. KodeKloud

3. Killer.sh

いずれも過去の合格体験記でほぼ確実に紹介されているのでご存じの方も多いと思います。
Udemyの動画は頻繁に1800円になるので、そこで購入するようにしましょう。
CKSのみUdemyには動画はありませんが、UdemyのCKAD, CKAの動画を購入するとついてくるKodeKloudというトレーニングサービスでCKSの動画+ハンズオンのコースを売っているので、そちらを利用しました。

学習全体で特に注意するべきなのは、 実際に試験で利用可能なドキュメントだけを利用してハンズオンや模擬試験を解くことです。
一部のハンズオンでは「試験範囲外だが受講者の理解を促すために提供している」とされているものがあり、その中には上記ドキュメントだけでは解けない問題もありますが、それ以外の場合は意識的に公式ドキュメントだけを利用する癖を付けましょう。
試験で利用可能なドキュメント群は公式サイトにまとまっています。

docs.linuxfoundation.org

学習の流れ

基本的に本資格の学習は、
 Udemyで動画を見る → KodeKloudでハンズオンをする
の繰り返しになります。

そしてUdemyの学習の終わりが見えた頃に試験を予約し、Killer.shを試験の2日前から実施します。
このKiller.shは公式が提供する模擬試験のような位置づけで、試験を購入すると無料で付いてきます。
試験問題の中でも難しい問題が出題される環境で、36時間×2回利用できます。

利用を開始すると2時間のカウントダウンが始まるので、まずは2時間かけて全力で問題を解き、その時点で採点をします。
2時間経過後も環境はリセットされないので、解ききれなかった問題を解いたり、誤答した問題の解答・解説を読んで修正しながら理解を深めていきます。
また、36時間以内であれば環境をリセットして再度2時間計測しながら問題を解いていくことができるので、2, 3周して解答速度や解答精度を高めていくのも重要です。

私が各試験前に解いた初回のKiller.shは以下のような点数でした。

  • CKA:55/125
  • CKAD:102/112
  • CKS:33/73

Killer.shの問題は実際の試験でも難しい方の問題ばかりなので、ここで合格点が取れなくても悲観する必要はありません。
上では2, 3周したほうが良いようなことを書きましたが、私は1周して一通り解説を見ながら誤答を正しただけで試験に臨みました。
ただし、 CKSは1回目の試験で不合格 でしたので、過信や油断は禁物です。

試験当日のTips

試験当日までには公式の試験ガイドをしっかり読み込んでおき、注意するべきことは頭に叩き込んでおきましょう。

なので、ここでは注意点と言うよりも試験中のできごとから抽出したTipsなどを紹介したいと思います。

1. 試験が始まったら .bashrc に2個設定を追加する

これも他の合格体験記で散々触れられていることですが、以下の2行は試験が始まった瞬間に設定ファイルに書き込みましょう。

export do='--dry-run=client -oyaml'
alias kn='kubectl config set-context --current --namespace'

1行目は kubectl run/create コマンド実行時に実際のリソース作成を行わず、適用するはずだったmanifestを表示するオプションのショートカットです。
概ね以下のような使い方をします。

k run nginx-test --image nginx:latest $do > 1-pod.yaml

2行目はkubectlコマンド実行時に -n <namespace> と打つ必要がなくなるショートカット(エイリアス)です。
試験本番では最初にコンテキスト(試験においてはKubernetes基盤のようなもの)の変更コマンドが与えられ、問題文の中に作業するNamespaceが記載されています。

なので、問題を切り替えたら

1. コンテキストの変更コマンドをコピペして実行
2. 上記ショートカットでNamespaceを設定

の手順を必ず踏むようにしましょう。
せっかく問題の解き方がわかっても、異なるコンテキストやNamespaceを操作したら0点です。

他にもPod削除の待機時間を減らすように設定するのも効果的ですが、これはバックグラウンド実行する癖を付けておけば大きな差は無いと思います。

2. コワーキングスペースで試験を受ける際のあれこれ

最初の方に書いたように外部ディスプレイを必ず使いたいので、まずはディスプレイ備え付けの場所を選びましょう。
都内だと稀にディスプレイの無い場所があるので注意が必要です。

その他、試験中に発生したコワーキングスペースならではなやり取りを紹介します。
※やり取りはすべて英語です

扉の張り紙何?

試験の注意事項に Clear walls とあるように、基本的に壁に張り紙などは認められていません。
しかし、私が借りたコワーキングスペースには扉に部屋の注意事項に関する張り紙があったので、それについて尋ねられました。

「このレンタルルームの注意事項だよ」みたいなことを返したら許されました。

携帯電話を遠くに置いて

一人用のコワーキングスペースはかなり狭く、大抵のエリアに手が届いてしまいます。
とはいえ椅子に座りながら机の下や自席の後ろ側に手を伸ばそうとすればばっちりカメラにその様子が映るので、とりあえず床の四隅のどこかに置いて対処しました。

置く場所の指定をされることはありましたが、それさえ守れば問題ないです。

ラベル付きのボトルは持ち込めないんだけどこれは何?

コロナ禍の影響で各スペースにアルコール消毒液のボトルが置かれており、それについて尋ねられました。
部屋の備品なのでラベルを剥がすわけにもいかず、「部屋に備え付けのアルコール消毒液なんだけど、床に置いておくのでは駄目?」と返したら許されました。

何か話し声がするんだけど?

4回試験受けた中で一度だけ、隣の部屋に人が来て大声で電話会議を始めたことがありました。
試験が中盤に差し掛かった辺りで一気に集中力を持っていかれるとともに、「試験中止か・・・?」と冷や汗をかいたのを覚えています。

先ずは落ち着いて、「隣人が大声で通話を始めてしまったんだ」と回答したところなんとか許してもらえました。
そのうち通話が終わって静かになったのでそれ以上のお咎めはありませんでしたが、2, 30分続いていたらどうなっていたかわかりません。
コワーキングスペースを借りて試験を受ける際に最も気をつけなければならないことだと思います。

その他、1時間経過した頃に一度机の上を見せるように指示されたことがありましたが、そういった指示には適宜従っていきましょう。

3. わからない問題もわかる範囲で触る

試験問題には1~11点の配点があり、2点以上の問題には部分点が存在する場合があります。
例えば以下のような問題があるとします。

hoge-pvというPVを作ってhoge-pvcというPVCを作ってください。
そのPVCを使用するPod fugaをデプロイしてください。
作業は全てpiyo Namespaceで実施すること。

この時、採点項目は

  • hoge-pvというPVがある
  • hoge-pvcというPVCがpiyo Namespaceにある
  • hoge-pvcはhoge-pvをBINDしている
  • fuga Podがpiyo Namespaceに存在する

といった粒度の可能性があります(もっと粒度が荒く辛い採点の場合もあり得ます)。
なので、完答できなさそうな問題でも回答できそうな箇所を見つけ出して、部分点を取りに行くのも立派な戦略となります。

以上が試験準備~試験本番までの注意事項や学習方針、Tipsになります。

感想

2ヶ月近くずっとKubernetesの学習をしていて、成長を実感したことが何度かありました。

特に印象的だったのは、CKAに合格したその二日後にKubernetes基盤内のノードが1台不調になったことでした。
原因はただの証明書切れだったのですが、事象の調査から原因の特定、対処までの一連の流れはまさにCKAで出てきた問題そのもので、当時のIssueの最後に「CKAで出そうな問題だ」と書いたのを覚えています。

チーム内のKubernetesに関する話にもついていけるようになりましたし、Kubernetes基盤に関するIssueを取る恐怖も半年前と比べて大幅に減ったと思います。

パフォーマンスベースの試験は筆記や選択肢のものと比べて合格までの道のりが大変ですが、その分見返りも大きいということを改めて感じました。

認定Kubernetes資格の制覇はチュートリアルです。
これからもしばらくは同じチームでKubernetes基盤の運用を続けるはずなので、引き続き見識を深めていきたいと思います。

ありがとうございました。

おまけ

学習開始からCKS合格までのタイムライン

  • 2023/10/01:CKA学習開始
  • 2023/10中旬:パスポートの期限切れに気が付いて社内の手続きや発行を待ちの間学習中止(1週間程度)
  • 2023/11/04:CKA受験(合格)
  • 2023/11/06:CKAD学習開始
  • 2023/11/12:CKAD受験(合格)

 ~~~とあるゲームのDLCをやってた~~~

  • 2023/11/22:CKS学習開始

 ~~~ちょっとジャパンカップとか空の果てに行ってた~~~

  • 2023/12/04:CKS受験(不合格)
  • 2023/12/11:CKS受験(合格)

パスポート発行待ちやその他の都合で全く学習を進めてない期間もありましたが、ほとんどの業務時間後や土日を学習に充てて約2ヶ月で3種全てに合格することができました。
平日は3時間、土日は10時間ずつくらい費やしていたと思います。

もちろんプライベートを全て破り捨てての2ヶ月なので、無理せず半年程度のスパンでじっくり進めるほうが良いと思います。
たまたま10月からしばらくプライベートの用事が多くなかったので今回はこのようなスケジュールになりました。

そしてイクイノックス号、お疲れ様でした。
現地で2回もあなたのレースを見られた幸運に感謝。

CKS不合格後の学習

CKSの1回目で不合格だったので、今までの学習方法では足りないということがわかりました。
なので、2回目の試験までの間は、KodeKloudのコースに付いてくる模擬試験に加えて「CKS - Challenges」というコースをひたすら解いていました。
これは総合力を上げるうえで非常に役立ったので、自信が無い方はCKA, CKADでも同種のコンテンツに取り組むと良いと思います。

そして、試験2日前にKiller.shを解いたら2時間時点で 50/73 点、全ての問題を一通り解き終えるのに2時間40分かかりました。
この時点で解答速度はある程度自信が持てたので、試験前日は解答精度を上げる方向でKodeKloudの模擬試験を解いていました。
試験前日の最後、通算3回目のKiller.shでは100分で満点を取れたので、試験本番は自信を持って比較的リラックスして受けられました。

試験は「万全を期すために1週間で最も元気なタイミングで受けよう」ということで月曜日の朝7時から受験したところ、試験で体力を使い果たしたのでその日はほとんど仕事になりませんでした。