オーケストレーションによって Docker コンテナーを管理する

2016年 9月 01日
PDF (253 KB)
 
Pradipta's photo

Pradipta Banerjee

Docker & Power Cloud Architect

Pradipta Banerjee is Docker & Power Cloud Architect, Linux Technology Center.

Docker はオーケストレーションによって、Docker 環境内でコンテナーをスケジューリングし、クラスターを管理し、そしてより多くのホストをプロビジョニングします。

Kubernetes

 

Kubernetes は、コンテナー化されたアプリケーションを自動でデプロイし、運用し、スケーリングするためのオープン・ソースのシステムです。Kubernetes はアプリケーションに含まれる複数コンテナーを論理単位にグループ化して、管理およびディスカバリーを簡易化します。
Kubernetes は Docker コンテナーを対象としたオープン・ソースのオーケストレーション・エンジンであり、マスター/スレーブの概念に従って機能します。Kubernetes クラスターは、以下の主要なコンポーネントで構成されます。

  • マスター: 1 つ以上のノード (ミニオン) を監視するクラスター・マネージャー。
  • ノード (ミニオンまたはスレーブ): コンテナーの起動を担当するクラスター・メンバー。
  • ポッド: Kubernetes での基本的な運用単位。スレーブ (ミニオン) 上で実行されるアプリケーションを構成する 1 つ以上のコンテナーを表します。

可用性

 

以下の表に、PowerPC LE (ppc64le) プラットフォームに関連するパッケージの場所を記載します。

Linux ディストリビューションパッケージの場所
Fedora 24 Distro リポジトリー
Red Hat Enterprise Linux (RHEL) 7.XUnicamp[1]

[1] Unicamp リポジトリー: http://ftp.unicamp.br/pub/ppc64el/rhel/7_1/misc_ppc64el/

RHEL 7.1 LE 上に Kubernetes クラスターをセットアップする

 

Kubernetes のインストールとセットアップ

 

Kubernetes クラスターの一部にするシステムのすべてに、以下の Unicamp リポジトリーが追加されるようにします。

# cat > /etc/yum.repos.d/unicamp-docker.repo <<EOF
[unicamp-docker]
name=Unicamp Repo for Docker Packages
baseurl=http://ftp.unicamp.br/pub/ppc64el/rhel/7_1/docker-ppc64el/
enabled=1
gpgcheck=0
EOF
 
# cat > /etc/yum.repos.d/unicamp-misc.repo <<EOF
[unicamp-misc]
name=Unicamp Repo for Misc Packages
baseurl=http://ftp.unicamp.br/pub/ppc64el/rhel/7_1/misc_ppc64el/
enabled=1
gpgcheck=0
EOF

Kubernetes マスターのインストールとセットアップ

 
  1. 必要なパッケージをインストールします。
    # yum install kubernetes-client kubernetes-master etcd
  2. ネットワーク・ポートを開きます。デフォルトでは、Kubernetes apiserver はポート 8080 で kubelet を listen します。このポートがローカル・ファイアウォールによってブロックされないようにしてください。ファイアウォールを使用している場合は、以下のコマンドを実行してパブリック・ゾーンの TCP ポートを開きます。
    # firewall-cmd --zone=public --add-port=8080/tcp --permanent 
    # firewall-cmd --reload

    さらに、デフォルトでは etcd サーバーがポート 2379 で listen するので、以下の手順に従って該当するポートを開きます。
    # firewall-cmd --zone=public --add-port=2379/tcp --permanent 
    # firewall-cmd –reload
  3. Kubernetes マスターを構成します。残りの構成手順では、Kubernetes マスターの IP アドレスは 192.168.122.76 で、Kubernetes ノードの IP アドレスは 192.168.122.236 であることを前提とします。
    /etc/kubernetes/config ファイルに、環境に応じた変更を加えます。前述の IP アドレス情報に基づくと、変更後のファイルの内容は以下のようになります。

    リスティングを見るにはここをクリック

    # logging to stderr means we get it in the systemd journal                                                                                    KUBE_LOGTOSTDERR="--logtostderr=true"
    # journal message level, 0 is debug
    KUBE_LOG_LEVEL="--v=0"
    # Should this cluster be allowed to run privileged docker containers
    KUBE_ALLOW_PRIV="--allow-privileged=false"
    # How the controller-manager, scheduler, and proxy find the apiserver
    KUBE_MASTER="--master=http://192.168.122.76:8080"
    /etc/kubernetes/apiserver ファイルに、環境に応じた変更を加えます。前述の IP アドレス情報に基づくと、変更後のファイルの内容は以下のようになります。

    リスティングを見るにはここをクリック

    # The address on the local server to listen to.
    KUBE_API_ADDRESS="--address=0.0.0.0"
    # The port on the  local server to listen on.
    # KUBE_API_PORT="--port=8080”
    # Port minions listen on
    # KUBELET_PORT="--kubelet-port=10250"
    #  Comma separated list of nodes in the etcd cluster
    KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.122.76:2379"
    # Address range to use for services
    KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
    # default admission control policies
    KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
    # Add your own!
    KUBE_API_ARGS=""
  4. etcd を構成します。/etc/etcd/etcd.conf ファイル内で、以下のように 2 つのパラメーターを変更します。
    ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" 
    ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
  5. サービスを起動します。
    # for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do
        systemctl restart $SERVICES
        systemctl enable $SERVICES
        systemctl status $SERVICES
    done

