Kubernetesとは何か?

Kubernetesとは何か?

「Kubernetes とは何か」という質問に対しては、パターン化した答えがよく見られます。オープンソースであり、コンテナオーケストレーションシステムであり、アプリケーションの展開、スケーリング、および管理を自動化するものです。すべて、正しい答えです。

ですが、初めて「Kubernetes」という言葉を聞いたとき、私は、ドイツの武道(... uber ...)か、新興宗教の1つか、はたまた新しいダイエット法の一種か、または斬新なダンスのバリエーションかもしれない、などと思ったものです。

Google のブログでは、Kubernetes は、コンテナ管理と展開(仮想マシンまたは物理マシン)のパフォーマンスを強化する破壊的なテクノロジーと定義されているようです。

「Kubernetesとは何か」について考察する前に、Kubernetes が何ではないのか、Kubernetes を使って何ができないのか、という観点から少しチェックしておきたいと思います。

Kubernetes に関するよくある誤解

まず、Kubernetes の別名として、中の8文字の “ubernete” を数字の8に置き換えた K8s も使われることを指摘しておきたいと思います。

Kubernetes が何ではないかというと、Docker、AWS、それらの代替、ではありません。Kubernetes は、Docker Swarm、AWS ECS、Mesos の代替にはなり得ます。すべてオーケストレーションツールです。また、Kubernetes ともう1つ別のツールを使って2つのツールを併用することもできます。Kubernetes については以下のように説明されることがありますが、必ずしも正確ではありません。

Kubernetes は、コンテナ化されたワークロードとサービスを最適化するためのツールである。Kubernetes の用語としては、ワークロードは Kubernetes で実行されるアプリケーションを意味します。ワークロードの最適化は、VMベースのインフラストラクチャソリューションで行うのが一般的です。

Kubernetes はデプロイが簡単にできる。そうですが、コンテナとその環境(Docker、AWS など)の経験があり、かつ、Kubernetes のツール、用語、および端末ベースのコマンド(GUIはありません)に精通している人の場合に限られます。

Kubernetes を使えば、ベンダーロックインを避けることができる。狭義では正しくても、おそらくコンテナ環境の別の要素には当てはまりません。Kubernetes を使用しても、デプロイされた他のソリューションに対するベンダーのロックインが排除されるわけではありません。

Kubernetes は他のソリューションと競合関係にある。まったく正しくありません。Docker、Azure、AWS などはすべて、ブランドサービスの一部として Kubernetes を提供しており、採用率は増加し続けています。

では、コンテナ化されたワークロードとサービスとして、Kubernetes に何ができるかを見ていきましょう。

Kubernetes はなぜ必要か?

かつて、アプリケーションは物理サーバー上で実行されていました。私を含め、まだ物理サーバーを使う人はたくさんいますが、このブログでは、そういった旧来の手法からのシフトが進んでいるという前提で考えます。従来の展開では、アプリケーション間の負荷分散は難しく、場合によってはリソースの大部分が使い果たされてしまう可能性がありました。アプリケーションごとに独自の専用サーバーを割り当てるのは高価になり過ぎることから、仮想マシンを採用して、ハイパーバイザーを介してマシンごとにリソースを割り当てるようになりました。ただし、各VMにはOSと個別のソフトウェアのインストールが必要でした。

一方、VMに似たオプションであるコンテナの場合は、OSを共有できます。コンテナには独自のファイルシステム、CPU、メモリ、ストレージなどがあり、「ポータブル」化して、クラウドに展開できます。Kubernetes はコンテナの階層のトップにあり、その名前は、「ヘルムスマン」または「パイロット」を意味するギリシャ語に由来します。安定したコンテナ展開と関連するパフォーマンスのために問題をうまくナビゲートしていくことを期待されるからです。

Kubernetes は、オーケストレーションツールとして認識されることが多いですが、インフラストラクチャに関連して色々な類推が試みられています。ただ、類推はあまりうまくいかないようです。例えば、オーケストラの指揮者という類推は、指揮者がいなくなってもオーケストラ全体に大きな影響を与えることはないので、ぴったりしません。指揮者は設定されたワークフロー、つまり音楽を指揮しますが、Kubernetes の場合はそうではありません。有名な小説の中の登場物を使った類推ができないものか、あれこれ想像してみましたが、必要に応じて新しいコンテナを作成するという、Kubernetes の1つの側面についてはなんとかなっても、全体の特徴づけには、どうもこれといったものがなく、類推はやめておいた方がよさそうです。

Kubernetes の、個々の特徴を見ていきましょう。

ロードバランシング

コンテナで高トラフィックが発生した場合、Kubernetes はトラフィックのバランスを取り、必要であれば新しく作成された他のコンテナにトラフィックを振り分けることができます。

ストレージオーケストレーション

オーケストレーションという用語をそれほど気に入っているわけではありませんが、マネージメントという用語は正しくないので、Kubernetes の特徴としてストレージオーケストレーションを使っておきます。必要に応じて、他のソース(物理ベースまたはクラウドベース)からストレージを割り当てます。

コンテナのロールアウト

新しいコンテナ更新がある場合、ユーザーのダウンタイムを回避できるよう、ロールアウトはコントロールされた方法で実行されます。使用されておらず、新しい状態で展開されていない既存のコンテナは、最終的に削除されます。段階的なロールアウトが最良の用語だと思います。

自己回復

Kubernetes の特に優れた特徴として、エラーを積極的に排除しようとしている点が挙げられます。問題があったコンテナは削除して、チェックに合格したコンテナに置き換えます。

機密情報

パスワード、キー、トークンは、Kubernetes に保存できます。アップデートは、コンテナを再構築することなく、設定内容を開示することもなしで行われます。

私は、セキュリティには常に重きを置いているので、Kubernetes を含む新しいテクノロジーを検討している企業には、関連するセキュリティリスクを検討し、運用ロールアウトの前に潜在的な脆弱性がないかどうかを検証することを奨励しています。

この、Kubernetes の簡単な概要が、お役に立てることを願っています。より詳細に知りたい場合は、チュートリアルを含む様々なリソースを提供する Kubernetes サイトをご覧ください。用語集も用意されています。

 

Comments
Comments are disabled in preview mode.
Thanks for subscribing! Loading animation