【特別企画】

[第5回]Linux/OSS エヴァンジェリスト古賀政純の ”旬”のオープンソースソフトウェア~Docker管理ソフトウェアのKubernetesの概要を理解する(前編)~

  [2016/01/14]

 

Docker管理ソフトウェアのKubernetesの概要を理解する(前編)

大流行のコンテナ技術

以前、本連載で取り上げたApache SparkやApache Mesosと並んで、近年、欧米のIT部門や開発者の間でもっともホットな話題の一つに「コンテナ」があります。商用のUNIXシステムに携わる方は、HP-UX ContainersやSolaris Containersという言葉が思いつく方もいるかもしれませんが、2013年に登場したLinux上で稼動する「Docker(ドッカー)」とよばれるコンテナ管理ソフトウェアが大流行しています。

このDockerは、従来のUNIXシステムで採用されていたコンテナの概念やLinuxで稼動する「Linuxコンテナ」などの技術を取り入れ、それをさらに発展させたものです。Dockerは、開発効率を劇的に向上させると同時に、OSやアプリケーションの構築・配備の自動化といった、開発者、および、運用管理者双方にとっての効率化の仕組みを提供しているため、現在、欧米のIT部門で進んでいるDevOpsに不可欠な要素の一つとして考えられています。

とくに、運用管理を行うIT部門にとって、複雑に絡みあう複数のOSSスタックの構築を簡素化できるとあって、Dockerに大きな期待が寄せられています。

guest-blog-20160105_1_1_なぜコンテナなのか?

図1. なぜコンテナなのか?

 

コンテナ管理ソフトウェアの必要性

しかし、Dockerコンテナを稼動させるエンジン本体だけでは、コンテナを使った開発や運用の効率化を行うことはできません。Dockerエンジンや基本的なコマンド以外に、様々な周辺ソフトウェアが必要となります。

Dockerの周辺ソフトウェアとしては、複数の物理サーバーで稼動するDocker環境を束ねてクラスター化するDocker Swarmや、複数の異なるアプリケーションの連携やスケールなどを行うDocker Compose、さらに、複数の物理サーバー間で仮想的なネットワークを構成するためのflannel(フラネル)やdocker networkなどがあります。

1台の物理サーバーで少数のアプリケーションが稼動するような単純なシステムであれば、Dockerエンジンと簡単な管理コマンドだけで事足りるでしょうが、複数の物理サーバーがネットワークでつながり、その上で稼動する膨大な数のコンテナが協調動作するような複雑なシステムでは、コンテナの効率的な管理は欠かせません。アプリケーション同士の連携、応答性能の向上、監視の仕組みなどを考慮する必要があります。

その中でも、Docker環境の管理ツールとして注目されているのが、Google社が当初開発を行い、現在、Linux Foundationの傘下のCloud Native Computing Foundationの元、開発が進められているKubernetes(クーバネティス)です。

 

Kubernetesとは?

Kubernetesは、Google社がオープンソースで公開したコンテナ向けのクラスター管理ソフトウェアです。欧米では、「kube」や、「k8s」(Kubernetesという単語の先頭のKと最後のsの間にアルファベットが8文字あるため)と呼ばれることもあります。

Kubernetesは、コンテナのオーケストレーションを行い、オンプレミスのベアメタル(物理サーバー)環境やハイパーバイザー型の仮想化環境で稼動するDockerコンテナの実行だけでなく、クラウド環境での稼動もサポートしています。

稼動するOS環境は、主にLinuxです。RHEL、CentOS、Ubuntu Server、さらに、CoreOS(コアオーエス)や、Atomic Hostなどのコンテナ専用OSでも稼動します。最近では、Red Hat社がリリースしたコンテナ専用OS「Red Hat Enterprise Linux Atomic Host」においてもKubernetesが採用され、注目が集まっています。

Kubernetesが稼動できる環境については、以下のURLが参考になります。

 

guest-blog-20160105_1_2_Kubernetesが稼動できる環境

図2. Kubernetesが稼動できる環境


Kubernetes自体は、今年になって非常に注目されるようになりましたが、Google社では、巷でハイパーバイザー型の仮想化基盤が流行しはじめた2000年代中ごろの時代から、業務アプリケーションのコンテナ化に取り組んでおり、すでに10年以上の経験があります。

