[[OS]] >

* 目次 [#te8908c2]

#contents

* インストール [#qb484efb]

- 以下の例では、各ノードには[[CoreOS]]、&ref(images/centos.png,nolink);[[CentOS]]または&ref(images/ubuntu.png,nolink);[[Ubuntu]]を用いてセットアップしています。
- Vagrant以外の複数ノード構成例のホスト名とIPアドレスは以下の通りとします。
|~No.|~ホスト名|~IPアドレス|~役割|~備考|
|1|boot.dcos0.example.com|192.168.56.100|Bootstrap||
|2|m{1..3}.dcos0.example.com|192.168.56.10{1..3}|Master|奇数台|
|3|a{1..3}.dcos0.example.com|192.168.56.10{4..6}|Private Agent||
//|4|p{1..3}.dcos0.example.com|192.168.56.10{7..9}|Public Agent||

** Chefクックブック [#gf675fa3]

- &ref(images/cake.png,nolink);[[dcos-grid>https://supermarket.chef.io/cookbooks/dcos-grid]]クックブックを用いた場合のセットアップ方法です。このクックブックは、'''[[Advanced DC/OS Installation Guide>https://dcos.io/docs/1.8/administration/installing/custom/advanced/]]''' の手順に基いて作成されています。

*** クラスタ in LXD [#e75e1872]

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

*** クラスタ on ベアメタル [#kfd7e449]

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

*** アップデート、アップグレード [#oc222ba8]

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

*** 再インストール、設定の変更 [#i5336083]

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

** DC/OS 1.8.x Stable/Early Access [#v5aff7ba]

*** クラスタ on ベアメタル [#d6c7b8cd]

- '''[[Advanced DC/OS Installation Guide>https://dcos.io/docs/1.8/administration/installing/custom/advanced/]]''' を参考にインストールします。

+ ノードの基本セットアップ
++ [[CoreOS]]の場合
+++ [[CoreOS]]の構築については、[[こちら>CoreOS]]のベアメタルの項をご参照ください。
#geshi{{
$ cat /etc/os-release | grep VERSION
VERSION=1068.10.0
VERSION_ID=1068.10.0
}}
+++ &ref(images/note.png,nolink);DC/OSはインストール時 /tmp 以下に500MB程度の空き領域を必要としますが、CoreOSはデフォルトで物理メモリの半分程を tmpfs として /tmp にマウントしますので、物理メモリは2GB以上あるのがよいでしょう。諸事情によりもし動的に拡張したい場合には、以下の要領でリマウントします。
 $ sudo mount -o remount,size=1G tmpfs /tmp/
+++ &ref(images/lightbulb.png,nolink);もしVMを利用する場合には、クローンの上 /var/lib/coreos-install/user_data を編集して反映させれば、多くのノードを素早く作成できます。
++ &ref(images/centos.png,nolink);[[CentOS]]の場合
+++ まず、[[System Requirements>https://dcos.io/docs/1.8/administration/installing/custom/system-requirements/]] を参考に設定を行います。
+++ システムを最新に更新します。
#geshi{{
$ 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
}}
+++ ファイアウォールは最小構成ではロードされていませんが、もし有効な場合には無効にします。
 $ sudo systemctl stop firewalld && sudo systemctl disable firewalld
+++ 追加で必要なパッケージをインストールします。
 $ sudo yum install unzip ipset
+++ SELinuxを無効にし、''nogroup''グループを追加します。
#geshi{{
$ sudo setenforce Permissive
$ sudo sed -i s/SELINUX=enforcing/SELINUX=permissive/g /etc/selinux/config
$ sudo groupadd nogroup
}}
+++ 次に、[[Install Docker on CentOS>https://dcos.io/docs/1.8/administration/installing/custom/system-requirements/install-docker-centos/]] に従い、ディストリビューションのDockerではなく本家のそれをセットアップします。
+++ まず、OverlayFSモジュールを有効にします。
#geshi{{
$ sudo modprobe overlay
$ sudo tee /etc/modules-load.d/overlay.conf <<-'EOF'
overlay
EOF
$ lsmod | grep overlay
overlay                42463  0
}}
+++ Docker公式リポジトリを追加します。
#geshi{{
$ 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
}}
+++ dockerサービスを追加します。
#geshi{{
$ 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
}}
+++ すでに最新のDocker 1.12がリリースされていますが、DC/OSでは未サポートですので1.11以下のバージョンを指定してインストールし、サービスを起動させます。
#geshi{{
$ 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
...
}}
+++ ''/etc/yum.conf'': 誤って最新版(1.12)に更新しないよう除外パッケージとして設定しておきます。
#geshi(bash,number){{
exclude=docker-engine docker-engine-selinux
}}
++ &ref(images/ubuntu.png,nolink);Ubuntu 16.04の場合(&color(red){''実験的''};)。DC/OSはまだ正式にUbuntuをサポートしていません。またDC/OSの実行には systemd を必要としますので、動作させることができる可能性があるのは15.04以降になります。
+++ 必要なパッケージをインストールします。
 $ sudo apt-get install tar xz-utils unzip curl ipset
