CKA合格ログ～事前学習/申し込み/試験～

# はじめに

## 本記事の内容

Certified Kubernetes Application Developerに引き続きCKAも取得できましたので、勉強の際のもろもろをまとめました。
これから受験される方のお役に立てば幸いです。

CKADについてはこちら
[CKAD合格ログ～事前学習/申し込み/試験～](https://qiita.com/gashirar/items/e66ad5a15124febce661)

## CKAとは

https://training.linuxfoundation.org/certification/certified-kubernetes-administrator-cka/ より抜粋
> The CKA Certification focuses on the skills required to be a successful Kubernetes Administrator in industry today.

- 試験の仕組み
    - 試験の実施方法
        - オンライン
    - 試験の所要時間
        - 3時間
    - 認定の有効期間
        - 3年間
    - 受験料
        - $300
    - 受験料に含まれているもの
        - 12ヶ月間の試験受験資格
        - 無料の再受験
        - PDF形式の証明書
    - 経験レベル
        - 中級

CKADより時間が一時間長く、問題も24問になっています。

# 事前学習
## 学習開始時点の状況
筆者のスキルレベルは下記の通りです

- v1.7くらいから趣味でちょこっと触っている
- 本格的に触りはじめたのが今年入ってから
- 先月（2019/10）にCKADを取得

## 学習環境
- Kubernetes
    - Kubernetes The Hard Wayで作成したクラスタ 
- エディタ
    - Vim
        - 試験中はVimで操作するため
        - `~/.vimrc`のカスタマイズも一旦消して初期状態のVimで練習

CKAはクラスタ自体を作成する問題が出る可能性があるのでHard Wayで構成したクラスタを利用しています。

## 学習コンテンツ

### Kubernetes The Hard Way

一度はこれをやっておきましょう。
https://github.com/kelseyhightower/kubernetes-the-hard-way

「GCPの無料枠がないよ！」という人はVagrant上でやる方法もあるのでどうぞ。
https://github.com/kenfdev/kubernetes-the-hard-way-vagrant
上記Vagrant版はv1.10.2ベースなので、自分で試験環境のバージョンにあげてみるのも勉強になるかも。

### CKA Curriculm

CKAのカリキュラムが公開されています。
きっちり対応しているわけではありませんが、関連しそうなページを貼っておきましたので参考までに。
下記は試験中に閲覧可能なページなので、自分は事前にブックマークしておきました。

- 5% - Scheduling
  - Use label selectors to schedule Pods.
      - https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
  - Understand the role of DaemonSets.
      - https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
      - https://kubernetes.io/docs/tasks/manage-daemon/update-daemon-set/
  - Understand how resource limits can affect Pod scheduling.
      - https://kubernetes.io/docs/concepts/policy/resource-quotas/
  - Understand how to run multiple schedulers and how to configure Pods to use them.
      - https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
  - Manually schedule a pod without a scheduler.
      - https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
      - https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/
  - Display scheduler events.
      - https://kubernetes.io/docs/concepts/scheduling/kube-scheduler/
  - Know how to configure the Kubernetes scheduler.
      - https://kubernetes.io/docs/concepts/scheduling/kube-scheduler/
- 5% - Logging/Monitoring
  - Understand how to monitor all cluster components.
      - https://kubernetes.io/docs/concepts/overview/components/
      - https://kubernetes.io/docs/tasks/debug-application-cluster/debug-cluster/
  - Understand how to monitor applications.
      - https://kubernetes.io/docs/tasks/debug-application-cluster/
  - Manage cluster component logs.
      - https://kubernetes.io/docs/tasks/debug-application-cluster/debug-cluster/
  - Manage application logs.
      - https://kubernetes.io/docs/tasks/debug-application-cluster/
- 8% - Application Lifecycle Management
  - Understand Deployments and how to perform rolling updates and rollbacks.
      - https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
  - Know various ways to configure applications.
      - https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/
      - https://kubernetes.io/docs/concepts/configuration/secret/
      - https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/
  - Know how to scale applications.
      - https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
      - https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
  - Understand the primitives necessary to create a self-healing application.
      - https://kubernetes.io/docs/concepts/architecture/
      - https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/
- 11% - Cluster Maintenance
  - Understand Kubernetes cluster upgrade process.
      - https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
  - Facilitate operating system upgrades.
      - https://kubernetes.io/docs/tasks/administer-cluster/cluster-management/
  - Implement backup and restore methodologies.
      - https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/
- 12% - Security
  - Know how to configure authentication and authorization.
      - https://kubernetes.io/docs/reference/access-authn-authz/authentication/
      - https://kubernetes.io/docs/reference/access-authn-authz/rbac/
      - https://kubernetes.io/docs/reference/access-authn-authz/controlling-access/
  - Understand Kubernetes security primitives.
  - Know to configure network policies.
      - https://kubernetes.io/docs/concepts/services-networking/network-policies/
      - https://kubernetes.io/docs/tasks/administer-cluster/declare-network-policy/
  - Create and manage TLS certificates for cluster components.
      - https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/
  - Work with images securely.
      - https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
  - Define security contexts.
      - https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
  - Secure persistent key value store.
      - https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/
- 7% - Storage
  - Understand persistent volumes and know how to create them.
      - https://kubernetes.io/docs/concepts/storage/persistent-volumes/
  - Understand access modes for volumes.
      - https://kubernetes.io/docs/concepts/storage/persistent-volumes/
  - Understand persistent volume claims primitive.
      - https://kubernetes.io/docs/concepts/storage/persistent-volumes/
  - Understand Kubernetes storage objects.
      - https://kubernetes.io/docs/concepts/storage/
  - Know how to configure applications with persistent storage.
      - https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/
- 10% - Troubleshooting
  - Troubleshoot application failure.
      - https://kubernetes.io/docs/tasks/debug-application-cluster/debug-application/
  - Troubleshoot control plane failure.
      - https://kubernetes.io/docs/tasks/debug-application-cluster/debug-cluster/
  - Troubleshoot worker node failure.
      - https://kubernetes.io/docs/tasks/debug-application-cluster/debug-cluster/
  - Troubleshoot networking.
      - https://kubernetes.io/docs/tasks/debug-application-cluster/debug-cluster/
- 19 - Core Concepts
  - Understand the Kubernetes API primitives.
      - https://kubernetes.io/docs/concepts/overview/kubernetes-api/
  - Understand the Kubernetes cluster architecture.
      - https://kubernetes.io/docs/concepts/architecture/
  - Understand Services and other network primitives.
      - https://kubernetes.io/docs/concepts/services-networking/service/
- 11% - Networking
  - Understand the networking configuration on the cluster nodes.
      - https://kubernetes.io/docs/concepts/cluster-administration/networking/
  - Understand Pod networking concepts.
      - https://kubernetes.io/docs/concepts/services-networking/service/
  - Understand service networking.
      - https://kubernetes.io/docs/concepts/services-networking/service/
  - Deploy and configure network load balancer.
      - https://kubernetes.io/docs/concepts/services-networking/service/
  - Know how to use Ingress rules.
      - https://kubernetes.io/docs/concepts/services-networking/ingress/
  - Know how to configure and use the cluster DNS.
      - https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
      - https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/
      - https://kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/
  - Understand CNI.
      - https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/
      - https://kubernetes.io/docs/concepts/cluster-administration/networking/
- 12% - Installation, Configuration & Validation
  - Design a Kubernetes cluster.
  - Install Kubernetes masters and nodes.
      - https://kubernetes.io/docs/setup/
  - Configure secure cluster communications.
      - https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/
  - Configure a Highly-Available Kubernetes cluster.
      - https://kubernetes.io/docs/tasks/administer-cluster/highly-available-master/
  - Know where to get the Kubernetes release binaries.
      - https://github.com/kubernetes/kubernetes/releases
  - Provision underlying infrastructure to deploy a Kubernetes cluster.
  - Choose a network solution.
      - https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/
      - https://kubernetes.io/docs/concepts/cluster-administration/networking/
  - Choose your Kubernetes infrastructure configuration.
  - Run end-to-end tests on your cluster.
      - https://kubernetes.io/blog/2019/03/22/kubernetes-end-to-end-testing-for-everyone/
  - Analyse end-to-end tests results.
      - https://kubernetes.io/blog/2019/03/22/kubernetes-end-to-end-testing-for-everyone/
  - Run Node end-to-end tests.
      - https://kubernetes.io/blog/2019/03/22/kubernetes-end-to-end-testing-for-everyone/
  - Install and use kubeadm to install, configure, and manage Kubernetes clusters.
      - https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
      - https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/


# 申し込み
## 試験の申し込み
公式サイトから申し込みます。特に要望がなければCKA-JPで。
（試験官とのやりとりなのですが、何故かはじめ英語で途中から日本語になりました。）
https://training.linuxfoundation.org/certified-kubernetes-administrator-cka-jp/

時間帯について、自分が申し込んだ際は平日09:00～16:00の間でいくつか枠が用意されていました。
休日には枠がなかったようにみえましたが、CKADと同じくもともとないのか埋まっていたのかは不明です。

## 試験会場の準備
貸し会議室を借りたり会社の会議室をおさえておきましょう。カフェのようなオープンな場はNG。
試験はCKADより1時間長い3時間です。CKADと同じく事前準備等あるので前後30分くらい余裕をもっておさえておくと良いです。

## 端末の準備
- Chromeブラウザ
  - 受験用のExtensionを事前にインストール
  - Kubernetesのサイトをブックマークしておくと◎
- Webカメラ
  - 自分はUSBで接続するカメラを利用しましたが、ノートPCのカメラでも可能です。

# 試験
## 試験直前の準備
- ブラウザの確認
    - 試験官の指示に従って確認作業を行います。会話の必要はなく、チャットでのやりとりとなります
- 受験者の確認
    - 国が発行する写真つきの証明書が必要となります。
        - 自分はパスポートを利用しました。
- 周囲の確認
    - 机の周りや下などをチェックされます
        - このとき外付けカメラだと取り回しやすいです。

## 試験
CKADに比べて時間の余裕は結構あるようにみえます。
1問だけとばして23問解き終わった時点で、残り1時間となっていました。
Kubernetes構築の問題も出るのでLinuxのそのあたりのコマンドも使えるようになっておきましょう

- ``systemctl start/stop/status/restart/enable [サービス名]``
- ``journalctl -u [サービス名]``

あとはCKADと同じく、下記を意識すると良いです。

- `kubectl --dry-run -o yaml`などでベースを作る
  - 時間を節約するために。残りはvimで手直し
- `kubectl -h`でオプションを確認
  - ちょっとしたオプションであれば、公式サイトを検索するより早い
- はじめに`source <(kubectl completion bash)`を叩いて補間を使えるようにしておく
  - Pod名などの補間が効くので便利
- ctl+c/ctl+v（コピペ）はブラウザ上では使えないのでマウスでコピペ
  - Ins+特定のキーでコピペ可能なようですが、変な操作をしてしまいそうだったのでマウスに


# 結果＆おわりに
試験終了から36時間以内に結果が届くとのことで、自分の場合はCKADと同じく32時間後くらいに届きました。
結果はスコア92%で合格（74%↑が合格）。1問だけ手も足も出ない問題があったので、その分の8%マイナスの結果です。

CKA/CKADどちらも取得できたので、しばらくは本番運用に向けて諸々がんばっていきたいです。