目次


ハイブリッド (IBM Power および x86) アーキテクチャーのシナリオでの Mesos と Kubernetes

Comments

Mesos および Kubernetes について

現在、Linux でよく使われているコンテナー・クラスタリング・システムは複数ありますが、そのうち、クラスター内にコンテナーをデプロイするために最も一般的に使用されているツールは、おそらく Google Kubernetes と Apache Mesos の 2 つでしょう。両方ともヘルパー・ツールとして作成されており、複数のコンテナーからなるクラスターを管理するために使用できます。ただし、このそれぞれのツールで採用しているアプローチには大幅な違いがあります。

私たちの顧客が使用するハイブリッド・アーキテクチャーには、常に IBM Power および x86 が含まれています。そこで、この記事では Power と x86 が含まれるハイブリッド・アーキテクチャー環境で Linux にMesos と Kubernetes を適用する方法に関して参考にできるソリューションを提供します。

リファレンス・アーキテクチャーについては、図 1 を参照してください。

図 1. ハイブリッド (Power および x86) アーキテクチャーでの Kubernetes と Mesos のアーキテクチャー図

デプロイメント

ハイブリッド・アーキテクチャーで Kubernetes と Mesos の Docker クラスターをセットアップしてデプロイする方法を説明します。ここでは、マスター・ノード内の各モジュールに Docker イメージを使用します。

前提条件

  • Mesos、Kubernetes、および Docker の知識
  • 以下の要素が混在するクラスター・アーキテクチャー:
    • Linux ターミナル、Docker、git
    • 少なくとも 4 つの x86 ノードと 1 つの IBM Power のノード
  • 各ノードではファイアウォールを無効にします。

環境

ZooKeeper クラスター、Mesos マスター・クラスター、etcd クラスター、および Kubernetes-Mesos クラスターをインストールするために、CentOS 7.2 がインストールされたノードが少なくとも 3 つ必要です。最小 3 つのノードの IP アドレスは以下のとおりです。

  • 192.168.1.2 (x86)
  • 192.168.1.3 (x86)
  • 192.168.1.4 (x86)

Mesos スレーブ・クラスターをインストールするために、CentOS 7.2 がインストールされたノードが少なくとも 2 つ必要です。最小 2 つのノードの IP アドレスは以下のとおりです。

  • 192.168.1.5 (x86)
  • 192.168.1.6 (IBM Power)

ZooKeeper クラスターをデプロイする

ZooKeeper クラスターをデプロイするには、root 特権を持つユーザーとして以下の手順に従います。

192.168.1.2 へのデプロイ:

				docker run -d \ 
				-e MYID=1 \ 
				-e SERVERS=192.168.1.2,192.168.1.3,192.168.1.4 \ 
				--name=zookeeper --net=host --restart always powerkvm/zookeeper-x86

192.168.1.3 へのデプロイ:

					docker run -d \
					-e MYID=2 \
					-e SERVERS=192.168.1.2,192.168.1.3,192.168.1.4 \ 
					--name=zookeeper --net=host --restart always powerkvm/zookeeper-x86

192.168.1.4 へのデプロイ:

					docker run -d \
					-e MYID=3 \ 
					-e SERVERS=192.168.1.2,192.168.1.3,192.168.1.4 \
					--name=zookeeper --net=host --restart always powerkvm/zookeeper-x86

Mesos マスター・クラスターをデプロイする

Mesos マスター・クラスターをデプロイするには、root 特権を持つユーザーとして以下の手順に従います。

192.168.1.2 へのデプロイ:

					docker run -d -e MESOS_HOSTNAME=192.168.1.2 -e MESOS_IP=192.168.1.2 -e MESOS_QUORUM=2 \ 
					-e MESOS_ZK=zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos \ 
					--name mesos-master --net host --restart always powerkvm/mesos-master-x86

192.168.1.3 へのデプロイ:

					docker run -d -e MESOS_HOSTNAME=192.168.1.3 -e MESOS_IP=192.168.1.3 -e MESOS_QUORUM=2 \
					-e MESOS_ZK=zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos \ 
					--name mesos-master --net host --restart always powerkvm/mesos-master-x86

