Kubernetesのおべんきょう
いまさらながらKubernetesのお勉強始めました
手始めに、入門Kubernetesを読んでみたので今のとこの自分の理解を忘備録がてらまとめてみます
まあ細かいこと書くのは後に回してとりあえず概要だけですが
Kubernetes(k8s)とは
Dockerなどのコンテナランタイムを用いて、サービスのデプロイ、スケールや運用などを自動化してくれるやつ
もとはGoogleによって開発されており、現在コンテナオーケストレーションツールはほぼk8s一強状態
すごくつよい
主な機能
ロールアウト
アプリの新バージョンリリース時、一部Podだけアップデートさせることを全体が新バージョンになるまで繰り返す
Podというのはk8sでの最小単位で、1つ以上のコンテナの集合体
これならダウンタイムなしにデプロイ可能 おんなじ感じでロールバックもできるよスケール
アプリを提供しているPodの数を増減することで、水平スケーリングが可能
Podへの割り当てリソースを増減する垂直スケールは未実装いちおう提供されてる? github.com Pod単位でスケーリングを行うため、1サービス1サーバーというような提供の仕方よりも効率的にマシンのリソースを使用可能自動回復
各Podなどのヘルスチェックを行い、正常に動作していないものを再起動させたりすることが可能
ヘルスチェックも様々な方法で行うことができ高い汎用性を持ってる
この機能により高い可用性を誇ってるすごい
アーキテクチャ
まだまだ理解が追い付いてないので細かい部分をはしょった概要図でお茶を濁します
Cluster
k8sの最大単位
複数のnodeからなっていて、これで1つのシステムとして動作するNode
クラスタを構成するマシンで、MasterとWorkerの2種類が存在- Master Node
クラスタを管理するためのNode- etcd
k8sのリソースの情報を保存しておくKey-Value Store
これを使ってリソースの永続化を行っている - apiserver
etcdに対しての読み書き操作を行うAPIを提供
他のコンポーネントは直接ではなく、ここを通してetcdを参照する
また、ユーザーからのコマンドであるkubeletも同様にこれを通しetcdを参照、変更する
このユーザーのコマンドもシステムの動作も同じ方法で行うのはk8sの特徴の1つ
これによって高い拡張性が確保できる - scheduler
各NodeのリソースやPodの情報などを参照し、作成したPodをどのNodeにバインドするかを決定する - controller-manager
そのほかのリソースを管理するためのコントローラのマネージャ
- etcd
- Worker Node
まとめ
とりあえず現状の理解ではこういうものだと思ってます
たぶん間違ってるとことか言葉が足りないとことか多々あるとは思うけどそこは追々