Kubernetes ノード (ミニオン) のインストールとセットアップ

 
  1. 必要なパッケージをインストールします。
     # yum install docker-io kubernetes-client kubernetes-node
  2. Kubernetes ノードを構成します。/etc/kubernetes/ kubelet に、環境に応じた変更を加えます。前述の IP アドレス情報に基づくと、変更後のファイルの内容は以下のようになります。
    # kubernetes kubelet (minion) config
    # The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
    KUBELET_ADDRESS="--address=0.0.0.0"
    # The port for the info server to serve on
    # KUBELET_PORT="--port=10250"
    # You may leave this blank to use the actual hostname
    KUBELET_HOSTNAME=" "
    # location of the api-server
    KUBELET_API_SERVER="--api-servers=http://192.168.122.76:8080"
    # Add your own!
    KUBELET_ARGS="—pod-infra-container-image=gcr.io/google_containers/pause-ppc64le:2.0"
  3. サービスを起動します。
    # for SERVICES in kube-proxy kubelet docker; do
      systemctl restart $SERVICES
      systemctl enable $SERVICES
      systemctl status $SERVICES
    done
  4. セットアップを確認します。マスターにログインし、kubectl get nodes を実行して利用可能なノードを確認します。
    [root@localhost ~]# kubectl get nodes
    NAME     LABELS                          STATUS AGE
    fed-node kubernetes.io/hostname=fed-node Ready  1h
  5. クラスター内の任意のノードからプライベート・レジストリーにログインし、レジストリー認証構成ファイルを取得します。
    # docker login https://registry-rhel71.kube.com:5000
    # cat /root/.docker/config.json 
    {
        "auths": {
            "https://registry-rhel71.kube.com:5000": {
                "auth": "cHJhZGlwdGE6cHJhZGlwdGE=",
                "email": "test@test.com"
            }
    }

Kubernetes クラスター内のすべてのノードに対し、この構成ファイル (config.json) をパス /root/.docker/config.json にコピーします。これで、クラスターはプライベート・レジストリー・サーバーを使用するようにセットアップされました。

Docker Swarm: Docker ホストのネイティブ・クラスタリング

 

Docker Swarm は、Docker 用のネイティブ・クラスタリング・ツールです。Swarm は Docker ホストのプールを単一の仮想 Docker ホストに変換します。Docker Swarm は標準 Docker API に対応するため、既に Docker デーモンと通信するツールであれば、どのツールでも Swarm を利用して複数のホストにトランスペアレントにスケーリングすることができます。
以下に、Swarm クラスターの概念図を示します。

Docker を示す図

可用性

 

現在のところ、Docker Swarm をビルドするには、Power プラットフォーム用の https://github.com/docker/swarm Web サイトにあるソースを使用する必要があります。

Power サーバー上のセットアップ

 

Ubuntu LE を実行する Power サーバー上の Swarm を操作するには、
以下のコマンドを実行します。

$ mkdir ~/go.prj
$ export GOPATH=~/go.prj
$ export PATH=$PATH:~/go.prj/bin
$ go get github.com/tools/godep
$ go get github.com/docker/swarm
swarm binary will be available under $GOPATH/bin/

操作する

 
  1. Swarm クラスターの一部にしなければならない Docker ホストのそれぞれについて、TCP で Docker API を公開するように Docker デーモンを構成します。
     docker -H tcp://0.0.0.0:2375 daemon

    Docker、Swarm、およびクライアント間での通信をセキュアにするために、TLS をセットアップするよう助言します。
  2. Swarm を実行して、ホストを登録します。
    • Docker Swarm イメージを使用している場合は、以下のコマンドを実行します。
       docker run -H tcp://0.0.0.0:2375 -d swarm join --addr=<node_ip:2375> <discovery-option>
    • ソースからビルドした Swarm を使用している場合は、以下のコマンドを実行します。
       swarm join --addr=<node_ip:2375> <discovery-option>
  3. 指定のマシン上で Swarm 管理サービスを起動します。
    • Docker Swarm イメージを使用している場合は、以下のコマンドを実行します。
       docker run -d -p <swarm_cluster_mgr_port>:2375 swarm manage <discovery-option>
    • ソースからビルドした Swarm を使用している場合は、以下のコマンドを実行します。
       swarm manage <discovery-option>

ディスカバリーとクラスター・メンバーシップ

 

Swarm がサポートする、Swarm ノードを検出してクラスターを作成するためのメカニズムは複数あります。

  • ホスト型ディスカバリー
    1. ディスカバリー・オプションとして token://<クラスター ID> を使用します。
    2. https://discovery-stage.hub.docker.com でホストされます。
  • ファイル
    1. Docker ホストを <IP>:<ポート> の形式でファイルに追加します。
    2. ディスカバリー・オプションとして file://<ファイルのパス> を使用します。
  • ノード詳細 (<IP>:<ポート>) のコンマ区切りリストを、コマンド・ライン・インターフェースに直接指定します。
  • etcd
    ディスカバリー・オプションとして etcd://<etcd IP>/<パス> を使用します。
  • Consul
    ディスカバリー・オプションとして consul://<consul IP>/<パス> を使用します。
  • Zookeeper
    ディスカバリー・オプションとして zk://<zookeeper アドレス 1>,<zookeeper アドレス 2>/<パス> を使用します。

コメントの追加

注意: HTML コードは、コメント内ではサポートされません。


残り 1000 文字

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=1036784
ArticleTitle=オーケストレーションによって Docker コンテナーを管理する
publish-date=09012016