OS >

目次

インストール

  • 以下の例では、各ノードにはCoreOScentos.pngCentOSまたはubuntu.pngUbuntuを用いてセットアップしています。
  • Vagrant以外の複数ノード構成例のホスト名とIPアドレスは以下の通りとします。
    No.ホスト名IPアドレス役割備考
    1boot.dcos0.example.com192.168.56.100Bootstrap
    2m{1..3}.dcos0.example.com192.168.56.10{1..3}Master奇数台
    3a{1..3}.dcos0.example.com192.168.56.10{4..6}Private Agent

Chefクックブック

クラスタ in LXD

  • 単一マシンのLXD上に、DC/OSの各ノードをコンテナとして起動させてしまう構築方法です。
  • VirtualBox等のVMを利用するよりも軽量で、動作検証に最適です。
  • 詳細な構築方法は、DCOSinLXDをご参照ください。

クラスタ on ベアメタル

  1. dcos-gridの例を参考に、各ノード用のロールを定義します。
  2. 各ノードでレシピを適用させます。
    $ sudo chef-client
  3. Bootstrapノードをセットアップします。Master、Agentノード用のインストールスクリプトが生成され、それを配布するNginxがDockerコンテナとして起動されます。
    $ /opt/dcos-grid/bootstrap_setup.sh
    • lightbulb.pngサービス(Nginx)の再起動: ユーティリティオプションですが、-s を付けると、セットアップ後に、任意のタイミングでサービス(Nginx)の再起動を行えます。ノードの再起動等を行なった場合に便利です。
      $ /opt/dcos-grid/bootstrap_setup.sh -s
  4. 次にMasterノードのセットアップを行います。
    $ /opt/dcos-grid/node_setup.sh master
  5. Masterノードの動作を確認してから、エージェントノードを順にセットアップしていきます。
    $ /opt/dcos-grid/node_setup.sh {slave|slave_public}

アップデート、アップグレード

  1. DC/OSダウンロードURL(['dcos-grid']['dcos_release_url'])と設定(['dcos-grid']['bootstrap']['config'])等についての属性を適切に更新します。
  2. 各ノードでレシピを適用させます。
    $ sudo chef-client
  3. Bootstrapノードを更新します。更新用(Dockerデーモンの再起動を抑止等)のスクリプトが生成され、(キャッシュをクリアするため)それを配布するNginxがDockerコンテナとして再起動されます。
    $ /opt/dcos-grid/bootstrap_upgrade.sh
  4. まずMasterノードの中でZookeeperフォロワーノードを先に更新し、最後にリーダーノードを更新します。
    $ echo stat | /opt/mesosphere/bin/toybox nc localhost 2181 | grep "Mode:"
    Mode: follower
    $ /opt/dcos-grid/node_upgrade.sh master
    $ echo stat | /opt/mesosphere/bin/toybox nc localhost 2181 | grep "Mode:"
    Mode: leader
    $ /opt/dcos-grid/node_upgrade.sh master
  5. Masterノードの動作を確認してから、エージェントノードを順に更新していきます。
    $ /opt/dcos-grid/node_upgrade.sh {slave|slave_public}
  6. Bootstrapノードで -c オプションを付加し更新を完了させます。更新用のスクリプトが新規インストール用のそれに戻され、それを配布するNginxがDockerコンテナとして再起動されます。
    $ /opt/dcos-grid/bootstrap_upgrade.sh -c

