CKA受験記録

# この記事の目的
私は2020/12/29にCKAを受験し、無事合格することができました。CKAは2020/9に試験内容が改訂されましたが、改定後に受験された方の情報があまり見つからなかったため記事にまとめました。この記事では、CKAの概要と合格するために行ったこと、試験の注意事項などをお伝えします。

# CKAとは
## 概要
Linux FoundationとCloud Native Computing Foundation（CNCF）によって作成されたCertified Kubernetes Administrator（CKA）プログラムは、Kubernetes管理者の責任を遂行するスキル、知識、および能力をCKAが備えていることを保証する資格です。

## 試験範囲

- ストレージ(10%)
・ストレージクラス、永続ボリュームを理解する
・ボリューム モード、アクセス モード、およびボリュームの再利用ポリシーを理解する
・永続ボリューム要求プリミティブを理解する
・永続ストレージを使用したアプリケーションの構成方法を知る

- トラブルシューティング(30%)
・クラスタとノードのロギングを評価する
・アプリケーションの監視方法を理解する
・コンテナの標準出力と標準エラー ログを管理する
・アプリケーションの障害のトラブルシューティングを行う
・クラスタ コンポーネントの障害のトラブルシューティング
・ネットワークのトラブルシューティングを行う

- ワークロードとスケジューリング(15%)
・デプロイメント、およびローリング アップデートとロールバックの実行方法を理解する
・ConfigMapとSecretを使用してアプリケーションを構成する
・アプリケーションのスケーリング方法を知る
・堅牢な自己修復アプリケーション デプロイメントの作成に使われるプリミティブを理解する
・リソース リミットがPodスケジューリングにどのように影響するかを理解する
・マニフェスト管理と一般的なテンプレートツールの認識

- クラスタのアーキテクチャ、インストール、構成(25%)
・ロール ベース アクセス コントロール（RBAC）を管理する
・Kubeadmを使用して基本的なクラスタをインストールする
・高可用性Kubernetesクラスターを管理する
・Kubernetesクラスタをデプロイするためのインフラをプロビジョニングする
・Kubeadmを使用してKubernetesクラスタでバージョン アップグレードを実行する
・etcdのバックアップと復元を実装する

- サービスとネットワーキング(20%)
・クラスタ ノードのホスト ネットワーク構成を理解する
・Pod間の接続を理解する
・ClusterIP、NodePort、LoadBalancerサービス タイプとエンドポイントを理解する
・IngressコントローラーとIngressリソースの使用方法を理解する
・CoreDNSの構成方法と使用方法を理解する
・適切なコンテナ ネットワーク インターフェイス プラグインを選択する

## 受験方法
[こちら](https://training.linuxfoundation.org/ja/certification/certified-kubernetes-administrator-cka-jp/)から申し込むことができます。受験料は$300です。CKA-JPという日本語版の試験も選ぶことができますが日本語になるのは試験問題だけ（いつでも英語に切り替え可能）で試験官とのコミュニケーションは英語です。試験時間までにLinux Fundationの[ポータルサイト](https://trainingportal.linuxfoundation.org/learn/dashboard)で受験前のチェックリストにパスする必要があります。

## 試験当日の流れ
試験時間の15分前から試験サイトにアクセスでき、試験官とのコミュニケーションが始まります。そこからの流れは以下の通りです。

1. DeskTopの共有とカメラ＆マイクをオンにする
1. Chrome以外のアプリケーションを終了させる
1. 身分証明書（私の場合はパスポート）を見せる
1. 受験場所の状態を試験官に見せる（机の上や周りを片付けておく必要があります）
1. 注意事項の説明を受けて試験開始（試験時間は2時間）

試験中は https://kubernetes.io/docs/, https://github.com/kubernetes/,  https://kubernetes.io/blog/ のサイトとそのサブドメインのサイトを閲覧可能です。ただし、タブは１つまでで、上記サイトから閲覧不可のサイト（https://discuss.kubernetes.io/ など）に移動するのは禁止です。

また、DeskTopの共有とカメラ＆マイクのオンはChromeの拡張機能を用いて行いますが、M1チップ搭載のMac book proではうまく動作しませんでした（2020/12/29時点）。かなり焦りましたが、買い替え前の古いMac book proを引っ張り出してそちらで受験しました。

試験前の試験官とのコミュニケーションは英語で行われますが、基本的には指示に従うだけなので英語を読むことができれば十分です。

# 勉強方法
私はCKA受験のために以下の方法で準備を行いました。

## Kubernetes完全ガイド
有名な書籍である[Kubernetes完全ガイド](https://www.amazon.co.jp/Kubernetes%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89-%E7%AC%AC2%E7%89%88-Top-Gear-%E9%9D%92%E5%B1%B1/dp/4295009792)を読むところから始めました、内容的には試験範囲を網羅しているのでこの書籍を読むだけでも十分合格できる可能性はあると思いますが、試験対策には特化していないので以下の対策講座も受講することをお勧めします。

## UdemyのCKA対策講座
[Certified Kubernetes Administrators (CKA) with Practice Tests](https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/)という対策講座を受講しました。こちらの講座は全て英語ですが、かなり深い内容まで網羅しているのと練習問題や模擬試験でKode Kloudというブラウザから利用できるk8s環境を利用して、実際に手を動かすことができるためかなりおすすめです。ただ入門としては難しいと思うので上記の参考書を読んだ後に受講するのがいいと思います。

## kubectlの便利コマンドを覚える
試験は時間との戦いになるので、Podを立てたりするときにいちいちYamlを書いている時間はありません。コマンド１つである程度のことはできるように準備をしておく必要があります。以下に基本コマンド以外で使えるようにしておくべきコマンド（個人的見解です）を列挙しておきます。

- kubectl run [Pod名] --image=[Image名] --restart=Never --dry-run=client -o yaml > [Yamlファイル名]  
"kubectl run [Pod名] --image=[Image名] --restart=Never"でPodを実行することができますが、ここに"--dry-run=client -o yaml"を加えることでPodを実行せずに、その定義をYamlファイルに出力することができます。Podを実行する問題が出た際にベースとなるYamlファイルを作成することができます。
- kubectl describe [リソース種別] [リソース名]  
試験ではトラブルシューティングの問題が多く出題されます。このコマンドは手始めにリソースの状況を知ることができるコマンドです。
- kubectl get [リソース種別] [リソース名] -o yaml > [Yamlファイル名]  
１つ目のコマンドと似ていますが、すでに実行中のリソース定義を変更する必要がある際にその定義をYamlファイルとして出力でき、編集後に"kubectl apply -f [Yamlファイル名]"で適用することができます。"kubectl edit"コマンドを使ってもいいですが、変更する内容によっては使用することができないのでこちらのコマンドも使えるようにしておくといいと思います。
- kubectl auth can-i create deployment --as=[User/ServiceAccount名]  
RBAC系の問題が出題された際に、設定した権限が正しいかどうかを確認するコマンドです。例では"create deployment"としていますが、任意のコマンドに変更可能です。