Docker管理ツール、Kubernetes、etcd、flannel、cAdvisorの概要とインストール、基本的な使い方:Docker運用管理製品/サービス大全(3)(1/6 ページ)
数多く台頭しているDockerの運用管理に関する製品/サービスの特長、使い方を徹底解説する特集。今回は、グーグルが主導で開発しているOSSであるKubernetes、flannel、cAdvisorの概要や主な機能、環境構築方法、使い方について。
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が存在します。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 所要時間わずか10分で「Docker」を体験しよう――Azureで始めるDocker入門
2014年から急速に注目度が増しているコンテナー型仮想化技術「Docker」。すでに多くのLinuxで利用可能な技術ですが、次期Windows Serverでもサポートされる予定です。Dockerとはどのようなものなのか、一度、実際に触って体験してみてはいかがでしょうか。 - Linux/OSSに不慣れでも大丈夫! WindowsでDockerを扱う際のポイント
本連載第31回は「Azureで始めるDocker入門」を掲載しました。掲載後、すぐに「Docker 1.6」がリリースされたので、意図したわけではありませんが、タイムリーな記事になったと思います。今回は、その記事でも紹介した「Docker Client for Windows」をフォローアップします。 - Docker代替のコンテナーランタイム「Rocket」をCoreOSが公開
CoreOSがDocker代替のシンプルなコンテナーランタイムを公開。Dockerの当初の目的であるシンプルなコンテナーを目指すプロトタイプだ。 - Docker、そしてCloud FoundryとPaaSの価値とは
Docker人気を踏まえたとき、Cloud Foundryはどのように位置付けられるのか。PaaSの最終的な価値とは何なのか。AWSとの競合とは。Cloud Foundryの責任者である米PivotalのJames Watters氏に聞いた。 - レッドハットが発表したOpenShift Enterprise 3は「Dockerを知らなくても使える」基盤
レッドハットが2015年7月22日に国内発表したPaaS製品「OpenShift Enterprise 3」の最大の狙いは、Dockerを知らなくてもアプリケーションの開発・運用ができるようにすることだという。ここでは、レッドハットの日本法人の説明に基づき、OpenShift Enterprise 3を紹介する。 - 米グーグルのDockerコンテナ管理サービスが一般提供開始
米グーグルがGoogle Cloud Platform上で提供しているDockerコンテナオーケストレーション/管理サービス、Google Container Engineが2015年8月26日、ベータ段階を終了、一般提供が開始された。毎週20億以上のコンテナを立ち上げているグーグルの経験に基づくサービスだとしている。