+++ Dockerの[[チュートリアル>https://docs.docker.com/engine/installation/linux/ubuntulinux/]]に従い、Dockerをセットアップします。
+++ インストールスクリプトが正しく実行できるように、シンボリックリンクでパスを調整します。なお、インストールスクリプト実行時に getenforce コマンドを用いたチェックが失敗しますが(UbuntuではデフォルトでSELinuxをサポートしていませんので)支障ありません。
#geshi{{
$ 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
}}
+ Bootstrapノードの構築
++ 設定のためのディレクトリ ''genconf/'' を用意します。
 $ mkdir genconf
++ ''genconf/config.yaml'': 設定ファイルを作成します。以下の例では、リゾルバはGoogle DNSの設定になっていますが、必要に応じて内部DNSを設定してください。
#geshi(yaml,number){{
---
bootstrap_url: http://192.168.56.100:8080
cluster_name: 'dcos0'
exhibitor_storage_backend: static
ip_detect_filename: /genconf/ip-detect
master_list:
- 192.168.56.101
- 192.168.56.102
- 192.168.56.103
resolvers:
# - <private dns>
- 8.8.8.8
- 8.8.4.4
}}
++ ''genconf/ip-detect'' スクリプトを作成します。以下の例では、ある特定のインタフェイスに割り当てられたIPアドレスを返しています。
#geshi(bash,number){{
#!/usr/bin/env bash
set -o nounset -o errexit
export PATH=/usr/sbin:/usr/bin:$PATH
iface=enp0s8  # or eth0,...
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)
}}
#geshi{{
$ chmod 755 genconf/ip-detect 
$ ./genconf/ip-detect 
192.168.56.100
}}
++ 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
++ 次のコマンドでカスタマイズされたDC/OSビルドファイルを生成させます。
#geshi{{
$ 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
}}
--- &ref(images/note.png,nolink);[[Docker]]が未セットアップの場合エラーとなりますので、あらかじめDockerをインストールしておきます。CoreOSではすでにDockerがプリインストールされています。
#geshi{{
$ sudo bash dcos_generate_config.sh
docker should be installed and running. Aborting.
}}
--- &ref(images/info.png,nolink);最終的に展開された設定ファイルは、アーカイブされた genconf/serve/packages/''dcos-config/dcos-config--setup_*.tar.xz'' の中の ./etc/''expanded.config.json'' にあります。
#geshi{{
$ 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
}}
++ これらのインストールのためのリソースを Nginx で公開します。ポート番号は config.yaml で設定した ''bootstrap_url'' のそれと一致するように注意します。CoreOSではすでにdockerコマンドの実行にsudo権限は不要ですが、&ref(images/centos.png,nolink);CentOSでは必要となります。
#geshi{{
$ 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
}}
+ Masterノードの構築
++ Master各ノードにSSHログインします。
++ 作業ディレクトリを用意し、Bootstrapノードからインストールスクリプトをダウンロードします。
#geshi{{
$ 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
}}
++ ''master''ロールを指定し、スクリプトを実行します。
#geshi{{
$ 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.
}}
++ 全ノードのインストールが完了した後は、以下のExhibitorのWebUIにアクセスし、ZooKeeperアンサンブルが起動完了するのを待ちます。
 http://m1.dcos0.example.com:8181/exhibitor/v1/ui/index.html
