コンテナのオーケストレーションツール「Kubernetes」


サトル:「コンテナの運用における課題って解決できないものなの?」


クラフ:「いやいや、もちろん解決するためのツールも存在するんだよ。それが『Kubernetes(クバネティス)』なんだ」


ディア:「何それ、美味しいの?」

■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では、どうやってコンテナを管理するの?」


クラフ:「Kubernetesは『Pod(ポッド)』と呼ばれる単位でコンテナを管理するんだ。1つのPodに対して、Kubernetesは1つのIPアドレスを自動割り当てするよ。Podの中には、複数のコンテナが存在する場合もあるけど、大体は1つのPodで1つのコンテナを管理するイメージで大丈夫さ。


また、Kubernetesでは、依存関係と必要な複数のサービスをまとめてパッケージングしたコンテナを活用するよ。このコンテナ化されたアプリケーションを実行するノード(物理/仮想OS)の集合体を『Kubernetesクラスタ』と呼んでいるんだ」

Kubernetes用語「Pod(ポッド)」とは?

「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の構成

クラスタは「Kubernetes Master」「Kubernetes Node」2種から構成

ディア:「Kubernetesは、どんな仕組みで動いているものなの?」

■Kubernetesの構成 どのように動かすのか?

Kubernetesでは、管理者がコマンドを打ち込んでマスターに伝え、そこから各ノードに指令を出すよ。それに従って、各ノードがPodを動かしていくんだ。基本的に管理者は、マスターのみを操作することになっているよ。

Kubernetesの構成 どのように動かすのか?

Kubernetes Masterがノードへ指令を出し、Podポッド(≒コンテナ)を管理

クラフ:「Kubernetesの特長として紹介したいのが『宣言的API』だよ。これは、以前解説したクラウドネイティブの定義にも出てきた言葉なんだ。対義語である『手続き的API』との比較で、その特長を説明していくよ」

■Kubernetesの特長「宣言的API」

「宣言的API」と「手続き的API」を比較するイメージとして「お風呂を42度の状態にしたい」という処理を実行すると仮定しよう。手続き的APIでは、その実現のために各プロセスで作業をインプットする必要がある。

一方、宣言的APIでは「お風呂を入れて42度にして」という指示をするだけで済むんだ。また、保温機能などによって状態を保つことも可能なんだ。

Kubernetesの特長「宣言的API」(イメージ解説)

「宣言的API」を「手続き的API」と比較したイメージ

たとえば・・・「お風呂を42℃の状態にしたい」

サトル:「2つのAPIの違いは理解できたけど、宣言的APIは実際どういう仕組みなの?」


クラフ:「分かった。Kubernetesクラスタを用いて少し専門的に解説するね。Kubernetesは、プログラミング言語で書かれた望ましい状態を記述した『マニュフェスト』を書いて、コンテナのデプロイや周辺リソースを管理するよ。『何が、どれくらい動いてほしい』と書いてマスターに渡すだけで、賢く状態判断して、各ノードに指令をだしてくれるんだ」

Kubernetesの特長「宣言的API」(少し専門的解説)

マニフェスト(宣言的なコード)で定義した望ましい状態を保つ

ネットワールドのコンテナ・Kubernetes関連製品やソリューション