kubernetes の海の浅瀬に入っていくための資料
kubernetes 浅瀬 dive2019/06/19(水) Makuake LT Party #17
View Slide
convtojisibariTwitter: @convtoGithub: convto2
浅瀬 dive って何
Kubernetes のロゴ- こいつ船の舵らしい- コンテナ輸送船的な- おしゃれ- ぼくも海にあやかろう
水深Deep dive
水深Deep dive浅瀬 dive
浅瀬 dive8水深 こっちをやりますDeep dive
もくじ- 浅瀬を目指して: kubernetesとは- まずはビーチに行こう: gitとの共通点- 準備体操: コンテナやサーバーの扱いを知る- 浅瀬 dive: pod を管理するリソースたち- 沖にでるためには- おわりに
Kubernetes とは
Kubernetes- インフラやアプリを抽象化して扱う- 抽象化されたインフラやアプリを操作できる
浅瀬すぎる
水深
Kubernetes, わかりづらい- 概念が抽象的- くそでかソフトウェア
宇宙から浅瀬にむかいたい- ざっくりどういうものか捉えたい- できれば身近なものとの比較とかがほしい
こういうツール毎日使ってませんか
git とは
git- コード変更を commit というリソースとしてとらえて抽象化して扱う- commit に対してCLIなどで操作ができる
にている
Kubernetes と git の共通点- 現実世界の情報を抽象化する- 抽象化されたリソースを CLI を使って操作- 高度なことやろうとするのは難しい- が、使うだけならそこまででもない- 分散システムなので雑にやると不整合で死ぬ
Kubernetes と git のちがうところ- Kubernetes は詳細を yaml で管理する <-> git は詳細もCLIで頑張る- Kubernetes はリソースが多い(10以上) <-> git はだいたい commit の操作
Kubernetes と git のちがうところ- Kubernetes は詳細を yaml で管理する <-> git は詳細もCLIで頑張る- Kubernetes はリソースが多い(10以上) <-> git はだいたい commit の操作Git よりでかいけどノリはとても似ている
Git と似てる警戒しすぎなくてもいい
ざっくりノリはわかったぞ!ビーチ到着
コンテナの扱い
コンテナは pod というリソースで管理- Pod にはだいたい一つのコンテナが載ってる- 条件によってはたまに複数- アプリケーションが動くのはここ- Pod の配置を指示してインフラを作っていく
だいたいおなじコンテナ pod
サーバーの扱い
サーバーは node というリソースで管理- master node が構成管理の仕事をしてくれます- Node に pod がじゃんじゃか載っていく
node1 node3node2pod podpod podpodpodpodpodpodpod
準備完了
もくじ- 浅瀬を目指して: kubernetes とは- まずはビーチに行こう: git との共通点- 準備体操: コンテナやサーバーの扱いを知る- 浅瀬 dive: pod を管理するリソースたち- 沖にでるためには- おわりに
同じpodを複数配置したい
ReplicaSet- Pod を管理し、ある pod を任意の数つくる- Pod を監視し指定した数より減っていれば自動で復旧させる- どの node に pod が配置されるかはコントロールされない(ある程度配置ルールは決められる)
node1 node3node2podpod podpod
node1 node3node2podpod podpod「全部で4つ」などの指定はできるがどう配置されるかはわからない
複数配置したpodのデプロイ時の挙動をコントロールしたい
Deployment- ReplicaSet を管理し安全に更新する手段を提供する- いくつかの更新手段が提供されており、推奨されているのは RollingUpdate という方法
各Nodeにデーモンを仕込みたい
DaemonSet- Pod を管理し、任意の pod をすべての node に1つずつ設置する- Fluentd や監視エージェントなど、確実にすべての物理サーバーに置きたいものに利用する- GKE ではデフォで DeamonSet の fluentd がいる
node1 node3node2pod pod pod
DBなどの永続化データを管理したい
StatefulSet- DBクラスタなど状態を持ったアプリを構築できる- 細かいことは省略
クラスタ上でバッチなどを管理したい
Job, CronJob- Job は一度だけ pod を起動する- CronJob は Job を cron 実行する- 詳しいことは省略
podとの関係図
Pod ReplicaSetJobDeploymentCronJobDaemonSetStatefulSet
Pod ReplicaSetJobDeploymentCronJobDaemonSetStatefulSetこいつらまとめて Workload リソースという名前がついてます
Enjoy 浅瀬
現実のアプリはまだやることがある- 環境変数の管理- LBなどの設定- 開発者ごとの認証、認可- オートスケールの設定- etc...
これらもKubernetesで管理できる
現実のアプリはまだやることがある- 環境変数の管理 Secret など- LBなどの設定 LoadBrancer Service など- 開発者ごとの認証、認可 Service Account- オートスケールの設定 HorizontalPodAutoscaler など- etc...
どういうリソースがあるかわからない
網羅的にリソースを学びたい
リソースについての知識- ドキュメント https://kubernetes.io/ja/docs/home/- Kubernetes完全ガイドhttps://www.amazon.co.jp//dp/4295004804- Kubernetes実践入門https://www.amazon.co.jp/dp/4297104385
とりあえず試したい
web上でタダでクラスタたてれる- https://labs.play-with-k8s.com/ 4時間で消えるので勉強以外の用途には使えない
よい船旅を!
まとめ- Kubernetes は実は git に似ている- はじめの一歩はそこまで難しくない- 一部を使うだけでもメリットはある- Pod を管理する様々なリソースがある- 一次ソースや体系的なソースで勉強すると良さそう(ネット記事とかはしんどい印象)
次回予告
全然きまってない- Go のおすすめCI設定- 新しい言語触ってみた系- なんか作ってみた系- コンテナイメージ最適化
ご清聴ありがとうございました