192.168.1.4 へのデプロイ:

					docker run -d -e MESOS_HOSTNAME=192.168.1.4 -e MESOS_IP=192.168.1.4 -e MESOS_QUORUM=2 \
					-e MESOS_ZK=zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos \
					--name mesos-master --net host --restart always powerkvm/mesos-master-x86

etcd クラスターをデプロイする

etcd クラスターをデプロイするには、root 特権を持つユーザーとして以下の手順に従います。

192.168.1.2 へのデプロイ:

					docker run -d -v /usr/share/ca-certificates/:/etc/ssl/certs -p 4001:4001 -p 2380:2380 -p 2379:2379 \ 
				    --name etcd --restart always quay.io/coreos/etcd:v2.2.1 \ 
				    -name etcd0 \ 
				    -advertise-client-urls http://192.168.1.2:2379,http://192.168.1.2:4001 \ 
				    -listen-client-urls http://0.0.0.0:2379,http://0.0.0.0:4001 \ 
				    -initial-advertise-peer-urls http://192.168.1.2:2380 \ 
				    -listen-peer-urls http://0.0.0.0:2380 \
				    -initial-cluster-token etcd-cluster-1 \ 
				    -initial-cluster etcd0=http://192.168.1.2:2380,etcd1=http://192.168.1.3:2380,etcd2=http://192.168.1.4:2380\
				    -initial-cluster-state new

192.168.1.3 へのデプロイ:

					docker run -d -v /usr/share/ca-certificates/:/etc/ssl/certs -p 4001:4001 -p 2380:2380 -p 2379:2379 \ 
					--name etcd --restart always quay.io/coreos/etcd:v2.2.1 \ 
					-name etcd0 \
					-advertise-client-urls http://192.168.1.3:2379,http://192.168.1.3:4001 \ 
					-listen-client-urls http://0.0.0.0:2379,http://0.0.0.0:4001 \ 
					-initial-advertise-peer-urls http://192.168.1.3:2380 \ 
					-listen-peer-urls http://0.0.0.0:2380 \
					-initial-cluster-token etcd-cluster-1 \ 
					-initial-cluster etcd0=http://192.168.1.2:2380,etcd1=http://192.168.1.3:2380,etcd2=http://192.168.1.4:2380\
					-initial-cluster-state new

192.168.1.4 へのデプロイ:

					docker run -d -v /usr/share/ca-certificates/:/etc/ssl/certs -p 4001:4001 -p 2380:2380 -p 2379:2379 \
					--name etcd --restart always quay.io/coreos/etcd:v2.2.1 \
					-name etcd0 \ 
					-advertise-client-urls http://192.168.1.4:2379,http://192.168.1.4:4001 \ 
					-listen-client-urls http://0.0.0.0:2379,http://0.0.0.0:4001 \ 
					-initial-advertise-peer-urls http://192.168.1.4:2380 \ 
					-listen-peer-urls http://0.0.0.0:2380 \
					-initial-cluster-token etcd-cluster-1 \ 
					-initial-cluster etcd0=http://192.168.1.2:2380,etcd1=http://192.168.1.3:2380,etcd2=http://192.168.1.4:2380\
					-initial-cluster-state new

Kubernetes-Mesos クラスターをデプロイする

Kubernetes-Mesos クラスターをデプロイするには、root 特権を持つユーザーとして以下の手順に従います。

API サーバー、コントローラー・マネージャー、およびスケジューラーを 192.168.1.2 にデプロイする

  1. /mnt/k8s ディレクトリーに mesos-cloud.conf ファイルを追加します。
    					cat /mnt/k8s/mesos-cloud.conf
    					[mesos-cloud]
    					mesos-master = zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos
  2. Docker イメージのそれぞれを実行します。
    					docker run -d --privileged -v /mnt/k8s:/mnt/k8s --name apiserver --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha km apiserver \
    					--address=192.168.1.2 \
    					--etcd-servers=http://192.168.1.2:4001,http://192.168.1.3:4001,http://192.168.1.4:4001\
    					--service-cluster-ip-range=10.10.10.0/24 \ 
    					--port=8888 \ 
    					--cloud-provider=mesos \
    					--cloud-config=/mnt/k8s/mesos-cloud.conf \ 
    					--secure-port=0 \ 
    					--v=1 
    					
    					docker run -d --privileged -v /mnt/k8s:/mnt/k8s --name controller-manager --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha km controller-manager \
    					--master=192.168.1.2:8888 \ 
    					--cloud-provider=mesos \
    					--cloud-config=/mnt/k8s/mesos-cloud.conf \
    					--v=1
    					
    					docker run -d --privileged --name scheduler --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha kmscheduler \
    					--address=192.168.1.2 \
    					--mesos-master=zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos \
    					--etcd-servers=http://192.168.1.2:4001,http://192.168.1.3:4001,http://192.168.1.4:4001\
    					--mesos-user=root \
    					--api-servers=192.168.1.2:8888 \
    					--cluster-dns=10.10.10.10 \
    					--cluster-domain=cluster.local \
    					--v=2