再インストール、設定の変更

  1. アップデート、アップグレードとほぼ同様の手順で行います。設定(['dcos-grid']['bootstrap']['config'])等についての属性を適切に更新します。
  2. 各ノードでレシピを適用させます。
    $ sudo chef-client
  3. Bootstrapノードを更新します。-E オプションを付加し、DC/OSリリースのバージョンを維持します(インストーラのダウンロードを行いません)。
    $ /opt/dcos-grid/bootstrap_upgrade.sh -E
  4. まずMasterノードの中でZookeeperフォロワーノードを先に更新し、最後にリーダーノードを更新します。
    $ echo stat | /opt/mesosphere/bin/toybox nc localhost 2181 | grep "Mode:"
    Mode: follower
    $ /opt/dcos-grid/node_upgrade.sh master
    $ echo stat | /opt/mesosphere/bin/toybox nc localhost 2181 | grep "Mode:"
    Mode: leader
    $ /opt/dcos-grid/node_upgrade.sh master
  5. Masterノードの動作を確認してから、エージェントノードを順に更新していきます。
    $ /opt/dcos-grid/node_upgrade.sh {slave|slave_public}
  6. Bootstrapノードで -c オプションを付加し更新を完了させます。
    $ /opt/dcos-grid/bootstrap_upgrade.sh -c

DC/OS 1.8.x Stable/Early Access

