Certified Kubernetes Administrator (CKA) を受験してみた

# Certified Kubernetes Administrator (CKA) を受験してみた

今回は、Japan Container DaysやKubeCon開催の中でも必ず1セッションはあるCKAについてとりあげさせてもらう。すでにQiitaや企業のエンジニアブログなどで事例紹介はされているが、直近うけた最新情報として紹介させてもらおうかと思う。

# モチベーション

- 今年の春ごろからKubeConやCNCFの活動を知り、Cloud Native Meetup Tokyoなどのコミュニティに参加しはじめたときに知り合った人らで、Kubernetesを実運用して詳しい人らがその学習していった過程でこの資格をオススメしていた。
- 個人的にはKubernetesに興味があり、学習したアウトプットの目安に利用できないかとしたときにわかりやい基準になるとおもった。
- 実際に自分のまわりの環境変化により、Kubernetesを利用した実運用している環境で開発する機会がありそのまま活かせる見込みが多くあった。

# 前提

自分自身のバックグラウンドについて簡単に前提として紹介させてもらう。
- 今までオンプレミス、パブリッククラウドを利用した環境でのサービス開発・運用経験は10年ほどある。 
- 直近は、パブリッククラウド(GCP,AWS)、Kubernetesを利用した環境でのサービス開発をメインでしている。
- 受験準備開始は、2018/10月上旬〜12月中旬。当初はKubernetesの運用経験ない状態でハンズオンやチュートリアルを試しに触った程度の理解度。

# 試験概要