+ Private Agent(旧Slave)ノードの構築
++ Masterノードの場合と同様に、作業ディレクトリを用意し、Bootstrapノードからインストールスクリプトをダウンロードします。
#geshi{{
$ mkdir /tmp/dcos && cd /tmp/dcos
$ curl -O http://boot.dcos0.example.com:8080/dcos_install.sh
...
}}
++ ''slave''ロールを指定し、スクリプトを実行します。
#geshi{{
$ 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.
}}
+ DC/OS WebUIにアクセスし、クラスタの動作を確認します。
 http://m1.dcos0.example.com/

*** アップデート、アップグレード [#o09b8009]

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

*** ノードの再セットアップ [#pfde7a44]

- Agentノードの再起動などでIPアドレスが変更になる場合には、DC/OSを再インストールする必要があります。

+ 以前のインストールが残存している場合には、以下のコマンドで削除します。
#geshi{{
$ sudo -i /opt/mesosphere/bin/pkgpanda uninstall
$ sudo rm -rf /opt/mesosphere /etc/mesosphere
}}
+ 上記と同じ手順でノードを再セットアップします。

*** CLI [#n95f8313]

- WebUIにある説明に従いインストールします。1.8では、1.7とは異なりインストールスクリプトはなく、単体のバイナリファイルであるdcosコマンドを直接ダウンロードしてインストールします。

+ 指示の通り次のコマンド群を実行します。
#geshi{{
$ 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 [#e0f8cb13]

*** クラスタ on Vagrant [#za5969b5]

- いくつかの問題を回避するため、以下のバージョンを用いてセットアップすると良いでしょう。
++ [[dcos-vagrant-0.8.0>https://github.com/dcos/dcos-vagrant/releases/tag/v0.8.0]]
++ [[Vagrant]] 1.8.4: 1.8.5のバグ[[#7627>https://github.com/mitchellh/vagrant/issues/7627]]を回避するため
++ VirtualBox 5.0.x: Vagrant 1.8.4が5.1.x未対応のため
- 論理プロセッサは8つほど、メモリは16GB程度あった方が、様々なDCアプリケーションを試せるのではないかと思われます。

+ [['''Deploy DC/OS Vagrant'''>https://github.com/dcos/dcos-vagrant/blob/v0.8.0/docs/deploy.md]]に従い、インストールを進めます。
+ あらかじめ[[Vagrant]]とVirtualBoxをインストールしておきます。
-- &ref(images/ubuntu.png,nolink);Ubuntu 16.04の場合には、Vagrantのバージョンがやや古いため、[[Vagrantのサイト>https://releases.hashicorp.com/vagrant/]]から目的のバージョンのdebパッケージをダウンロードしインストールします。VirtualBoxについてもサイトの[[インストールマニュアル>https://www.virtualbox.org/wiki/Download_Old_Builds_5_0]]に従いインストールします。
+ 以下のVagrantプラグインをインストールします。vagrant-hostmanagerは必須ですが、vagrant-vbguestはオプションです。
#geshi{{
$ vagrant plugin install vagrant-hostmanager
...
$ vagrant plugin install vagrant-vbguest
...
}}
+ dcos-vagrant をダウンロードし、適当な場所に展開します。
#geshi{{
$ tar xvxf dcos-vagrant-0.8.0.tar.gz
...
}}
+ [[DC/OS Releases>https://dcos.io/releases/]]から1.7.0のインストーラ(dcos_generate_config.sh)をダウンロードし、展開したdcos-vagrantのルートディレクトリに置きます。
#geshi{{
$ cp dcos_generate_config.sh dcos-vagrant-0.8.0/
}}
+ dcos-vagrant-0.8.0/ に移動し、目的のバージョンの設定ファイルを有効化します。
#geshi{{
$ cd dcos-vagrant-0.8.0/
$ ln -s config-1.7.yaml etc/config.yaml
}}
-- インストールマニュアルでは、環境変数で指定する方法が記述されていますが、繰り返し試す場合にはシンボリックリンクが便利でしょう。
#geshi{{
$ export DCOS_CONFIG_PATH=etc/config-1.7.yaml
}}
+ 次にDC/OSクラスタの設定ファイルをコピーして有効化します。
#geshi{{
$ cp VagrantConfig.yaml{.example,}
}}
+ 繰り返しインポートされるベースboxをあらかじめダウンロードしておきます。
#geshi{{
$ vagrant box add https://downloads.dcos.io/dcos-vagrant/metadata.json
}}
+ デプロイします。クラスタらしくプライベートエージェントは複数ノードからはじめるとよいでしょう。
#geshi{{
$ vagrant up m1 a1 a2 p1 boot
}}
-- &ref(images/lightbulb.png,nolink);マシンリソースが厳しい場合には、最小構成からはじめてみます。様子を見ながらエージェントを追加していくとよいでしょう。
#geshi{{
$ vagrant up m1 a1 boot
...
$ vagrant up a2
...
}}

