サトル:「コンテナの運用における課題って解決できないものなの?」
クラフ:「いやいや、もちろん解決するためのツールも存在するんだよ。それが『Kubernetes(クバネティス)』なんだ」
ディア:「何それ、美味しいの?」
Kubernetesは、コンテナ化されたアプリケーションのデプロイやスケーリングなどを管理するためのコンテナの“オーケストレーションツール”OSSだよ。ギリシャ語で「操舵手」や「パイロット」という意味を持っているんだ。頭文字”K”から始まり末尾”S”で終わるまでの間に8文字(ubernete)があることから、省略して「K8S」と書かれることもあるよ。Kubernetesは、CNCFの主要なOSSプロジェクトで、CNCFの「Maturity levels(成熟度レベル)」で 「Graduated」という評価を受けているよ。Maturity levelsでは「Graduated」「Incubating」「Sandbox」の3つの成熟度にOSSをレベル分けしており、OSS選定の判断基準の指標にされているよ。
コンテナの“オーケストレーションツール”
サトル:「オーケストレーションツールって、何?オーケストラなら聴くけど。」
クラフ:「簡単に言うと、コンテナの運用を色々と手助けしてくれるんだ。例えば、障害発生してもシステムを止めないようにするとか、急激な負荷に持ちこたえることが出来たり、データの損失やシステム更新の入れ替えをやりやすくしてくれるのさ。オーケストラの指揮者のようなイメージだね」
ディア:「Kubernetesでは、どうやってコンテナを管理するの?」
クラフ:「Kubernetesは『Pod(ポッド)』と呼ばれる単位でコンテナを管理するんだ。1つのPodに対して、Kubernetesは1つのIPアドレスを自動割り当てするよ。Podの中には、複数のコンテナが存在する場合もあるけど、大体は1つのPodで1つのコンテナを管理するイメージで大丈夫さ。
また、Kubernetesでは、依存関係と必要な複数のサービスをまとめてパッケージングしたコンテナを活用するよ。このコンテナ化されたアプリケーションを実行するノード(物理/仮想OS)の集合体を『Kubernetesクラスタ』と呼んでいるんだ」
「Pod(ポッド)」は、Kubernetesで管理するコンテナの最小単位
サトル:「なるほど。Kubernetesの構成をより詳しく教えて!」
クラフ:「クラスタは、『Kubernetes Master』『Kubernetes Node』の2種で構成されるよ。Kubernetes Masterは『マスターノード』『マスター』 『コントロールプレーン』と表現されることもある。
また、Kubernetes Nodeは『ノード』『ワーカー』『ワーカーノード』とも言われるんだ。
Kubernetes Nodeは、コンテナが起動するノード、いわゆるDockerホストに相当するよ。このKubernetes Nodeは、Kubernetes Masterにぶら下がっていて、APIで通信しているんだ。Kubernetes Masterは、APIやエンドポイントの提供、コンテナのスケジューリングや拡張なども担っているんだ。
ここからは、Kubernetes Masterをマスター、Kubernetes Nodeをノードと短縮した言い方で話をするよ。」
クラスタは「Kubernetes Master」「Kubernetes Node」の2種から構成
ディア:「Kubernetesは、どんな仕組みで動いているものなの?」
Kubernetesでは、管理者がコマンドを打ち込んでマスターに伝え、そこから各ノードに指令を出すよ。それに従って、各ノードがPodを動かしていくんだ。基本的に管理者は、マスターのみを操作することになっているよ。
Kubernetes Masterがノードへ指令を出し、Pod(≒コンテナ)を管理
クラフ:「Kubernetesの特長として紹介したいのが『宣言的API』だよ。これは、以前解説したクラウドネイティブの定義にも出てきた言葉なんだ。対義語である『手続き的API』との比較で、その特長を説明していくよ」
「宣言的API」と「手続き的API」を比較するイメージとして「お風呂を42度の状態にしたい」という処理を実行すると仮定しよう。手続き的APIでは、その実現のために各プロセスで作業をインプットする必要がある。
一方、宣言的APIでは「お風呂を入れて42度にして」という指示をするだけで済むんだ。また、保温機能などによって状態を保つことも可能なんだ。
「宣言的API」を「手続き的API」と比較したイメージ
たとえば・・・「お風呂を42℃の状態にしたい」
サトル:「2つのAPIの違いは理解できたけど、宣言的APIは実際どういう仕組みなの?」
クラフ:「分かった。Kubernetesクラスタを用いて少し専門的に解説するね。Kubernetesは、プログラミング言語で書かれた望ましい状態を記述した『マニュフェスト』を書いて、コンテナのデプロイや周辺リソースを管理するよ。『何が、どれくらい動いてほしい』と書いてマスターに渡すだけで、賢く状態判断して、各ノードに指令をだしてくれるんだ」
マニフェスト(宣言的なコード)で定義した望ましい状態を保つ