Kubernetes(クバネティス・クーベネティス)とはなんなのか?
コンテナの管理を自動化するためのソフトウェアで、コンテナ・オーケストレーション・ツールと呼ばれています。Kubernetesは、Googleが開発しました。Googleは、以前からインターネットサービスを提供するためにマイクロサービスの基盤を利用していました。Kubernetesは、このマイクロサービスの技術をオープンソースソフトウェアとしてまとめて公開したものです。現在はCNCF(Cloud Native Computing Foundation)がKubernetesとその周辺ツールの開発、管理を行っています。
昨今、注目されるようになったコンテナ技術のディファクトスタンダード(事実上の標準)となったDocker
をさらにコンテナ管理するソフトウェアのディファクトスタンダードとなったものがKubernetesです。
ここから、出来るだけ噛み砕いていきます。
始まりは、クラウド技術です。
最近はAWSやAzure・GCPというクラウドサービスの提供事業の利用が主流となってきました。
クラウドといっても
・Saas・Paas・Iaas
がありますが、ここではIaas(サービスとしてインフラストラクチャ)が該当すると思います。
クラウドのメリットは、費用が安かったり、サービス拡張に伴い増設が用意であったり、可用性・信頼性・保守性という部分もサービス事業者(AWSとか)が担保してくれるので、それ以外の部分に集中できるという様々なメリットがあると思います。
詳しくは、こちら
ほとんどのサービス提供がクラウドでの開発かクラウドへの移行が行われています。
そうなってくると、今度はクラウドでの開発を前提としての設計思想が推奨されるようになってきました。
それが、クラウドネイティブというものです。
クラウドネイティブについて
クラウドネイティブたる要素はいくつかあります。
- コンテナ
- マイクロサービス
- オーケストレーション
- サービスメッシュ 等の技術です。 これはCNCF(Linuxとか表題のKubernetesとかを管理している団体です)が大体こんな感じだよ!的な定義を出しています。
これらは、特定のソフトウェアを指しているものではありません。コンテナ技術といったらDockerというイメージですが、Docker以外もコンテナ技術は沢山ありました。そんな覇権争いを勝ち抜き、オーケストレーションといったらに該当するのがKubernetesです。
どんな技術?
コンテナは、アプリケーション層での仮想環境でプログラムを動作させる技術です。
一つのOS上で動作できるため、非常に軽量かつCPUやメモリのリソースを抑えられます。
また、dockerのコンテナはDockerイメージというものがベースとなります。DockerイメージにはOSのバージョンやミドルウェアというものがあらかじめ定まっている為、開発環境・テスト環境・本番環境による差異が生まれにくく、アプリケーションがいざ本番環境だと動かない!!!的な問題が起きにくいです。
マイクロサービスとは、クラウドの拡張性を前提に、アプリケーションを構成要素ごとに分割して、設計し各コンテナ上に実行環境を構築しようという考え方です。マイクロサービスはソフトウェアではなくアーキテクチャ(設計思想)に当たると思います。機能ごとに細分化するので、追加機能を増やしり、一つの機能がダメになった際に全部のシステムが止まってしまうということを避けられます。
オーケストレーションは、マイクロサービスを前提としてコンテナがどんどん増えていくと、それを管理するのが大変になっていきます。。
ですので、あらかじめコンテナやノードの理想の状態を人間が定義して、あとは自動でその状態を維持してくるものがオーケストレーションツールです。今回のKubernetesがこれになります。
サービスメッシュとは、各機能に分割されたアプリケーションを紐付け、一つのサービスとして管理してくるものです。
これらの技術で、クラウドサービスは成り立っているようです。