API サーバー、コントローラー・マネージャー、およびスケジューラーを 192.168.1.3 にデプロイする

  1. /mnt/k8s ディレクトリーに mesos-cloud.conf ファイルを追加します。
    					cat /mnt/k8s/mesos-cloud.conf
    					[mesos-cloud]
    					mesos-master = zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos
  2. Docker イメージのそれぞれを実行します。
    					docker run -d --privileged -v /mnt/k8s:/mnt/k8s --name apiserver --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha km apiserver \
    					--address=192.168.1.3 \
    					--etcd-servers=http://192.168.1.2:4001,http://192.168.1.3:4001,http://192.168.1.4:4001\
    					--service-cluster-ip-range=10.10.10.0/24 \
    					--port=8888 \
    					--cloud-provider=mesos \
    					--cloud-config=/mnt/k8s/mesos-cloud.conf \
    					--secure-port=0 \
    					--v=1
    					
    					docker run -d --privileged -v /mnt/k8s:/mnt/k8s --name controller-manager --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha km controller-manager \
    					--master=192.168.1.3:8888 \
    					--cloud-provider=mesos \
    					--cloud-config=/mnt/k8s/mesos-cloud.conf \
    					--v=1
    					
    					docker run -d --privileged --name scheduler --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha km scheduler \
    					--address=192.168.1.3 \
    					--mesos-master=zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos \
    					--etcd-servers=http://192.168.1.2:4001,http://192.168.1.3:4001,http://192.168.1.4:4001\
    					--mesos-user=root \
    					--api-servers=192.168.1.3:8888 \
    					--cluster-dns=10.10.10.10 \
    					--cluster-domain=cluster.local \ 
    					--v=2

API サーバー、コントローラー・マネージャー、およびスケジューラーを 192.168.1.4 にデプロイする

  1. /mnt/k8s ディレクトリーに mesos-cloud.conf ファイルを追加します。
    					cat /mnt/k8s/mesos-cloud.conf
    					[mesos-cloud]
    					mesos-master = zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos
  2. Docker イメージのそれぞれを実行します。
    					docker run -d --privileged -v /mnt/k8s:/mnt/k8s --name apiserver --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha km apiserver \
    					--address=192.168.1.4 \
    					--etcd-servers=http://192.168.1.2:4001,http://192.168.1.3:4001,http://192.168.1.4:4001\
    					--service-cluster-ip-range=10.10.10.0/24 \
    					--port=8888 \
    					--cloud-provider=mesos \
    					--cloud-config=/mnt/k8s/mesos-cloud.conf \
    					--secure-port=0 \ 
    					--v=1
    					
    					docker run -d --privileged -v /mnt/k8s:/mnt/k8s --name controller-manager --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha km controller-manager \
    					--master=192.168.1.4:8888 \
    					--cloud-provider=mesos \
    					--cloud-config=/mnt/k8s/mesos-cloud.conf \
    					--v=1 
    					
    					docker run -d --privileged --name scheduler --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha km scheduler \
    					--address=192.168.1.4 \
    					--mesos-master=zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos \
    					--etcd-servers=http://192.168.1.2:4001,http://192.168.1.3:4001,http://192.168.1.4:4001\
    					--mesos-user=root \
    					--api-servers=192.168.1.4:8888 \
    					--cluster-dns=10.10.10.10 \
    					--cluster-domain=cluster.local \
    					--v=2

Mesos スレーブ・クラスターをデプロイする

Mesos スレーブの Docker イメージは現在テスト段階にあり、パッケージを使用してこのイメージをインストールできるようになっています。

Mesos スレーブを 192.168.1.5 (x86) にデプロイする

