Edited at

CKAD合格したので学習ロードマップを考えてみる


はじめに

4月から3カ月Dockerを、7月から1カ月Kubernetesを勉強して、

本日Certified Kubernetes Application Developer に合格しました。

無題.png

試験内容については記載できないのですが、振り返ってみると「勉強の順番とポイントを気にしていればもっと早く上達しただろうな」と思うことがあり、今まで勉強した内容をロードマップとして整理してみます。

もしかしたら偏った勉強法かもしれませんが、これから勉強を始める方の参考になれば幸いです。


前提


  • Linuxコマンドが実行できる環境を準備できる

  • Linuxの基本的なコマンドが手に馴染んでいる

  • Docker/Kubernetesは聞いたことあるけど触ったことがない

  • DockerとKubernetesについてそれぞれ2~30時間程度の勉強時間


ロードマップ


Dockerについて理解しよう

まずはKubernetesのメインとなるコンテナ実行環境の理解から始めます。

コンテナ実行環境は実は種々あるのですが、現時点でメジャーなDockerが適当でしょう。

一番最初には、共有されているスライド資料をサラッと眺めてイメージをつかみましょう。

たとえば@zembutsuさんが公開されているスライドは非常によくまとまっていて、概念を理解するにはP1~79を眺めてもらうのが良いかと思います。

次のインプットとしては、書籍を購入して入門部分を重視して読んでみるのが良いかと思います。

入門大体の書籍がカバーしているので、好みのものを選んで大丈夫です。

私はDocker 実践ガイドを購入しました。良い本でした。

TwiiterなどではDocker/Kubernetes 実践コンテナ開発入門が評判だった印象があります。

Dockerの理解を最優先した場合、以下の読み方を採用することを検討してみて下さい。


  • コマンド部分は後ほど写経するため、まずは説明を中心に一周読み進める

  • Kunbernetes部分は後ほどまとめて学習するため、眺める程度にする


Docker環境を準備しよう

手を動かす環境を準備しましょう。

私自身はWindows機なのですが、KatacodaのDocker Playgroundをお勧めします。

環境構築で結構はまりがちなためです。

賽の河原で小石を積むような体験をする可能性があります。

Macの方はドットインストールなどを参考に準備してみたらよいのかなと思います。


dockerコマンドをてに馴染ませよう

Web上の様々な入門向けリソース、または購入した書籍に記載されているコマンドを実行してみて、何が起きるか確認してみましょう。

のちほどKubernetes環境で実行するkubectlとコマンドは違えど似ている部分が多いです。

エラーが発生した場合もメッセージから原因を調べたり、書き直したりしてエラーを解消する経験を積むことで手に馴染んでいきます

エラーが解消できなくて挫折しそう、、、という方は同じコマンドを検索してコピペし、自分のコマンドとの差分を確認しても勉強になると思っています。挫折するよりは百倍良いです。


CKADについて理解しよう

Dockerの概念を理解して記法が手に馴染んだ時点で、Kubernetesに内容を移していきましょう。

Kubernetesについて深く理解した上で楽々資格取得が理想ではあるのですが、普段の業務に追われている方、直接業務で関わらない方はモチベーションの維持が大変なのが実情かと思います。

ここでは資格取得を自信に学習していくという思想で、CKADの学習すべき範囲を確認します。

出題範囲についてはクリエーションライン社のページの説明がイメージしやいと思います。CKADの概要については以下のように記載されています。


  • 基本コンセプト

  • 設定

  • マルチコンテナPod

  • ログなどによる確認

  • Podの設計

  • Serviceとネットワーク

  • 状態の永続性

一方でCKAの概要については以下のように記載されています。共通する部分もありますが、ノードの操作など差分もあります。


  • アプリケーションのライフサイクルの管理

  • インストール、設定および確認

  • 基本コンセプト

  • ネットワーク

  • スケジューリング

  • セキュリティ

  • クラスタの管理

  • ロギング/モニタリング

  • ストレージ

  • トラブルシューティング

今はなんのこっちゃ?と思うかもしれませんが、このCKADのカリキュラムに関わる部分を重視しながらリソースを探していった方が良いと思っています。

なぜならKubernetesが非常に多機能であり、便利なツールも数多くリリースされていることが魅力の一つで、それに伴い手に入るリソースの守備範囲も広いと感じたからです。私自身も寄り道しました。


Kubernetesについて理解しよう

まずは共有されているスライド資料をサラッと眺めてイメージをつかみましょう。

@daebum_leeさんが公開されているスライドが図が多くてとっつきやすいかなと思います。

Kubernetesについては概念だけでなくしっかり理解した方が良いため、こちらも書籍の購入をお勧めします。