Google社では、検索システム、メールシステム、地図情報提供システム、ビッグデータ基盤など、ほぼ全ての業務アプリケーションがコンテナで稼動しています。その数も膨大で、1週間に20億個のコンテナが起動しています。当然、膨大な数のコンテナを効率よく管理する仕組みも組み込まれています。また、負荷の集中によるアプリケーションの応答速度の低減やコンテナの異常終了による業務停止をどうやって回避するのかといったことも検討されています。

Kubernetesには、これらのGoogle社のノウハウが凝縮されており、膨大な数のコンテナを稼動させる場合に必要となる技術要素をKubernetesで知ることができます。

Kubernetesで実現できること

Kubernetesは、物理サーバーの管理やOS配備は行いませんが、その上で稼動するコンテナのアプリケーションを管理します。また、コンテナの複製(レプリケーション)や障害時におけるコンテナの再起動といったサービスの可用性、応答性能向上のためのコンテナの自動スケール機能、スケジューリング機能を提供します。

このような業務継続、可用性を検討するには、複数の物理サーバーや仮想化環境(一般的にマルチホストといいます)上で稼動するコンテナの基盤をどのように自動的に管理・運用するかといった議論が必要になります。

ここではあまり深く紹介しませんが、マルチホストでコンテナが稼動するIT基盤において、主な議論すべき点をあげると以下があげられます。

  • 単一障害点の排除
  • スケールアウトによる応答性能の向上
  • 分散アプリケーションの効率的な管理
  • 自動回復機能

Kubernetesを導入すると、主に以下のようなことが実現できます。

  • 複数の物理サーバーにまたがったコンテナの配備、管理
  • コンテナの死活監視、再起動
  • コンテナの負荷分散
  • 複数のコンテナのグループ化
  • コンテナで稼動するアプリケーションのオーケストレーション


Kubernetesは、Dockerイメージの入手、コンテナの起動などを行いますが、その後ろには、Dockerが必要です。ただし、Kubernetesで提供される機能は、Dockerのコマンドラインでできることの全てを網羅しているわけではありません。

場合によっては、ほかのGUIツールとの併用や作りこみを考慮する必要がありますので、注意が必要です。

Kubernetesのコンセプト、アーキテクチャ

Kubernetesは、複数の物理サーバーや仮想化環境で稼動するコンテナを効率よく管理できますが、その効率化のための独自の仕組みがあります。そのためには、Kubernetesを構成するコンポーネントを理解する必要があります。

以下は、Kubernetesにおける用語や、主なコンポーネントです。

  • クラスター(計算資源の集まり)
  • マスター(クラスター全体を管理するホスト)
  • ノード(Docker、kubelet、プロキシーが稼動するホスト)
  • Pods (IPアドレスと共有ボリュームを持つコンテナの集まり。生成、スケジュール、管理の基本単位)
  • Replication Controllers (ポッドのライフサイクル管理に利用)
  • Services (Podの集合体に対して、仮想IPアドレスや、基本的なロードバランサーを提供)
  • Labels(オブジェクトのグループの選択に利用される名前)


次回は、Kubernetesの各コンポーネントについてより深く紹介します。


本記事は「サイオス"ゲスト"ブログ」から提供を受けております。
著作権は提供各社に帰属します。


IT製品 "比較/検討" 情報

特別企画 PR

人気記事

一覧

イチオシ記事

新着記事

[本郷奏多]実写版「ハガレン」へ気合 エンヴィー役でビジュアル「近づけるんじゃ」
[14:08 5/29] エンタメ
東国原英夫、上西議員を猛批判「税金の無駄遣い」「即刻クビ」
[14:03 5/29] エンタメ
東京と千葉の境、江戸川に浮かぶ謎の島へドライブに行ったら…
[14:00 5/29] エンタメ
明石家さんまの"落ち込まない思考法"「己を過信せず、今日が己の頂点」
[13:58 5/29] エンタメ
日本最大級のコスプレ専用スタジオに潜入『マツコ会議』
[13:40 5/29] エンタメ

特別企画 PR