ここ数年、IT業界の中で「Kubernetes(クバネティス/クーベネティス)」の存在感が大きくなっています。Microsoft、Amazon、Googleの3大クラウドプロバイダーが自社サービス開発においてKubernetesのマネージドサービスをリリースしており、地位を築きつつあります。
このKubernetesとは何なのか?本記事ではその意味や基本を解説します。
Kubernetesってなに?
Kubernetesはコンテナ型仮想化ソフトウェアのDockerなど、コンテナホストをクラスタするオープンソースです。「コンテナ型仮想化ってなに?」というかたのために少し解説します。
ハイパーバイザを使用した一般的な仮想化技術は、サーバリソースをソフトウェアで論理的に分割し、仮想マシン上でゲストOSを起動する必要があります。一方、コンテナ型仮想化はゲストOSを起動することなく、アプリケーションの実行環境を構築することが可能です。つまり従来の仮想化技術に比べてより少ないリソースでアプリケーションの実行が可能になり、余分なメモリやストレージを消費することがなくなります。
現在ではビジネスのあらゆるシーンでITの力が不可欠であり、開発・運用面にて顧客のニーズに素早く、かつ柔軟に対応するための可搬性、さらに高速な開発サイクルが重視されています。可搬性はこれまで、前述の仮想化技術によって支えられてきました。1台の物理サーバ上に複数の仮想マシンを構築し、ゲストOSを起動することで集約性と可搬性の高いインフラ基盤を構築できたのです。
このコンテナ型仮想化ソフトウェアとして今最も注目されているのがDockerであり、コンテナ型仮想化をはじめとするコンテナホストを管理しているのがKubernetesというわけです。
KubernetesとDockerの違いはなに?
Kubernetesもコンテナ型仮想化ソフトウェアに分類されるなら、KubernetesとDockerの違いはなに?と疑問に思う方も多いでしょう。KubernetesとDockerとではそもそも利用される目的が異なります。
Dockerにも複数のコンテナ管理を自動化する機能(Docker Swarm)がありますが、コンテナ間の設定や管理では不可能なこともあり、小規模ならば問題はありませんが規模が大きくなるほど複雑になっていくと言う課題が言われていました。このため、Dockerとは別にKubernetesなどの管理専用ツールを使用し、規模が大きくなったDockerの管理や自動化を行うことが可能なのです。
Kubernetesのメリット
では、Dockerのコンテナ管理にてKubernetesを利用するメリットはどこにあるのでしょうか?企業はKubernetesによって次のような課題が解決できると考えられます。
- 障害時のセルフヒーリングを実施
- サービスディスカバリの実施
- ロードバランシングの最適化
- データの管理
- ワークロードの管理
- ロブ情報の管理
- その他のエコシステムとの連携及び拡張
- 複数のDockerホストを統合的に管理
- コンテナのスケジューリングを実施
- ローリングアップデートの実施
- スケーリング及びオートスケーリングに対応
- コンテナの死活管理によりリソース効率化
これらの課題をDocker自身が解決することはかなり難しいでしょう。コンテナオーケストレーションを実行するKubernetesであるからこそ、これらの課題が解決できます。Kubernetesがない場合、企業は自動化の仕組みを一から作る必要があります。それは現実的ではありませんし、非常に多くのコストと労力を消費することになるため現実的ではありません。
Kubernetesの仕組み
では、Kubernetesはどのような仕組みによって動作しているのか?一つひとつの機能は複雑なものもありますが、それぞれが重要な役割をもっています。
Kubernetes Cluster
クラスターには集団という意味があり、IT業界では複数大のコンピュータを紐付けてまとめた仕組みなどを意味します。Kubernetes Clusterは単一のユニットとして機能するように接続され、可溶性の高いコンピュータクラスターという意味です。可用性としてシステムを持続的に運用するための仕組みであり、どこかの機器が故障しても環境を他の機器に切り替えることでシステムを停止させないためのものです。
Namescape
Namescapeは同一の物理クラスタ上で動作する複数の仮想クラスタのことです。Namescapeは大きい環境での導入が想定されており、1つのKubernetes Clusterが複数のチームで利用できるようになります。メンバーごとに権限設定を行い、セキュアな環境下でKubernetes Clusterを分離できます。
Pod
PodとはKubernetesが管理できる最小単位であり、Docker等のコンテナが1つ以上含まれている状態です。KubernetesはDocker上のコンテナを直接的に管理しているのではなく、厳密に言えばPod経由で管理しています。PodにはIPアドレスが自動的に振り分けられコンテナ間で共有するストレージも含まれます。
KubernetesでDevOpsが促進する?
開発エンジニアと運用エンジニアが互いに協力し合い、同様のビジネスゴールに向けた運用体制をとることを「DevOps(Dvelopment and Operations)」と言います。KubernetesにおけるPodなどの設定は、構造化データを表現するための言語である「YAML(YAML Ain't Markup Language)」で記述されます。つまり、インフラ構成をコードで管理することができ、システム担当者はKubernetesの知識さえあればシステム全体を管理しやすくなります。
さらに、システム担当者が変わった場合でもKubernetesに関する知識があれば比較的容易にシステム全体を理解できるのがKubernetesのメリットです。このため、インフラエンジニアだけでなくシステムを開発するソフトウェアエンジニアもオペレーションが可能になり、双方の境界線を曖昧にしてDevOpsを推進する環境が整います。
ちなみにKubernetesは、世界中のIT技術者にDevOpsが浸透するきっかけになったVelocity 2009というイベントにて、FlickrのエンジニアであるJohn AllspawとPaul Hammondが発表した「10+ Deploys per Day: Dev and Ops Cooperation at Flickr」の中で重要なツールとして位置付けられています。
Kubernetesでは様々なデモも用意されているので、この機会にぜひ利用を検討してみてください。
- カテゴリ:
- トレンド
- キーワード:
- ストレージ