Kubernetes関連の基本用語をまとめていく。(随時追記)
あと最後に、kubernetesアーキテクチャのイメージ図もつけてみた。
もくじ
【用語】
・クラスタ
・Pod
【アーキテクチャのイメージ】
■クラスタ
Kubernetesは多数のマシンによって構成される前提で動くもの。
それらマシンの集合をグループ化した単位を「クラスタ」と呼ぶ。
→クラスタ毎に独立して、設定・管理が可能。
■Master Node(マスターノード)
クラスタを成すノードの1つ。
クラスタの管理の役割を担う。
なおMaster Nodeは複数台のマシンで構成可能だが、その数は奇数にしなければならない。
理由として、例えば2台構成にして1台が落ちた時、もう1台の生き残っているほうは、
当然落ちた側の1台と通信できなくなる。
しかし、生き残っている側は、もう1台と通信できない理由が落ちた側にあるのか、
もしくは自分側が悪いのか、自分では判断できない。
そのため、自分側に障害起因があり、意図しない動作を犯す懸念から、
生き残っている側も自分の機能を停止させることになる。
結果として、落ちた側も生き残った側も機能停止してしまう。(KVS(Key Value Store)の制約による。)
一方、3台など、奇数台でMasterを構成した場合、
仮に1台が落ちても、他の2台ともが生き残っていれば、多数決の原理から、
障害起因がどのマシンにあるのか特定できる。
生き残っているマシンを巻き込んで、完全機能停止することを防ぐために、多数決のできる奇数台にすべきというわけである。
■Worker Node(ワーカーノード)
クラスタを成すノードの1つ。
Maseterからの指示を受けて、コンテナ化されたアプリケーションを実際に動かす役割を持つ。
最低限、「コンテナランタイム」、「kubelet」、「kube-proxy」の3つのコンポーネントの稼働が必須となっている。
■kubelet
Worker Nodeで稼働するコンポーネントの1つ。
Master Nodeと通信し、Woerker Node上のコンテナを制御する役割を持つ。
■コンテナランタイム
コンテナ実行エンジンのこと。すなわち、Dockerやrkt、CRI-O69gなどのこと。
Worker Node上で稼働する。
■Pod
ubernetsにおける、デプロイの最小単位。
Podは1個以上のコンテナを内包しており、
Pod内の全コンテナは、同一のNodeにデプロイされることが保証されている。
コンテナを複数内包することもでき、その場合は同一Pod内のコンテナで、ほぼすべてのリソース(IPアドレス、ポート等)を共有することになる。
※ただし、コンテナ間でファイルシステムだけは共有できないことに注意。
ファイル共有には、ボリュームを用いる。
■Volume
コンテナやPod間で共有される、永続的なデータ領域。
※前提として、コンテナは以下2点の性質をもっている。
・コンテナにおけるファイルシステムは、コンテナ毎に独立している。
従って、コンテナ間で直接ファイルを授受することはできない。
・コンテナ稼働中に変更したファイルがあっても、コンテナイメージを変更したことにはならないため、
コンテナプロセスの停止時に変更内容は消失してしまう。
→これらの課題を解消し、データ共有または永続化したい場合、ボリュームが用いられる。
■Service
Podと通信を行うための、インタフェース的な役割を持つ。
前提として、PodはNode内に散在しており、しかもそのIPは流動的である。
そのため、Podと通信したい場合、PodやNodeの位置を特定する仕組みが必要となる。
その仕組みとして、通信の窓口の役割を担うServiceを介することで、Podと確実な通信ができるようになっている。
■kube-proxy
Serviceの一部分を実現する役割を担う。
ネットワークトラフィックのプロキシとロードバランスを制御する役割を持つ。
■ReplicaSet
PodやNodeでの障害発生時、自動回復(オートヒーリング)を行うためのリソース。
加えて、稼働・非稼働Pod数の監視と調整機能も担っており、稼働しているべきPod数と実際稼働中のPod数との整合性チェック&自動対応などを行ってくれる。
なお、Kubernetesでいうオートヒーリングは、あくまでもPodの再起動であり、生涯で停止したPodの状態をそのまま復帰させるわけではないことに注意。
また、Podの直接デプロイではReplicaSetは機能しない。
オートヒーリング機能を有効にしたければ、ReplicaSetを利用してPodをデプロイする必要がある。
■kubectl
Kubernetesクラスタに対して、デプロイやPodのスケールアウトなどの各種管理操作を行うための、CLIツール。
kubectlの設定は、「kubectl config」コマンドで管理でき、デフォルトでは「$HOME/.kube/config」配下に設定内容が格納される。
大まかな全体像
※参考書籍
『コンテナ・ベース・オーケストレーション Docker/KuberLinuxnetesで作るクラウド時代のシステム基盤』