- 2018/12/19 掲載
Kubernetesとは何か? 3大クラウドが追従する「コンテナ管理」入門
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理解のために必要な「Docker」
Kubernetesを理解するために今一度、コンテナホストについてであるDockerについて解説しておこう。●Dockerとは何か
Dockerは、アプリケーションをコンテナ化して実行する実行環境やその周辺ツール群だ。
「Dockerfile」と呼ばれる定義ファイルを元に、Dockerイメージ(Dockerのコンテナを起動する際のイメージ)をビルドする。
一度作成したDockerイメージさえあれば、全く同じ環境上で同じアプリケーションを実行することが保証されているため、いつでも安定して同じアプリケーションを廃棄・作成することが可能だ。
すなわち、人為的な事故が起きづらかったり、ロールバック(障害が起こったときに、その前の状態にまで戻ること)が容易といった特徴がある。
もちろん、 仮想マシンの場合でもイメージ化を行うことは可能であったが、イメージサイズが非常に大きいために即座に作成することができない点や、イメージ化の手間が大きいといった点に問題があった。
●DockerとKubernetesの関係
複数台のマシンに対してコンテナを適切に配置して予定どおり動かしたり、外部ネットワークからのリクエストを複数のコンテナに割り振ることで負荷を分散(ロードバランシング)したりすることが可能だ。
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の優位性がうかがえる。
Kubernetesの特長と仕組み
Kubernetesの大きな特長の一つが「オープンさ」だ。Kubernetesをはじめとするコンテナ技術は、さまざまな標準化を同時に進めつつ、実装されている。このため、将来Kubernetesではない他の技術が主流となったとしても、容易に移行が可能だろう。標準化 | 内容 |
OCI (Open Container Initiative)v1.0 |
コンテナランタイム・イメージフォーマット・コンテナイメージの配布に関する標準仕様 |
CRI (Container Runtime Interface) |
コンテナランタイムに関する インターフェース |
CSI (Container Storage Interface) |
コンテナストレージに関する インターフェース |
CNI (Container Network Interface) |
コンテナネットワークに関する インターフェース |
また、さまざまなディストリビューションやプラットフォームが用意されている。どの環境でも同じように動作することを保証するため、CNCFが「Conformance Program」という認定テストのようなものを提供している。これにより、特定の環境にロックインされづらいといったメリットもある。
●コンテナを実行する最小単位「Pod」
Kubernetesでは、コンテナを実行するときに「Pod」と呼ばれる最小単位で管理を行う。Podは1つ以上のコンテナを1つにまとめたものだ。Podの構成については、いくつかのデザインパターンが提唱されており、構成が決まった後は、「ReplicaSet」「Deployment」「StatefulSet」などの機能を使い、複数のPodを管理する。
管理者(開発者)は、突発的な負荷の上昇に対してアプリケーションを支えるインフラのコンピュータの台数を増やし、システム全体の性能を上げてスケールアウトする際も、これらの仕組みを使って容易にスケールアウトが可能なため、ビジネスチャンスを逃しにくいといった特長もある。
また、Podの障害時には、新たなPod(コンテナ)を高速に起動することができるため、SLA(Service Level Agreement)を保ちやすいといったメリットもある。
●Pod群へのロードバランシングやサービスディスカバリを行う「Service」
そして、もう一つ重要な機能として、「Service」と呼ばれる仕組みがある。これは、Kubernetesクラスタで実行されるPod群へのロードバランシングやサービスディスカバリを行う機能だ。このほかにも高度なセキュリティやスケジューリングに関するさまざまな機能が用意されている。
Kubernetesで「DevOps」を進めやすく
Kubernetesでは、PodやReplicaSetなどの設定は、構造化データの表現方法である「YAML」で記述される。これにより、コードでインフラ構成を管理することができ、担当者はKubernetesの知識さえあれば、システムの全体像を掴みやすくなるメリットがある。また、担当者が変わった際にも比較的容易にシステムの全体像を理解できるのも大きなメリットだ。
そして、インフラエンジニアだけでなく、実際にアプリケーションを実装するソフトウェアエンジニアも、インフラ層のオペレーションが行えるようになる。このため、インフラエンジニアとソフトウェアエンジニアの境目を従来よりも柔軟にすることが可能で、企業にとっては「DevOps」を進めやすくなる効果も期待できる。
Kubernetesでマイクロサービスに取り組みやすく
Kubernetesとマイクロサービスアーキテクチャの相性のよさも特長の一つだ。●マイクロサービスアーキテクチャとは
マイクロサービスアーキテクチャとは、システムを個々の機能(マイクロサービス)に切り出して、それらを連携させてシステム全体を構成するアーキテクチャだ。
個々のマイクロサービスは疎結合になっているため、各マイクロサービスの開発言語などは自由に選定でき、個々のチームが適切な技術選定を行って開発できる。
また、大規模な開発になった場合でも、スケールしやすいといったメリットや、マイクロサービスに分割されているためアップデートが容易という特長がある。
●Kubernetes&マイクロサービスと相性がいい「カナリアリリース」
一般的にシステムのアップデートは慎重に行う必要がある。特に売り上げに直結するような、コアなビジネスロジックをアップデートする場合はなおさらだ。 一方で、実装したビジネスロジックを、長い間リリースできないということも大きな機会損失だ。
マイクロサービスアーキテクチャを採用している場合、相性がいいのが「カナリアリリース」という手法だ。
これはプロダクトやサービスの新機能を一部ユーザーのみが利用できるようにリリースし、新機能に問題がないことを確認しながら段階的にアップデートを適用していく。
これにより、アップデートに対する心的ハードルが下がり、ビジネスロジックを容易にアップデートできるようになるため、高速な開発が実現され、ビジネスチャンスを手にすることができる。
Kubernetesがクラウドネイティブな開発を加速
コンテナを用いた開発にKubernetesはなくてはならないものになった。また、Kubernetesは拡張性が高いため、今後は周辺のエコシステム確立がさらに加速していくだろう。たとえば、Kubernetes上に機械学習基盤を展開する「Kubeflow」や、サーバーレス基盤を展開する「Knative」、サービスメッシュ(分散型システムで「サービス間通信」を担う専用レイヤー)を構成する「Istio」、Database as a Service基盤を展開する「Vitess」など、さまざまなOSSが登場している。
便利な機能や特長を備えている反面、技術者の学習コストが高いという課題もあるが、今後は、多くの企業でDockerとKubernetesを活用したクラウドネイティブな開発が加速してくことが考えられる。
関連コンテンツ
PR
PR
PR