*** CLI [#d8f051d5]

- WebUIにある説明に従いインストールします。

+ 環境要件を満たすように各依存パッケージをインストールします。
-- &ref(images/ubuntu.png,nolink);Ubuntu 16.04では以下のようになります。
#geshi{{
$ python -V
Python 2.7.12
$ sudo apt-get install curl python-pip python-virtualenv virtualenv
...
}}
+ 指示の通り次のコマンド群を実行します。
#geshi{{
$ 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
}}
+ 最後の出力内容に従い、コマンドを実行します。
#geshi{{
$ 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'.
}}
+ ログインしてみます。指示のURLにアクセスしログイン後に得たトークンをペーストし、CLIでもログイン可能であることを確認します。
#geshi{{
$ 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!
}}
+ サービスの状態を確認してみます。
#geshi{{
$ 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リポジトリ [#n94bd02f]

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

** Universeリポジトリのビルド [#w91bdc73]

- '''[[Universe Server>https://github.com/mesosphere/universe#universe-server]]'''を参考にビルドします。
- 以下の例では、[[GitHub>https://github.com/mesosphere/universe]]のソースをそのままクローンしてビルドしていますが、パッケージに関するソースツリー(repo/ 以下)を独自のものに差し替えてソース管理することにより、プライベートなリポジトリをビルドすることができます。
- &ref(images/cake.png,nolink);[[dcos-grid>https://supermarket.chef.io/cookbooks/dcos-grid]]クックブックの ''dcos-grid::universe-build-env'' レシピでビルド環境を構築できます。

+ ビルド環境を整備します。Python 3やDockerが必要となります。pip3については、easy_installでも代替できます。
-- &ref(images/ubuntu.png,nolink);Ubuntu: 以下の例では、Dockerについてはディストリビューションのものを利用しています。
#geshi{{
$ sudo apt-get install git python3-pip jq docker.io
}}
-- &ref(images/centos.png,nolink);CentOS: Python 3についてはEPELを利用してインストールし、pipについてはパッケージがないので本家のインストールスクリプトでセットアップします。Dockerについてはディストリビューションのものを利用しています。
#geshi{{
$ 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
}}
+ ビルドします。
#geshi{{
#geshi(javascript){{
$ 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"
    ]
  ]
}
}}
+ すぐに動作確認したい場合には、ビルドサーバでコンテナ起動させてみます。
#geshi{{
$ sudo docker run -d -p 8085:80 alice/universe-server:my-universe
}}
+ 最終的には、生成したイメージを適切なDockerレジストリにプッシュし、先程の marathon.json を利用してDC/OSクラスタ上にUniverseサーバをデプロイします。
#geshi{{
$ sudo docker push alice/universe-server
$ dcos marathon app add docker/server/target/marathon.json
}}

** Local Universe [#ef0ac195]

- &ref(images/info.png,nolink);'''[[Deploying a local Universe>https://dcos.io/docs/1.8/administration/installing/deploying-a-local-dcos-universe/]]'''
- Local Universeとは、パブリックUniverseのパッケージリソースを(メタデータだけでなくコンテナイメージやアーカイブを含めて)すべて提供するリポジトリです。インターネットへの接続を許可されない環境でもUniverseリポジトリを利用することが可能となります。

** リポジトリの登録 [#m6d16302]

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


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS