Kubernetesとは
Kubernetesは、Dockerコンテナ群を統合管理するためのオープンソースのソフトウェア。コンテナ化されたアプリケーションの展開やスケーリング、管理を自動化するための基盤である。K8sとも略記される。
(※本定義はビジネス+IT編集部)
Kubernetesの基礎知識
コンテナ型の仮想化ソフトウェア「Docker」を始めとするコンテナホストのクラスタを管理するオープンソース・ソフトウェア(OSS)、Kubernetes。
グーグルやアマゾン、マイクロソフトという3大クラウドプロバイダーが自社サービスの開発のために、Kubernetesのマネージドサービス(Kubernetesを運用管理するアウトソーシングサービス)をリリースするなど、確固たる地位を獲得している。
なぜ3大クラウドプロバイダーが追従するほど注目されるのか。現在進行系で進化するKubernetesの魅力は何だろうか。
Kubernetes活用の潮流
まずは、Kubernetesが利用されるようになった「開発の潮流」を解説しよう。
●「可搬性」と「高速な開発サイクル」を重視
ユーザー向けのサービスやアプリケーション、あるいは企業IT分野の業務アプリケーションなど、あらゆる領域でソフトウェアの力が必要な時代だ。
開発や運用面で顧客の要望を迅速に、柔軟に対応するためにあらゆる環境でアプリケーションを開発・実行できる「可搬性」、そしてそれに伴う「高速な開発サイクル」が重要視されている。
これまで、可搬性を担保するための基盤として仮想マシン(Virtual Machine:VM)型の仮想化ソフトウェアが採用されていた。
VM型の仮想化ソフトウェアを用いると、1台の物理サーバ上にエミュレートすることで複数のOS(アプリケーション)環境を集約する可搬性の高い基盤を提供できる。
●仮想化からコンテナ活用へ
そして、最近では仮想化ソフトウェアを用いた仮想マシン環境から一歩進み、コンテナを用いた開発にシフトする動きが見られる。
コンテナとは、VMレベルでの仮想化とは異なり、単体のOS環境に「コンテナ」と呼ばれる空間を分離させる技術だ。
分離した空間ごとに異なるOS環境が実現可能のため、VMと同様に複数のOSが必要なシステムを集約できるというメリットがある。
コンテナ型の仮想化ソフトウェアとして最も注目されるものの一つがDockerだ。Dockerコンテナを用いた仮想化環境は、起動が高速でオーバーヘッドが少なく、イメージ化が容易になるといったメリットがある。
そして、Dockerを始めとするコンテナホストを管理するオープンソース・ソフトウェア(OSS)がKubernetesである。
Googleが2014年6月に公開し、2015年7月に数多くのOSSをホストするCloud Native Computing Foundation(CNCF)に開発を移管した。
●3大クラウドベンダーが用意する「マネージドKubernetesサービス」の環境
CNCFには、GoogleやマイクロソフトやAWS(Amazon Web Services)、IBMやヴイエムウェア(VMware)といった大手ITベンダーが加盟しており、事実上のデファクトスタンダードの地位を築いている。
マネージドKubernetesサービス |
リリース日 |
GA |
GKE (Google Kubernetes Engine)
|
2014/11 |
2015/08 |
AKS (Azure Kubernetes Service)
|
2017/02 |
2018/06 |
EKS (Amazon Elastic Container Service for Kubernetes)
|
2017/11 |
2018/06 |
主要なクラウドプロバイダーがマネージドKubernetesサービスを提供し始めた
Kubernetes理解のために必要な「Docker」
Kubernetesを理解するために今一度、コンテナホストについてであるDockerについて解説しておこう。
●Dockerとは何か
Dockerは、アプリケーションをコンテナ化して実行する実行環境やその周辺ツール群だ。
「Dockerfile」と呼ばれる定義ファイルを元に、Dockerイメージ(Dockerのコンテナを起動する際のイメージ)をビルドする。
一度作成したDockerイメージさえあれば、全く同じ環境上で同じアプリケーションを実行することが保証されているため、いつでも安定して同じアプリケーションを廃棄・作成することが可能だ。
すなわち、人為的な事故が起きづらかったり、ロールバック(障害が起こったときに、その前の状態にまで戻ること)が容易といった特徴がある。
もちろん、 仮想マシンの場合でもイメージ化を行うことは可能であったが、イメージサイズが非常に大きいために即座に作成することができない点や、イメージ化の手間が大きいといった点に問題があった。
●DockerとKubernetesの関係
そのDockerを始めとするコンテナホストを管理するオーケストレーションエンジンがKubernetesだ。コンテナオーケストレーションエンジンを利用することで、複数台のホストから構成される実行環境を、1台の実行環境のように扱うことができる。
複数台のマシンに対してコンテナを適切に配置して予定どおり動かしたり、外部ネットワークからのリクエストを複数のコンテナに割り振ることで負荷を分散(ロードバランシング)したりすることが可能だ。
Kubernetesは、Googleの社内で利用されていたコンテナクラスタマネージャ「Borg」を元にしており、これまで個々で実装されていた自動化の仕組みなどを共通したやり方に統一することができる。
これにより、たとえば、DockerとKubernetesを組み合わせることで、アプリケーションやサービスの様々な部品を独立して開発できるマイクロサービス化を推進することができ、アプリケーションやサービスの可搬性を高め、迅速に開発することや、稼働中にアプリをスケールする(規模を拡大する)ことなどが可能になる。
Kubernetesの爆発的な普及
オーケストレーションエンジンにはKubernetesをはじめ、さまざまなものがあるが、上述のとおり、デファクトスタンダードとなっているのはKubernetesだ。
主要なクラウドプロバイダーがマネージドサービスを提供しており、Kubernetes上で稼働するように開発したコンテナ化されたアプリケーションは、基本的にどのプロバイダーが提供するマネージドサービス上でも動く。
●「Kubernetesはクラウド界のLinuxに」の意味
また、The Linux FoundationのExecutive DirectorであるJim Zemlin氏が「Kubernetes is becoming the Linux of the cloud」(Kubernetes はクラウド界のLinuxになってきている)」というほどに、注目を集めている。
一般的なOSSは、導入期・成長期・成熟期を経て衰退期に入るが、Linuxはそうではなかった。Kubernetesも同じように、クラウド時代においてなくてはならないものとなるかもしれない。
コンテナ技術を広めたDockerは、自社が開発している「Docker Swarm」を推奨しているが、2017年に開催されたイベント「DockerCon EU」で、とうとうDockerもKubernetes互換の機能をサポートすると発表した。このことからも、Kubernetesの優位性がうかがえる。