1. Mesos スレーブをインストールします。

					rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-2.noarch.rpm && \
					yum -y install mesos

2. Mesos スレーブを構成します。

					#cat > /etc/mesos/zk <<EOF
					     zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos 
					EOF 
					
					echo 192.168.1.5 | sudo tee /etc/mesos-slave/ip
					cp /etc/mesos-slave/ip /etc/mesos-slave/hostname

3. mesos-slave サービスを起動します。

 systemctl restart mesos-slave

Mesos スレーブを 192.168.1.6 (Power) にデプロイする

  1. 以下のようにしてリポジトリーを追加します。
    					#cat > /etc/yum.repos.d/cluster.repo <<EOF 
    					[cluster]
    					name=cluster baseurl=http://ftp.unicamp.br/pub/ppc64el/rhel/7_1/misc_ppc64el/
    					enabled=1
    					gpgcheck=0
    					priority=10
    					sslverify=1
    					EOF
  2. Mesos スレーブをインストールします。
     yum -y install mesos-0.22.1 python-mesos
  3. Mesos スレーブを構成します。

    /etc/sysconfig/mesos-slave 内で、以下で強調表示されている変数を編集します。

    					# This file contains environment variables that are passed to mesos-slave. 
    					# To get a description of all options run mesos-slave --help; any option 
    					# supported as a command-line option is also supported as an environment 
    					    # variable.
    					    
    					# The mesos master URL to contact. Should be host:port for
    					# non-ZooKeeper based masters, otherwise a zk:// or file:// URL.
    					MESOS_master=zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos
    					MESOS_EXECUTOR_REGISTRATION_TIMEOUT=10mins 
    					MESOS_IP=192.168.1.6 
    					
    					# For isolated sandbox testing 
    					# MESOS_master=127.0.0.1:5050
    					
    					# For a complete listing of options execute 'mesos-slave --help' 
    					MESOS_log_dir=/var/log/mesos
    					MESOS_work_dir=/var/run/mesos
    					MESOS_containerizers=docker,mesos 
    					
    					# systemd cgroup integration 
    					MESOS_isolation='cgroups/cpu,cgroups/mem'
    					MESOS_cgroups_root='system.slice/mesos-slave.service'
    					MESOS_cgroups_hierarchy=/sys/fs/cgroup
  4. mesos-slave サービスを起動します。
     service emsos-slave start

Kubernetes ダッシュボードをデプロイする

ハイブリッド・アーキテクチャーに対応した Kubernetes および Mesos のフレームワークは完成しました。次は、Kubernetes ダッシュボードをデプロイします。この例では、x86 アーキテクチャーのスレーブ内でダッシュボードを実行します。