- Certified Kubernetes Administrator (CKA) Programの詳細は[こちら](https://www.cncf.io/certification/cka/)
- Cost $300 : オンライン試験
- 3時間 : 24問 (合格ライン:74%) 

## 試験関連資料

公式に公開されている資料は以下の通り。
- [受験者向けハンドブック](https://www.cncf.io/certification/candidate-handbook)
- [カリキュラム](https://github.com/cncf/curriculum)
  - [Certified Kubernetes Administrator (CKA) Exam Curriculum 1.11.0](https://github.com/cncf/curriculum/blob/master/certified_kubernetes_administrator_exam_v1.11.0.pdf)
- [試験Tips](https://www.cncf.io/certification/tips)

## 出題範囲

- Application Lifecycle Management 8%
- Installation, Configuration & Validation 12%
- Core Concepts 19%
- Networking 11%
- Scheduling 5%
- Security 12%
- Cluster Maintenance 11%
- Logging / Monitoring 5%
- Storage 7%
- Troubleshooting 10%
※ 2018/12/12時点

# 試験前にやったこと・工夫したこと

主に以下の教材をベースに準備した。

- [Kubernetes Fundamentals(LFS258)](https://training.linuxfoundation.org/training/kubernetes-fundamentals/)
 - Linux Foundationの公式のオンライン学習教材。個人的には、各カテゴリについてのインプットとしては良かったが、試験のリハーサル用の演習はすくなかったため、Linux academyの後述の教材をオススメしたい。試験のバウチャーチケットとバンドルされたものを購入した。

- [Certified Kubernetes Administrator (CKA)@Linu Academy ](https://linuxacademy.com/linux/training/course/name/certified-kubernetes-administrator-preparation-course)
  - 各カテゴリ別に学習できるのに加え、範囲を網羅した試験想定の予想問題もあり、オペレーションを中心に学習できるのがオススメ。初回の1週間は無料で利用可能。

- [kubernetes-the-hard-way](https://github.com/kelseyhightower/kubernetes-the-hard-way/blob/master/docs/07-bootstrapping-etcd.md)
  - 周りで調べてみた限り一番オススメされるチュートリアル(kubernetesのインストールからsmoke test,cleanup)
  - やることはたくさんあるが通して覚えられるので一番良い。

- [kubernetes 公式ドキュメント](https://kubernetes.io/docs/)
  - 試験中に唯一、参照可能なドキュメント。何がどこに書いてあるかを把握してあると良い。

- トレーニング用にGCPのアカウントを新設した初回は約30000円分のクレジットがついってくるため便利。
- バウチャーチケットは2回受験可能。1回落ちたとしても、1年以内ならもう1回リテイクの受験が可能。自分の場合、1回目は64%で落ちており、2回目のリテイクで84%この試験をパスすることができた。

## 準備期間
- 2018/10月〜 12月中旬頃
 - 2018/10月上旬〜11月中旬: インプット中心の学習 (1.5ヶ月)
     - 各出題範囲の概要理解のインプットをしたりオペレーションを試しに実行してみたりした。
 - 2018/11月上旬〜12月中旬:アウトプット中心の学習(1.5ヶ月)
      - 試験問題にでてきそうなオペレーションを中心に。
      - 時間計測して最初は公式ドキュメントだけ。わからなければ調べて復習。
      - 自分の苦手なカテゴリは、SecurityやTroubleShootingまわりだったため、そこは重点的にTutorialなど手を動かすことを中心に。

# 試験中の工夫した点

- 全ての問題はオペレーションが必要となる問題であるため、コマンドの実行が手に馴染んでいないと想像以上に時間が取られる

- `kubectl explain`コマンドによる各パラメータ内容の把握
  - [kubectl explain — #HeptioProTip](https://blog.heptio.com/kubectl-explain-heptioprotip-ee883992a243)

```shell
$ kubectl explain deployment
KIND:     Deployment
VERSION:  extensions/v1beta1

DESCRIPTION:
     DEPRECATED - This group version of Deployment is deprecated by
     apps/v1beta2/Deployment. See the release notes for more information.
     Deployment enables declarative updates for Pods and ReplicaSets.

FIELDS:
   apiVersion	<string>
     APIVersion defines the versioned schema of this representation of an
     object. Servers should convert recognized schemas to the latest internal
     value, and may reject unrecognized values. More info:
     https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

   kind	<string>
     Kind is a string value representing the REST resource this object
     represents. Servers may infer this from the endpoint the client submits
     requests to. Cannot be updated. In CamelCase. More info:
     https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

   metadata	<Object>
     Standard object metadata.

   spec	<Object>
     Specification of the desired behavior of the Deployment.

   status	<Object>
     Most recently observed status of the Deployment.
```
各パラメータに紐付いて深掘りしてパラメータの意味や設定の仕方、リファレンスのURLの場所をさがせる。

```sh
$ kubectl explain deployment.kind
KIND:     Deployment
VERSION:  extensions/v1beta1

FIELD:    kind <string>

DESCRIPTION:
     Kind is a string value representing the REST resource this object
     represents. Servers may infer this from the endpoint the client submits
     requests to. Cannot be updated. In CamelCase. More info:
     https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
```

- `kubectl run --dry-run -o yaml`によるyamlの雛形作成方法を覚える
  - deployment, pod, job などyamlが用意できるようにしておくと試験中にyamlを用意する時間短縮できる。
  - [Using kubectl to jumpstart a YAML file — #HeptioProTip](https://blog.heptio.com/using-kubectl-to-jumpstart-a-yaml-file-heptioprotip-6f5b8a63a3ea)
  - [Kubernetes Tips: kubectl でマニフェストの雛形を作る](https://qiita.com/tkusumi/items/4f63cea4c4d910b368c4)

- kubernetes.io内のブックマークリスト(kubectl cheatsheetなど)
  - cheatsheetはもちろんのこと、すぐに探せるようにして整理しておく。

# 苦労した点

- 知識よりも実際のオペレーションが問われる内容のため、ひたすら手を動かす訓練が必要。一通り覚えるためには、そこそこの学習時間は必要となる。
- terminalがwebベースの慣れが必要。思っていたよりも慣れるまでに時間かかる。
- 会場の手配。会社の集中ルームのような個室の部屋があるのであれば、それで済むが、レンタルスペースを探すとなかなか手頃な価格の場所が見つかりにくい。

# まとめ

今回は、CKAの受験にあたっての自分なりの工夫した点や苦労した点を紹介させてもらった。
即現場の環境で戦力化できるかはまた違う段階があるが、取得することによってベースと体系的に学習したことの証明にはなるとは思う。
日本語での受験も可能となりましたのでよりトライしやすくなったのではないかと思う。
今後は実際の現場での運用や開発でおぼえていった内容や検証結果をノウハウとして残していきたい。

# 参考

## Blog

- [Tips to crack Certified Kubernetes Administrator (CKA) Exam](https://medium.com/@pmvk/tips-to-crack-certified-kubernetes-administrator-cka-exam-c949c7a9bea1)
- [Certified Kubernetes Administrator (CKA) を取得してみた](https://tech.griphone.co.jp/2018/04/17/take-cka-exam/)
- [Certified Kubernetes Administrator(CKA) を取得しました](https://adtech.cyberagent.io/techblog/archives/3421)
- [Certified Kubernetes Administrator 試験に挑戦してみた。]
(https://adtech.cyberagent.io/techblog/archives/3086)
- [CKA (Certified Kubernetes Administrator) に受かったので所感とか](
https://medium.com/mhiro2/certified-kubernetes-administrator-exam-ebb84ac686dc)
- [Certified Kubernetes Administrator (CKA) 取得した](https://blog.shiftky.net/certified-kubernetes-administrator/)
- [Things to know before taking Certified Kubernetes Administrator (CKA) Exam](
https://medium.com/@adiletmaratov/things-to-know-before-taking-certified-kubernetes-administrator-cka-exam-527188db22ae)
- [Certified Kubernetes Administrator (CKA) 受験ログ](https://qiita.com/sotoiwa/items/3509ca3d18d1bed00dee)
- [Certified Kubernetes Administrator（CKA）を取得した](https://qiita.com/oke-py/items/46ecb3f530a92273b130)

## Github

- [kelseyhightower/kubernetes-the-hard-way](https://github.com/kelseyhightower/kubernetes-the-hard-way)
- [walidshaari/Kubernetes-Certified-Administrator](https://github.com/walidshaari/Kubernetes-Certified-Administrator)
- [Kubernauts - Kubernetes Learning Resources](https://docs.google.com/spreadsheets/d/10NltoF_6y3mBwUzQ4bcQLQfCE1BWSgUDcJXy-Qp2JEU/edit#gid=0)
- [ahmetb/kubernetes-network-policy-recipes](https://github.com/ahmetb/kubernetes-network-policy-recipes)

## 書籍

- [Managing Kubernetes](http://shop.oreilly.com/product/0636920146667.do)
- [Kubernetes: Up and Running](http://shop.oreilly.com/product/0636920043874.do)