クラスタ on ベアメタル

  1. ノードの基本セットアップ
    1. CoreOSの場合
      1. CoreOSの構築については、こちらのベアメタルの項をご参照ください。
        $ cat /etc/os-release | grep VERSION
        VERSION=1068.10.0
        VERSION_ID=1068.10.0
      2. note.pngDC/OSはインストール時 /tmp 以下に500MB程度の空き領域を必要としますが、CoreOSはデフォルトで物理メモリの半分程を tmpfs として /tmp にマウントしますので、物理メモリは2GB以上あるのがよいでしょう。諸事情によりもし動的に拡張したい場合には、以下の要領でリマウントします。
        $ sudo mount -o remount,size=1G tmpfs /tmp/
      3. lightbulb.pngもしVMを利用する場合には、クローンの上 /var/lib/coreos-install/user_data を編集して反映させれば、多くのノードを素早く作成できます。
    2. centos.pngCentOSの場合
      1. まず、System Requirements を参考に設定を行います。
      2. システムを最新に更新します。
        $ sudo yum update
        ...
        $ sudo reboot
        ...
        $ cat /etc/centos-release
        CentOS Linux release 7.2.1511 (Core)
        $ uname -r
        3.10.0-327.28.3.el7.x86_64
      3. ファイアウォールは最小構成ではロードされていませんが、もし有効な場合には無効にします。
        $ sudo systemctl stop firewalld && sudo systemctl disable firewalld
      4. 追加で必要なパッケージをインストールします。
        $ sudo yum install unzip ipset
      5. SELinuxを無効にし、nogroupグループを追加します。
        $ sudo setenforce Permissive
        $ sudo sed -i s/SELINUX=enforcing/SELINUX=permissive/g /etc/selinux/config
        $ sudo groupadd nogroup
      6. 次に、Install Docker on CentOS に従い、ディストリビューションのDockerではなく本家のそれをセットアップします。
      7. まず、OverlayFSモジュールを有効にします。
        $ sudo modprobe overlay
        $ sudo tee /etc/modules-load.d/overlay.conf <<-'EOF'
        overlay
        EOF
        $ lsmod | grep overlay
        overlay                42463  0
      8. Docker公式リポジトリを追加します。
        $ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
        [dockerrepo]
        name=Docker Repository
        baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
        enabled=1
        gpgcheck=1
        gpgkey=https://yum.dockerproject.org/gpg
        EOF
      9. dockerサービスを追加します。
        $ sudo mkdir -p /etc/systemd/system/docker.service.d && sudo tee /etc/systemd/system/docker.service.d/override.conf <<- EOF
        [Service]
        ExecStart=
        ExecStart=/usr/bin/docker daemon --storage-driver=overlay -H fd://
        EOF
      10. すでに最新のDocker 1.12がリリースされていますが、DC/OSでは未サポートですので1.11以下のバージョンを指定してインストールし、サービスを起動させます。
        $ sudo yum install docker-engine-1.11.2-1.el7.centos docker-engine-selinux-1.11.2-1.el7.centos
        $ sudo systemctl start docker
        $ sudo systemctl enable docker
        Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
        $ sudo docker info
        ...
      11. /etc/yum.conf: 誤って最新版(1.12)に更新しないよう除外パッケージとして設定しておきます。
        1. exclude=docker-engine docker-engine-selinux
    3. ubuntu.pngUbuntu 16.04の場合(実験的)。DC/OSはまだ正式にUbuntuをサポートしていません。またDC/OSの実行には systemd を必要としますので、動作させることができる可能性があるのは15.04以降になります。
      1. 必要なパッケージをインストールします。
        $ sudo apt-get install tar xz-utils unzip curl ipset
      2. Dockerのチュートリアルに従い、Dockerをセットアップします。
      3. インストールスクリプトが正しく実行できるように、シンボリックリンクでパスを調整します。なお、インストールスクリプト実行時に getenforce コマンドを用いたチェックが失敗しますが(UbuntuではデフォルトでSELinuxをサポートしていませんので)支障ありません。
        $ sudo ln -s /bin/mkdir /usr/bin/mkdir
        $ sudo ln -s /bin/ln    /usr/bin/ln
        $ sudo ln -s /bin/tar   /usr/bin/tar
        $ sudo ln -s /usr/sbin/useradd /sbin/useradd
  2. Bootstrapノードの構築
    1. 設定のためのディレクトリ genconf/ を用意します。
      $ mkdir genconf
    2. genconf/config.yaml: 設定ファイルを作成します。以下の例では、リゾルバはGoogle DNSの設定になっていますが、必要に応じて内部DNSを設定してください。
      1. ---
      2. bootstrap_url: http://192.168.56.100:8080
      3. cluster_name: 'dcos0'
      4. exhibitor_storage_backend: static
      5. ip_detect_filename: /genconf/ip-detect
      6. master_list:
      7. - 192.168.56.101
      8. - 192.168.56.102
      9. - 192.168.56.103
      10. resolvers:
      11. # - <private dns>
      12. - 8.8.8.8
      13. - 8.8.4.4
    3. genconf/ip-detect スクリプトを作成します。以下の例では、ある特定のインタフェイスに割り当てられたIPアドレスを返しています。
      1. #!/usr/bin/env bash
      2. set -o nounset -o errexit
      3. export PATH=/usr/sbin:/usr/bin:$PATH
      4. iface=enp0s8  # or eth0,...
      5. echo $(ip addr show $iface | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
      $ chmod 755 genconf/ip-detect 
      $ ./genconf/ip-detect 
      192.168.56.100
    4. DC/OSインストーラをダウンロードします。
      $ curl -O https://downloads.dcos.io/dcos/stable/dcos_generate_config.sh
      or
      $ curl -O https://downloads.dcos.io/dcos/EarlyAccess/dcos_generate_config.sh
    5. 次のコマンドでカスタマイズされたDC/OSビルドファイルを生成させます。
      $ sudo bash dcos_generate_config.sh 
      Extracting image from this script and loading into docker daemon, this step can take a few minutes
      dcos-genconf.4cfc235259a2375c55-d70f6d2201e1b68343.tar
      Running mesosphere/dcos-genconf docker with BUILD_DIR set to /home/core/genconf
      ====> EXECUTING CONFIGURATION GENERATION
      Generating configuration files...
      ...
      Package filename: packages/dcos-config/dcos-config--setup_72aea9b059dc73e84badcf9de190bc7db3d8a0da.tar.xz
      Package filename: packages/dcos-metadata/dcos-metadata--setup_72aea9b059dc73e84badcf9de190bc7db3d8a0da.tar.xz
      Generating Bash configuration files for DC/OS
      • note.pngDockerが未セットアップの場合エラーとなりますので、あらかじめDockerをインストールしておきます。CoreOSではすでにDockerがプリインストールされています。
        $ sudo bash dcos_generate_config.sh
        docker should be installed and running. Aborting.
      • info.png最終的に展開された設定ファイルは、アーカイブされた genconf/serve/packages/dcos-config/dcos-config--setup_*.tar.xz の中の ./etc/expanded.config.json にあります。
        $ tar tvf genconf/serve/packages/dcos-config/dcos-config--setup_*.tar.xz
        ...
        $ tar xvf genconf/serve/packages/dcos-config/dcos-config--setup_*.tar.xz ./etc/user.config.yaml
        ./etc/user.config.yaml
        $ tar xvf genconf/serve/packages/dcos-config/dcos-config--setup_*.tar.xz ./etc/expanded.config.json
        ./etc/expanded.config.json
    6. これらのインストールのためのリソースを Nginx で公開します。ポート番号は config.yaml で設定した bootstrap_url のそれと一致するように注意します。CoreOSではすでにdockerコマンドの実行にsudo権限は不要ですが、centos.pngCentOSでは必要となります。
      $ docker run -d -p 8080:80 -v $PWD/genconf/serve:/usr/share/nginx/html:ro nginx
      Unable to find image 'nginx:latest' locally
      latest: Pulling from library/nginx
      357ea8c3d80b: Pull complete 
      0fc04568277e: Pull complete 
      0bed9719ddcb: Pull complete 
      Digest: sha256:d33834dd25d330da75dccd8add3ae2c9d7bb97f502b421b02cecb6cb7b34a1b6
      Status: Downloaded newer image for nginx:latest
      a4b4ef94853f6062dbec826a64934210c3426b9620c05a444dd33b8d7b02ad76
  3. Masterノードの構築
    1. Master各ノードにSSHログインします。
    2. 作業ディレクトリを用意し、Bootstrapノードからインストールスクリプトをダウンロードします。
      $ mkdir /tmp/dcos && cd /tmp/dcos
      $ curl -O http://boot.dcos0.example.com:8080/dcos_install.sh
        % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                       Dload  Upload   Total   Spent    Left  Speed
      100 15505  100 15505    0     0   828k      0 --:--:-- --:--:-- --:--:--  946k
    3. masterロールを指定し、スクリプトを実行します。
      $ sudo bash dcos_install.sh master
      Starting DC/OS Install Process
      Running preflight checks
      Checking if DC/OS is already installed: PASS (Not installed)
      PASS Is SELinux disabled?
      Checking if docker is installed and in PATH: PASS 
      Checking docker version requirement (>= 1.6): PASS (1.10.3)
      Checking if curl is installed and in PATH: PASS 
      Checking if bash is installed and in PATH: PASS 
      Checking if ping is installed and in PATH: PASS 
      Checking if tar is installed and in PATH: PASS 
      Checking if xz is installed and in PATH: PASS 
      Checking if unzip is installed and in PATH: PASS 
      Checking if ipset is installed and in PATH: PASS 
      Checking if systemd-notify is installed and in PATH: PASS 
      Checking if systemd is installed and in PATH: PASS 
      Checking systemd version requirement (>= 200): PASS (229)
      Checking if group 'nogroup' exists: PASS 
      Checking if port 53 (required by spartan) is in use: PASS 
      Checking if port 80 (required by adminrouter) is in use: PASS 
      Checking if port 443 (required by adminrouter) is in use: PASS 
      Checking if port 1050 (required by 3dt) is in use: PASS 
      Checking if port 2181 (required by zookeeper) is in use: PASS 
      Checking if port 5050 (required by mesos-master) is in use: PASS 
      Checking if port 7070 (required by cosmos) is in use: PASS 
      Checking if port 8080 (required by marathon) is in use: PASS 
      Checking if port 8101 (required by dcos-oauth) is in use: PASS 
      Checking if port 8123 (required by mesos-dns) is in use: PASS 
      Checking if port 8181 (required by exhibitor) is in use: PASS 
      Checking if port 9000 (required by metronome) is in use: PASS 
      Checking if port 9942 (required by metronome) is in use: PASS 
      Checking if port 9990 (required by cosmos) is in use: PASS 
      Checking if port 15055 (required by dcos-history) is in use: PASS 
      Checking if port 33107 (required by navstar) is in use: PASS 
      Checking if port 36771 (required by marathon) is in use: PASS 
      Checking if port 41281 (required by zookeeper) is in use: PASS 
      Checking if port 42819 (required by spartan) is in use: PASS 
      Checking if port 43911 (required by minuteman) is in use: PASS 
      Checking if port 46839 (required by metronome) is in use: PASS 
      Checking if port 61053 (required by mesos-dns) is in use: PASS 
      Checking if port 61420 (required by epmd) is in use: PASS 
      Checking if port 61421 (required by minuteman) is in use: PASS 
      Checking if port 62053 (required by spartan) is in use: PASS 
      Checking if port 62080 (required by navstar) is in use: PASS 
      Checking Docker is configured with a production storage driver: PASS (overlay)
      Creating directories under /etc/mesosphere
      Creating role file for master
      Configuring DC/OS
      Setting and starting DC/OS
      Created symlink from /etc/systemd/system/multi-user.target.wants/dcos-setup.service to /etc/systemd/system/dcos-setup.service.
    4. 全ノードのインストールが完了した後は、以下のExhibitorのWebUIにアクセスし、ZooKeeperアンサンブルが起動完了するのを待ちます。
      http://m1.dcos0.example.com:8181/exhibitor/v1/ui/index.html
  4. Private Agent(旧Slave)ノードの構築
    1. Masterノードの場合と同様に、作業ディレクトリを用意し、Bootstrapノードからインストールスクリプトをダウンロードします。
      $ mkdir /tmp/dcos && cd /tmp/dcos
      $ curl -O http://boot.dcos0.example.com:8080/dcos_install.sh
      ...
    2. slaveロールを指定し、スクリプトを実行します。
      $ sudo bash dcos_install.sh slave
      Starting DC/OS Install Process
      Running preflight checks
      Checking if DC/OS is already installed: PASS (Not installed)
      PASS Is SELinux disabled?
      Checking if docker is installed and in PATH: PASS 
      Checking docker version requirement (>= 1.6): PASS (1.10.3)
      Checking if curl is installed and in PATH: PASS 
      Checking if bash is installed and in PATH: PASS 
      Checking if ping is installed and in PATH: PASS 
      Checking if tar is installed and in PATH: PASS 
      Checking if xz is installed and in PATH: PASS 
      Checking if unzip is installed and in PATH: PASS 
      Checking if ipset is installed and in PATH: PASS 
      Checking if systemd-notify is installed and in PATH: PASS 
      Checking if systemd is installed and in PATH: PASS 
      Checking systemd version requirement (>= 200): PASS (229)
      Checking if group 'nogroup' exists: PASS 
      Checking if port 53 (required by spartan) is in use: PASS 
      Checking if port 5051 (required by mesos-agent) is in use: PASS 
      Checking if port 34451 (required by navstar) is in use: PASS 
      Checking if port 39851 (required by spartan) is in use: PASS 
      Checking if port 43995 (required by minuteman) is in use: PASS 
      Checking if port 61001 (required by agent-adminrouter) is in use: PASS 
      Checking if port 61420 (required by epmd) is in use: PASS 
      Checking if port 61421 (required by minuteman) is in use: PASS 
      Checking if port 62053 (required by spartan) is in use: PASS 
      Checking if port 62080 (required by navstar) is in use: PASS 
      Checking Docker is configured with a production storage driver: PASS (overlay)
      Creating directories under /etc/mesosphere
      Creating role file for slave
      Configuring DC/OS
      Setting and starting DC/OS
      Created symlink from /etc/systemd/system/multi-user.target.wants/dcos-setup.service to /etc/systemd/system/dcos-setup.service.
  5. DC/OS WebUIにアクセスし、クラスタの動作を確認します。
    http://m1.dcos0.example.com/

アップデート、アップグレード

  • 手動の場合は、以下のドキュメントに従い更新します。
    1. https://dcos.io/docs/1.8/administration/upgrading/
    2. メンテナンスアップデート(例: 1.8.0 -> 1.8.1)のドキュメントはまだ用意されていないようですので、マイナーアップグレード(1.7.x -> 1.8.x)と同じ手順でアップデートします。

ノードの再セットアップ

  • Agentノードの再起動などでIPアドレスが変更になる場合には、DC/OSを再インストールする必要があります。
  1. 以前のインストールが残存している場合には、以下のコマンドで削除します。
    $ sudo -i /opt/mesosphere/bin/pkgpanda uninstall
    $ sudo rm -rf /opt/mesosphere /etc/mesosphere
  2. 上記と同じ手順でノードを再セットアップします。

CLI

  • WebUIにある説明に従いインストールします。1.8では、1.7とは異なりインストールスクリプトはなく、単体のバイナリファイルであるdcosコマンドを直接ダウンロードしてインストールします。
  1. 指示の通り次のコマンド群を実行します。
    $ sudo curl https://downloads.dcos.io/binaries/cli/linux/x86-64/0.4.10/dcos -o /usr/local/bin/dcos 
    $ sudo chmod +x /usr/local/bin/dcos
    $ dcos config set core.dcos_url https://<master_node_ip>

DC/OS 1.7.0

クラスタ on Vagrant

  • いくつかの問題を回避するため、以下のバージョンを用いてセットアップすると良いでしょう。
    1. dcos-vagrant-0.8.0
    2. Vagrant 1.8.4: 1.8.5のバグ#7627を回避するため
    3. VirtualBox 5.0.x: Vagrant 1.8.4が5.1.x未対応のため
  • 論理プロセッサは8つほど、メモリは16GB程度あった方が、様々なDCアプリケーションを試せるのではないかと思われます。
  1. Deploy DC/OS Vagrantに従い、インストールを進めます。
  2. あらかじめVagrantVirtualBoxをインストールしておきます。
    • ubuntu.pngUbuntu 16.04の場合には、Vagrantのバージョンがやや古いため、Vagrantのサイトから目的のバージョンのdebパッケージをダウンロードしインストールします。VirtualBoxについてもサイトのインストールマニュアルに従いインストールします。
  3. 以下のVagrantプラグインをインストールします。vagrant-hostmanagerは必須ですが、vagrant-vbguestはオプションです。
    $ vagrant plugin install vagrant-hostmanager
    ...
    $ vagrant plugin install vagrant-vbguest
    ...
  4. dcos-vagrant をダウンロードし、適当な場所に展開します。
    $ tar xvxf dcos-vagrant-0.8.0.tar.gz
    ...
  5. DC/OS Releasesから1.7.0のインストーラ(dcos_generate_config.sh)をダウンロードし、展開したdcos-vagrantのルートディレクトリに置きます。
    $ cp dcos_generate_config.sh dcos-vagrant-0.8.0/
  6. dcos-vagrant-0.8.0/ に移動し、目的のバージョンの設定ファイルを有効化します。
    $ cd dcos-vagrant-0.8.0/
    $ ln -s config-1.7.yaml etc/config.yaml
    • インストールマニュアルでは、環境変数で指定する方法が記述されていますが、繰り返し試す場合にはシンボリックリンクが便利でしょう。
      $ export DCOS_CONFIG_PATH=etc/config-1.7.yaml
  7. 次にDC/OSクラスタの設定ファイルをコピーして有効化します。
    $ cp VagrantConfig.yaml{.example,}
  8. 繰り返しインポートされるベースboxをあらかじめダウンロードしておきます。
    $ vagrant box add https://downloads.dcos.io/dcos-vagrant/metadata.json
  9. デプロイします。クラスタらしくプライベートエージェントは複数ノードからはじめるとよいでしょう。
    $ vagrant up m1 a1 a2 p1 boot
    • lightbulb.pngマシンリソースが厳しい場合には、最小構成からはじめてみます。様子を見ながらエージェントを追加していくとよいでしょう。
      $ vagrant up m1 a1 boot
      ...
      $ vagrant up a2
      ...

CLI

  • WebUIにある説明に従いインストールします。
  1. 環境要件を満たすように各依存パッケージをインストールします。
    • ubuntu.pngUbuntu 16.04では以下のようになります。
      $ python -V
      Python 2.7.12
      $ sudo apt-get install curl python-pip python-virtualenv virtualenv
      ...
  2. 指示の通り次のコマンド群を実行します。
    $ mkdir -p dcos && cd dcos && 
    >   curl -O https://downloads.dcos.io/dcos-cli/install.sh && 
    >   bash ./install.sh . https://m1.dcos && 
    >   source ./bin/env-setup
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  5163  100  5163    0     0   2535      0  0:00:02  0:00:02 --:--:--  2535
    Installing DC/OS CLI from PyPI...
    
    Running virtualenv with interpreter /usr/bin/python2
    New python executable in /home/alice/dcos/bin/python2
    Also creating executable in /home/alice/dcos/bin/python
    Installing setuptools, pkg_resources, pip, wheel...done.
    [core.reporting]: set to 'True'
    [core.dcos_url]: set to 'https://m1.dcos'
    [core.ssl_verify]: set to 'false'
    [core.timeout]: set to '5'
    
    Modify your bash profile to add DCOS to your PATH? [yes/no] yes
    
    Finished installing and configuring DC/OS CLI.
    
    Run this command to set up your environment and to get started:
    source /home/alice/dcos/bin/env-setup && dcos help
  3. 最後の出力内容に従い、コマンドを実行します。
    $ source /home/alice/dcos/bin/env-setup && dcos help
    Command line utility for the Mesosphere Datacenter Operating
    System (DC/OS). The Mesosphere DC/OS is a distributed operating
    system built around Apache Mesos. This utility provides tools
    for easy management of a DC/OS installation.
    
    Available DC/OS commands:
    
    	auth           	Authenticate to DC/OS cluster
    	config         	Manage the DC/OS configuration file
    	help           	Display help information about DC/OS
    	marathon       	Deploy and manage applications to DC/OS
    	node           	Administer and manage DC/OS cluster nodes
    	package        	Install and manage DC/OS software packages
    	service        	Manage DC/OS services
    	task           	Manage DC/OS tasks
    
    Get detailed command description with 'dcos <command> --help'.
  4. ログインしてみます。指示のURLにアクセスしログイン後に得たトークンをペーストし、CLIでもログイン可能であることを確認します。
    $ dcos auth login
    
    Please go to the following link in your browser:
    
        https://m1.dcos/login?redirect_uri=urn:ietf:wg:oauth:2.0:oob
    
    Enter authentication token: eyJ0eXAiOiJKV ...
    Login successful!
  5. サービスの状態を確認してみます。
    $ dcos service
    NAME           HOST      ACTIVE  TASKS  CPU  MEM  DISK  ID                                         
    marathon  192.168.65.90   True     0    0.0  0.0  0.0   0f41da67-6fe9-4614-8f29-6f0f13098b81-0000

Universeリポジトリ

  • Universeリポジトリは、DC/OSアプリパッケージを提供するリポジトリです。
  • インターネット上にはMesosphere Inc.の提供するセントラルリポジトリがあり、GitHubで管理されています。このソースリポジトリにプルリクエストすることにより、自分の作成したパッケージを追加することも可能です。また、プライベートなUniverseリポジトリを構築することも可能です。

Universeリポジトリのビルド

  • Universe Serverを参考にビルドします。
  • 以下の例では、GitHubのソースをそのままクローンしてビルドしていますが、パッケージに関するソースツリー(repo/ 以下)を独自のものに差し替えてソース管理することにより、プライベートなリポジトリをビルドすることができます。
  • cake.pngdcos-gridクックブックの dcos-grid::universe-build-env レシピでビルド環境を構築できます。
  1. ビルド環境を整備します。Python 3やDockerが必要となります。pip3については、easy_installでも代替できます。
    • ubuntu.pngUbuntu: 以下の例では、Dockerについてはディストリビューションのものを利用しています。
      $ sudo apt-get install git python3-pip jq docker.io
    • centos.pngCentOS: Python 3についてはEPELを利用してインストールし、pipについてはパッケージがないので本家のインストールスクリプトでセットアップします。Dockerについてはディストリビューションのものを利用しています。
      $ sudo yum install git epel-release
      $ sudo yum install python34-setuptools jq
      $ curl -L -O https://bootstrap.pypa.io/get-pip.py
      $ sudo python3 get-pip.py
      $ sudo yum install docker
      $ sudo systemctl start docker
  2. ビルドします。
    $ sudo pip3 install jsonschema
    or
    $ sudo easy_install     jsonschema  # Ubuntu 16.04
    $ sudo easy_install-3.4 jsonschema  # CentOS 7
    
    $ git clone https://github.com/mesosphere/universe.git
    $ cd universe
    $ scripts/build.sh
    ...
    Everything OK!
    
    $ sudo bash -c 'DOCKER_IMAGE="alice/universe-server" DOCKER_TAG="my-universe" docker/server/build.bash'
    ...
    Successfully built 35b8f72d27fe
    2016-12-03 10:11:16 Built docker image alice/universe-server:my-universe
    2016-12-03 10:11:16 marathon.json output to /home/alice/universe/docker/server/target/marathon.json
    
    $ sudo docker images
    REPOSITORY                   TAG                 IMAGE ID            CREATED              SIZE
    alice/universe-server        my-universe         35b8f72d27fe        About a minute ago   84.98 MB
    docker.io/nginx              1.10.0-alpine       8328c2365672        7 months ago         60.61 MB
    
    $ cat docker/server/target/marathon.json
    {
      "id": "/universe",
      "instances": 1,
      "cpus": 0.25,
      "mem": 128,
      "requirePorts": true,
      "container": {
        "type": "DOCKER",
        "docker": {
          "network": "BRIDGE",
          "image": "alice/universe-server:my-universe",
          "portMappings": [
            {
              "containerPort": 80,
              "hostPort": 8085,
              "protocol": "tcp"
            }
          ]
        },
        "volumes": []
      },
      "healthChecks": [
        {
          "gracePeriodSeconds": 120,
          "intervalSeconds": 30,
          "maxConsecutiveFailures": 3,
          "path": "/repo-empty-v3.json",
          "portIndex": 0,
          "protocol": "HTTP",
          "timeoutSeconds": 5
        }
      ],
      "constraints": [
        [
          "hostname",
          "UNIQUE"
        ]
      ]
    }
  3. すぐに動作確認したい場合には、ビルドサーバでコンテナ起動させてみます。
    $ sudo docker run -d -p 8085:80 alice/universe-server:my-universe
  4. 最終的には、生成したイメージを適切なDockerレジストリにプッシュし、先程の marathon.json を利用してDC/OSクラスタ上にUniverseサーバをデプロイします。
    $ sudo docker push alice/universe-server
    $ dcos marathon app add docker/server/target/marathon.json

Local Universe

  • info.pngDeploying a local Universe
  • Local Universeとは、パブリックUniverseのパッケージリソースを(メタデータだけでなくコンテナイメージやアーカイブを含めて)すべて提供するリポジトリです。インターネットへの接続を許可されない環境でもUniverseリポジトリを利用することが可能となります。

リポジトリの登録

  1. 用意したリポジトリは、DC/OSのWebUIやCLIを使って追加します。
    $ dcos package repo add --index=0 my-universe http://my-universe.example.com:8085/repo

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-06-29 (木) 23:13:05 (295d)