本ページは、Kubernetesを学びたい人向けにコンテンツを整備していくことを目的にしたものです。 随時更新しますので、ぜひご活用ください。
なぜコンテナを使いたいかを考える
まずはなぜ自分たちがコンテナやKubernetesに興味を持っているのか、使いたいのかを改めて考えるきっかけをつくるといいです。 もちろん触ってみないとわからないことも多いので、勉強という意味では意義を無視してどんどんすすめてみてください。 なぜコンテナを使いたいかを考える材料として、「LeanとDevOpsの科学 テクノロジーの戦略的活用が組織変革を加速する」がとてもオススメです。書評ブログも過去に書いているのであわせてご覧ください。
Kubernetesの前に単体コンテナの扱いを学ぶ
Kubernetesは、コンテナオーケストレーションツールです。 Kubernetesを学びたいと思っていて、まだDockerなどのコンテナをきちんと勉強したことない方は、先にコンテナを単体として扱う練習をしておくといいです。一番手軽な方法として、Dockerを手元の端末にインストールし、操作感や概念を理解しておくことです。 Kubernetesは、アプリケーションをコンテナで運用する際に、コンテナ単体だけでは足りなかった部分を補ってくれる存在となります。いきなりKubernetesから入ると学習効率は下がる可能性がありますので注意してください。
コンテナ謎解き for アプリ開発者
友人から、書籍を読めばトピック毎のことはわかるが、膨大にあるKubernetesのことをなにからどの様に学んでいけばいいかわからないという相談をうけました。 そこで、わたしの経験からアプリ開発を主に行う人がKubernetesの何をどのように学んでいけばいいかをクイズ形式でまとめたところ、好評だったため本サイトでも公開してみました。 以下のクイズは順番を意識して作っているので順にこなしていけばと思います。
- Dockerを用いて、Nginxを起動せよ
- Dockerを用いて、“Hello mokumoku kai” と返すNginxイメージを自作せよ
- また、そのイメージをDockerhubで公開せよ
- minikube上に、前の項目で作成したNginxイメージをデプロイせよ
- マニフェストファイルを用意できていること
- Podを削除してもサービスを継続できること
- Pod数が3以上であること
- Deployment、ReplicaSet、Podの3つの関係性を考えよ
- Serviceの役割について説明せよ
- 作成したNginxに追加して下記の仕組みに変えよ
- なんらかのアプリケーションサーバの追加(phpでもrubyでもなんでも可)
- 環境変数
MOKUMOKUKAI=mokumokusaikou
を設定し、設定した環境変数を返すアプリケーションを作成せよ
- MySQLを追加し、MySQL内の任意のデータを返すアプリケーションを作成せよ
- Nginxのバージョンを変更しデプロイしてみよ
- アプリケーションに変更を加えてアプリケーションのイメージを作り直しデプロイしてみよ
- その際、コンテナイメージのタグ名をどのように指定したか復習し、latestタグを使うことが悪手といわれているか理由を考えよ
- (ヒント)イメージの管理やimagePullPolicyの観点から考えるといい
- 作成したアプリケーションのイメージのサイズを確認してみよ
- コンテナイメージは一般的に軽いほうが良いといわれるが、その理由と軽くする方法について調べ考えよ
- 上の例でいうとNginxとアプリケーションは同じPod上で動作させることも可能だが、同じPodで動かした場合のデメリットを考えよ
- (ヒント)1コンテナ1プロセスの原則が何を意味するのか考えてみよう
- ここまで完了したらそろそろ、minikubeを卒業してクラウドサービスのKubernetesで上をデプロイしてみよう。
- より分散環境で動作することを意識していこう
- GKE上でIngressリソースを使って、デプロイしたアプリケーションをインターネットに公開せよ
- GKEでなくても、Kubernetesサービスならなんでもいいですが、手軽で安価に使えるクラウド上のKubernetesとしてGKEとしました。
- Ingressがどのような仕組みで動き、どんな働きをするのか考察せよ
- その際には、Sevice Type:loadbalancerやNodePort Serviceとの違いに着目せよ
- アプリケーションで利用しているMySQLのボリュームをGCP上のPersistent Volume(ブロックストレージ)に置き換えよ(すでに対応済みならスキップ)
- クラウドサービスとKubernetesの関係性について整理せよ
- デプロイしたNginxに、
/hello
のリクエストのときだけバックエンドサーバへプロキシせずに “Hello from Nginx"と返すように設定せよ- その際、Nginxの設定ファイルはKubernetesのConfigMapを用いてNginx Podに引き渡すこと
- アプリケーションのMySQLへの接続のIDとPasswordをKubernetesのSecretを用いる構成に変更せよ
- SecretとConfigMapの違いを説明せよ
- 作成したSecretのYAMLの中身を閲覧し、エンコードされた文字列を確認せよ。このエンコードされた文字列はセキュアである状態か考えてみよ。もしセキュアでないと考えた場合、どのようにSecretを管理するべきか検討せよ。
おすすめの勉強材料
Kubernetesを学ぶのに非常に参考になっている書籍などを紹介します。
基礎知識
本ブログ内ではよく紹介していますが、Kubernetesの基礎知識や仕様の辞書として使いたいのであればKubernetes完全ガイドがまずいちばんの良書と考えています。
DevOps
「Kubernetesで実践するクラウドネイティブDevOps」という本があります。こちらについては過去にレビュー記事を書いたのでこちらからご参照ください。
セキュリティ
セキュリティに特化してここまで詳細に書かれた本はほかにありません。
拡張
Kubernetesをより使いこなすために、自作のコントローラ(Operator)を作ってみたい人やKubernetesの内部をより良く理解したい人はこちらから入るとおすすめです。
認定試験
Linux FoundationとCloud Native Computing Foundation(CNCF)によって、Kubernetesの認定試験を提供しています。 Certified Kubernetes Administrator(CKA)とCertified Kubernetes Application Developer(CKAD)の2種類です。 試験はコマンド操作による実技試験のため、非常に実践的なスキルが学べます。こちらの認定資格をはじめの目標にしてみるのもよいかとおもいます。わたしも過去にCKADを受けたことがあります。(ブログ: CKADを取得の対策や試験当日の対応について)
Kubernetesに関するブログ記事
本サイトのKubernetesに関するブログ記事は下記からたどれます。