まず、各スレーブのラベルを追加する必要があります。

  1. x86 アーキテクチャー・ベースのスレーブごとに、ラベル arch=x86 を追加します。
    					docker run -e KUBERNETES_MASTER_IP=192.168.1.2 -e KUBERNETES_MASTER=192.168.1.2:8888 powerkvm/k8s-mesos-x86:v1.4.0-alpha kubectl label nodes 192.168.1.5 arch=x86
  2. Power アーキテクチャー・ベースのスレーブごとに、ラベル arch=ppc64le を追加します。
    					docker run -e KUBERNETES_MASTER_IP=192.168.1.2 -e KUBERNETES_MASTER=192.168.1.2:8888 powerkvm/k8s-mesos-x86:v1.4.0-alpha kubectl label nodes 192.168.1.6 arch=ppc64le
  3. 結果を確認します。
    					docker run -e KUBERNETES_MASTER_IP=192.168.1.2 -e KUBERNETES_MASTER=192.168.1.2:8888 powerkvm/k8s-mesos-x86:v1.4.0-alpha kubectl get nodes --show-labels
    					NAME                       STATUS         AGE           LABELS 
    					192.168.1.5                Ready          2d            arch=x86,kubernetes.io/hostname=192.168.1.5 
    					192.168.1.6                Ready          2d            arch=ppc64le,kubernetes.io/hostname=192.168.1.6
  4. Kubernetes ダッシュボードをダウンロードします。
    					git clone https://github.com/kubernetes/dashboard.git /root/dashboard
  5. kubernetes-dashboard-canary.yaml ファイル内に nodeSelectorapiserver を追加します。
    					cat /root/dashboard/src/deploy/kubernetes-dashboard-canary.yaml 
    					…
    					  spec: 
    					     containers: 
    					     - name: kubernetes-dashboard-canary 
    					       image:gcr.io/google_containers/kubernetes-dashboard-amd64:canary 
    					     … 
    					       args: 
    					       - --apiserver-host=http://192.168.1.2:8888 
    					     … 
    					     nodeSelector: 
    					       arch: x86 …
  6. ダッシュボードの Kubernetes サービスを実行します。
    					docker run --privileged -v /root/dashboard:/root/dashboard -e KUBERNETES_MASTER_IP=192.168.1.2 -e KUBERNETES_MASTER=192.168.1.2:8888 powerkvm/k8s-mesos-x86:v1.4.0-alpha kubectl create -f /root/dashboard/src/deploy/kubernetes-
    					dashboard-canary.yaml --namespace="kube-system"
  7. サービスとポッドを確認します。

    サービスを確認するには、以下のようにします。

    					docker run -e KUBERNETES_MASTER_IP=192.168.1.2 -e KUBERNETES_MASTER=192.168.1.2:8888 powerkvm/k8s-mesos-x86:v1.4.0-alpha kubectl get services --namespace="kube-system" 
    				    NAME                  CLUSTER-IP       EXTERNAL-IP     PORT(S)     AGE
    				    dashboard-canary      10.10.10.14      <nodes>         80/TCP      21m

    以下のようにして、ダッシュボードの nodePort を取得します。

    					docker run -e KUBERNETES_MASTER_IP=192.168.1.2 -e KUBERNETES_MASTER=192.168.1.2:8888 powerkvm/k8s-mesos-x86:v1.4.0-alpha kubectl describe services dashboard-canary --namespace="kube-system"
    					Name: dashboard-canary 
    					Namespace: kube-system 
    					Labels: app=kubernetes-dashboard-canary
    					Selector: app=kubernetes-dashboard-canary 
    					Type: NodePort 
    					IP: 10.10.10.14 
    					Port: <unset> 80/TCP 
    					NodePort: <unset> 31810/TCP 
    					Endpoints: <none>
    					Session Affinity: None

    ポッドを確認するには、以下のようにします。

    					docker run --privileged -v /root/dashboard:/root/dashboard -e KUBERNETES_MASTER_IP=192.168.1.2 -e KUBERNETES_MASTER=192.168.1.2:8888 powerkvm/k8s-mesos-x86:v1.4.0-alpha kubectl get pods --namespace="kube-system" 
    					NAME                                 READY    STATUS    RESTARTS    AGE
    				    kubernetes-dashboard-canary-x5wqg    1/1      Running   0           1h

Web UI

Kubernetes と Mesos が正常にデプロイされたところで、Mesos の Web ページとダッシュボードを確認しましょう。

Mesos UI については、任意の Mesos マスターの IP を使用してポート 5050 にアクセスすることで、ホーム・ページを表示できます。

例えば、[任意の Mesos マスターの IP] : 5050 にアクセスします。

図 2. Mesos ホーム・ページ

ダッシュボードについては、任意の Mesos スレーブの IP を使用して nodePort にアクセスすることで、ホーム・ページを表示できます。

例えば、[任意の Mesos スレーブの IP] : nodePort にアクセスします。
nodePort は、ダッシュボード・サービスの説明から入手できます。

nodePort を入手するには、以下のコマンドを実行します。

					docker run -e KUBERNETES_MASTER_IP=192.168.1.2 -e KUBERNETES_MASTER=192.168.1.2:8888 powerkvm/k8s-mesos-x86:v1.4.0-alpha kubectl describe services dashboard-canary --namespace="kube-system"
図 3. Kubernetes ダッシュボード

まとめ

この記事では、ハイブリッド (Power および x86) アーキテクチャーのシナリオで Kubernetes と Mesos をデプロイする方法を説明しました。また、labelnodeSelector を使用して、x86 上にサービスをデプロイする方法についても説明しました。

リソース

x86 アーキテクチャーについては、Kubernete on Mesos のガイドを参照してください。


ダウンロード可能なリソース


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=1040105
ArticleTitle=ハイブリッド (IBM Power および x86) アーキテクチャーのシナリオでの Mesos と Kubernetes
publish-date=12012016