はじめに
Dockerは分かったけど、これは読み方すら分からない
程度の知識でもKubernetesについて大枠を理解できるよう、順を追って説明する入門記事を書いてみました。
所要時間目安 : 5分
関連記事
Kubernetesとは?
読み方は?
読み方から難しい本用語ですが「船の舵取り」を指すギリシャ語κυβερνήτηςからきています。
日本語での発音は「クバネテス」または「クバネティス」と呼び、KとSの間に8つのアルファベットがあるので書き言葉としてk8sとも略されます。
ちなみに「船の舵取り」という言葉の通り、ロゴマークは以下のようになっています。
役割は?
これは何をするためのものなの?
一言で言えば、複数のコンテナのシステム管理を担うオープンソースのツールです。
具体的には以下のような機能が提供されています。
- サービスの負荷に応じてコンテナ数を自動的に変更
- コンテナイメージのバージョン管理
- リソース利用率の監視
オープンソースなんだね
Google発のサービスでしたが、オープンソースのプロジェクトになりました。同じようなコンテナオーケストレーションツールとしてDocker Swarmなどもありますが、2022年の段階でKubernetesは名実共にスタンダードになっています。具体的には?
どう便利なの?
コンテナの管理における基盤観点の懸念をツールにて一元管理できます。
例えば、コンテナを複数扱う場合に「コンテナをどのマシンにて起動するのか?」「コンテナに障害が発生した場合どうするのか?」「そもそもコンテナを起動しているマシンに障害が発生したらどうするのか?」といった基盤的な運用の難しさが出てきますが、これをよしなに管理してくれます。
上で挙げた例に即して言えば「サービスの負荷に応じてコンテナ数を自動的に変更」してくれるためリソース増強を自動的に行うことができ、「コンテナイメージのバージョン管理」してくれるためサービスのリリース後にロールバックを行うことができ、「リソース利用率の監視」してくれるため、コンテナのリソースやログを一元的に処理することができます。
特徴は?
このような機能を持つKubernetesの特徴として「宣言的アーキテクチャ」があります 。
何が宣言的なの?
これは、管理するコンテナ群に対して理想の状態を設定ファイルに記載すれば、それを実現する具体的な作業はKubernetesが担ってくれます。
構成管理ツールのChefを知っている人からすればピンとくるかと思いますが、例えばKubernetesにて「Webサーバの役割を提供するコンテナが3つ必要」という宣言をしておけば、一つのコンテナがトラブルによってダウンした場合は自動的に新たなコンテナを起動してあるべき姿にしてくれます。この理想の状態を記載したファイルをマニフェストと呼びます。
デメリットはあるの?
これは宣言的アーキテクチャによくあるデメリットですが、構成や状態を変更したい場合は個別にコンテナを操作するのではなくマニフェストを修正し、反映させる必要があります。要は一時的な軽微な修正であっても、直接コンテナを操作することができない制約はあります。
また、dockerとは別のコマンドであるkubectlコマンドにて操作を行うため新たな学習コストにもなります。
例えば以下でnginxをコンテナとして起動しますが、dockerのコマンドとは相違しています。
$ kubectl run nginx --image=nginx
kubectlコマンドは奥が深そう....
終わりに
今回はKubernetesについて分かった気になるところをゴールに、かなり入門的に説明してみました。
以下の記事でもう少し具体的に触れているので興味があれば合わせてご覧ください。
本記事にてDockerを管理するKubernetesというものが少しでも掴める方がいれば幸いです。