私自身はKubernetes完全ガイドを以下の条件で選び、実際に読んで条件にベストマッチだったので満足しています。


  • 図が多く、新しい概念が連続してもとっつきやすい

  • CKADに限らずKuberneteについて広く解説されていて、資格取得後も使える

  • コマンドとマニュフェストの記述が多く、後述の演習に利用しやすい

覚えておいてほしい事項として、この時点ではマニュフェストの記法まで完全に覚えなくてよいと考えています。理由は後述します。


Kubernetes環境を準備しよう

Dockerと同様にKatacodaでもコマンドは試せるのですが、Kubernetesについては真面目に環境を準備した方が良いです。

CKADはCKAより時間の短い演習形式の試験のため、コマンド入力にラグの少ない環境で学習するのが望ましいためです。

構築方法については色々と試行錯誤したのですが、以下のQiita記事を参考にしながらminikube環境を--vm-driver=noneオプションを利用して起動するのが手間が少ないかなと思います。

Docker for Windowsを利用する方、または社内プロキシ環境配下の方はパブリッククラウドなどを利用してLinux環境を用意することをお勧めします。

構築がうまくいかなかった場合の切り分けが難しいためです。


--dry-run でyamlファイルを作ってみよう

この記事で一番伝えたい箇所です。

環境も準備できたし、さあ書籍のコマンドを写経!というタイミングです。

マニュフェストを写しながら、こんな様々な記法を覚えなきゃならないのか、、、とマニュフェストの写経で挫折しかけるかもしれません。そんな方はちょっとだけ待ってください。

Kubernetes Tips: kubectl でマニフェストの雛形を作るを参考に、--dry-run -o yamlオプション付きでkubectl runコマンドをyamlファイルを確認し、作成された中身を確認してみて下さい。

$ kubectl run foo --restart=Never --image=nginx --dry-run -o yaml > foo.yaml

$ cat ./foo.yaml

上記の例では下記のようなファイルが生成されていると思います。

kubectl run --helpでオプションを見ながら追加すると、もっと多くの項目を生成できます。


foo.yaml


apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: foo
name: foo
spec:
containers:
- image: nginx
name: foo
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Never
status: {}

怪しい裏技と感じるかもしれませんが、--dry-run自体はkubernetes.ioでも紹介されいるテクニックです。

--dry-runで生成できない項目(volumeMountなど)を中心に後の演習を進めていくと、自分で覚えて書く項目が絞れ、学習コストの削減が期待できます。


kubectlコマンドを手に馴染ませよう

先ほど読んだ書籍で出てきたkubectlコマンド実行したり、マニフェストファイルを作成して実行してみましょう。

minikube環境の方は一つの端末でminikube tunnelコマンドを実行しておくとLoadBalancerのExternalIPを利用できます。

$ minikube tunnel

Status:
machine: minikube
pid: XXXXXX
route: <Kubernetes内部ネットワーク> -> <ノードのIPアドレス>
minikube: Running
services: []
errors:
minikube: no errors
router: no errors
loadbalancer emulator: no errors

実行時にエラーが発生する場合は内容を確認し、エラー修正する動きに慣れる方が試験でエラーが出た時も時間をロスせずに済みます。

エラーが解消できない場合、覚えきれないようなオプションや記法についてはkubernetes.ioの公式ドキュメント内で検索し、サンプルで記載されているマニュフェストが役に立ちます。

本番でも参照できるドキュメントのため、慣れておくことをお勧めします。

ほとんどの受験記に書かれているようにCKAD-exerciseは素晴らしい演習リソースで、スラスラ解けるようになるまで繰り返し説いておいた方が良いです。

試合に向けた素振りのようなもので、基礎力として役に立ちます。

他に演習ができそうなリソースについても紹介します。

私自身は1回目の受験で合格したのですが、もし不合格した場合は以下を利用して再受験ようと考えていました。


試験を申し込もう

ついに試験をスケジュールするタイミングです。

申し込み先は2つ選べるのですが、先ほど紹介したクリエーションライン社のページを参照すれば違いが記載してあります。

試験日までの不安の対策として、受験記を読んで受験のイメトレをしても良いかと思います。

最初に試験を受けようと調べ出してから日が経っているので、新しい受験記が書かれていたりします。

自分が見落としていた試験のポイントや、ひょっとしたら新しいTipsが見つかるかもしれません。

実際に私自身は試験の直前でこの受験記を見つけて、見落としている部分があり役に立ちました。


最後に

私が特に伝えたいことを改めてまとめます。


  • スライド→文章→演習の順で学習する

  • マニュフェストファイルは見慣れるまで極力手で書かない。

  • コマンドを手に馴染ませる。エラーの解消にも慣れる。

この記事を読んだ方、CKADにトライしてみましょう!!