連載
» 2015年10月23日 05時00分 UPDATE

Docker運用管理製品/サービス大全(3):Docker管理ツール、Kubernetes、etcd、flannel、cAdvisorの概要とインストール、基本的な使い方 (1/6)

数多く台頭しているDockerの運用管理に関する製品/サービスの特長、使い方を徹底解説する特集。今回は、グーグルが主導で開発しているOSSであるKubernetes、flannel、cAdvisorの概要や主な機能、環境構築方法、使い方について。

[澤井健,株式会社NTTデータ]

Kubernetesとは、flannelとは、cAdvisorとは

 数多く台頭しているDockerの運用管理に関する製品/サービスの特長、使い方を徹底解説する本特集「Docker運用管理製品/サービス大全」。今回は、グーグルが主導で開発しているKubernetes、flannel、cAdvisorの概要と使い方を解説します。

 内容は、2015年6月の記事執筆時のもので、対象ソフトウエアのバージョンは下記です。前回も触れましたが、それぞれの役割と共に記載しておきます。全てOSS(オープンソースソフトウエア)です。なお環境構築手順の紹介で扱うDocker自体のバージョンは1.6を使っています。

  • Kubernetes(バージョン0.17):Dockerコンテナー管理フレームワーク
  • flannel(バージョン0.41):Kubernetesを使うために作られた、それぞれのホストにサブネットを付与するオーバレイネットワーク。複数ホストのコンテナー間の連携を実現する
  • cAdvisor(バージョン0.15.1):コンテナーリソースを監視するOSS。Kubernetes 0.17になる前はKubernetesに含まれていたが、現在は独立したソフトウエアになっている

 なお、次回紹介する「Google Container Engine(GKE)」はKubernetesの管理サービスです。

Docker、Kubernetes、etcd、flannelの構成概要

 Kubernetesはグーグルが提供するDockerのコンテナー管理フレームワークです。Docker Engineが動作するホストを用意する必要があり、そのホストにKubernetesをインストールしてDockerのクラスター環境を構築します。

 Kubernetesはデプロイメント、メンテナンス、アプリケーションのスケーリングの基本機能を提供します。内部的にはGo言語(golang)+シェルスクリプトでできているようです。

 Kubernetesの構成概要を下に記します。

 KubernetesはDocker、etcd、flannelと連携して複数ホスト間のコンテナーアプリケーション管理を実現します。

 etcdは設定情報共有とサービス検出のための分散KVSです。Master(後述)の情報を永続化するために使用されます。MasterもMinion(後述)も、このetcdに接続されており、「watch」機能を利用して設定情報が全ノードに速やかに反映されます。Kubernetesはetcdをノード(Minion)の管理に使用して、flannelは各ホストのDockerホストのIPアドレス帯の管理に使用します。なおetcdは、Go言語で書かれています。

 etcdを起動するとクライアント受付用のポート(-addr、default:4001)、etcd同士のコミュニケーション用のポート(-peer-addr、default:7001)の2種類を待ち受けます。

 後述の「Kubernetesの作成手順(ホスト間連携)」ではMinionがMasterのetcdに接続します。

 Kubernetesの構成を下記に整理します。

Pod

 KubernetesではDockerコンテナーを「Pod」という単位でまとめています。ストレージやIPアドレスなど、複数のコンテナーで共有しなければならないリソースがあるときに、1つのPodで定義します。Pod内のコンテナーは必ず同じホストにデプロイされます。

Master

 MasterはKubernetesクラスターをコントロールするプロセス群です。コンテナー数が増えればMinionを増やせばよく、APIが忙しくなってきたらMasterを増やすイメージです。

 なおKubernetesの機能では、Masterの多重化はできません。ただし、情報の保存場所であるetcdは複数のMasterからアクセス可能なので、あらかじめMasterのホストを複数作っておくことは可能です。

  • Kubernetes API Server

 kube-apiserver、kube-schedulerで構成されており、Kubernetesの3つのオブジェクト(Pod、Service、ReplicationController)に対するRESTでの操作を受け付けてetcdに保存します。それと、Minionに対するPodのスケジューリングと、Podの情報(PodがどのMinionにいるか、どのポートをEXPOSEしているか)とService設定を同期します。

 kubecfg/kubectlコマンドは、ここのRESTを実行するものです。

  • Scheduler

 未スケジュールのPodをMinionに配置します。

  • ReplicationController

 Podの多重度を設定し継続的に監視調節します。自動でPodの数を削除したたり立ち上げたりして調節します。

  • Kubernetes Controller Manager Server

 etcdにあるReplicationControllerオブジェクトを監視(watch)して、変化があったらKubernetes APIを叩いてReplicationを発動させます。

Minion

 Minionは、Dockerコンテナーが配置、実行されるWorkerノードです。Minionの中では、Docker、Kubelet、Kubernetes Proxyが動いています。

  • Kubelet

 Minionをコントールするエージェントです。MasterのAPIサーバーから情報を受け取りcontainer manifest(コンテナーマニフェスト)に従いコンテナーを起動します。

  • Kubernetes Proxy

 Serviceで設定された通りに、TCPとUDPをPodに転送するためのネットワークプロキシです。

Service

 Podの通信のエンドポイントを既定します。ServiceはDocker空間のIPとポートを持っており、PodはServiceにアクセスすることでPod間の通信を可能にします。また、Serviceはロードバランサーの機能を持っており、リクエストをレプリケーションされているPodに振り分けます。

 ただし、Serviceが持つIPはDockerのIP空間内のため外部(インターネットなど)からアクセスすることはできません。バージョン 1.0ではServiceが外部のIPからの受け口を持つことができるようになるようです。「NodePort」と「LoadBalancer」の2種類の機能が提供されます。

 NodePortは、ホストのPortとリンクさせる方法です。Dockerのexpose設定と同じ振る舞いになります。LoadBalancerは外部のロードバランサーのIPアドレスを指定して、そこからの通信を受け取る設定になるようです。ただし、この場合は外部のロードバランサーが必須になります(Kubernetesでは、この外部のロードバランサーは提供しません)。

 Serviceの実行環境としては、各ホストで動作しています。Masterを停止させた状態でMinionの動作を見てみたところ、MinionのPodは正常に動作していました。MinionのPodはService経由でデータを渡しているため、各MinionにServiceが存在します。

       1|2|3|4|5|6 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。