Kubernetesとは
- コンテナ群/クラスタを管理してくれる
- 複数のコンテナをまとめて扱い、起動・停止・通信の管理が可能
- コンテナオーケストレーション/クラスタ管理のデファクト
- 読み方
- googleが「Borg」をもとに開発したOSS
- ポケモンGoやメルカリにも使われている
なぜ必要となってきたか
今やアプリにおいてコンテナ化は必須!
- 軽量・可搬性
- リソースを無駄なく使える
その流れにおいて、実際の環境では、
- 同じ設定のコンテナを複数のサーバで起動
- 通信を複数のコンテナに負担分散
- サーバが落ちたらコンテナの他サーバを起動し直す(冗長性)
- オートスケール
などを考える必要があり、とても人間が管理することはできない!!
そこで、コンテナオーケストレーション(大量のコンテナ管理)やクラスタ管理(大量のサーバ管理)を行なってくれるものが必要となった。それがKubernetes
クラスタ
複数のコンピュータを結合して協調動作させるシステムのこと
デメリット?
- Nodeの障害自体は復旧したい
- k8s自体が複雑
基本的な考え方
宣言的設定:Declarative Configulation
- あるべき状態を記述する設定方法
- 対象の状態に関わらず、あるべき姿に制御しようとする
- ついになる単語は命令的
- 命令的が”動作”を指定するのに対し、宣言的は”状態”を指定する
調停ループ:Reconciliation Loop
- 宣言的設定を実現するための仕組み
- 差分を検知し、それをゼロにするべく動いている
自己回復:Self-healing
- 宣言的設定と調停ループによってもたらされる特性
実際にどう実現されるか
部分
Pod
Volume
- Pod内のコンテナで共有されるディスク領域
Master
Node
- 動かすアプリケーション・コンテナ
- Masterからの命令を受け取り、その通りにpodを設定する
概念的なもの
- Resource(Object)
- k8sが管理する概念
- Podやvolumeは基本的Resourceの1つ
- Controller
- Resourceを管理するためのResource
Resource詳細
- ConfigMap/Secret
- 主にPodに対する設定値を管理する
- ReplicaSet
- Podの数を一定に保つ
- Deployment
- 複数のReplicaSetを用い、ダウンタイムを最小化してアプリケーションの更新を行う
注意点
- 1コンテナ1プロセス
- 環境変数で環境差分を吸収する
- 状態をコンテナ内部に持たせない
- ログを標準出力に流す
- ファイルに吐くとステートフルになってしまう...
- 暗黙の了解?
これから
ネットワークなどは飛ばしてしまいました。。。
いつか実装などもできたらいいなと思います