以前少し調べてたDockerコンテナ管理ツールのRancher.io をIDCFクラウドに構築していこうと思います。はじめにSaltを使ってDockerをインストールします。Azure に構築したSaltクラスタと同様にsalt-config のテンプレートを使います。IDCFクラウド上にsalt-masterとsalt-minion用の仮想マシンを1台ずつ作成しておきます。
SLSファイル このテンプレートに用意しているSLSファイルは以下になります。
$ tree /srv/salt/config/salt/ /srv/salt/config/salt/ ├── base.sls ├── common.sls ├── docker │ └── init.sls ├── emacs │ └── init.sls ├── misc.sls ├── s3cmd │ ├── init.sls │ └── s3cfg └── top.sls
top.slsにGrainで定義したロールごとにインストールするパッケージを分けています。Dockerはどちらのロールでもインストールされます。
/srv/salt/config/salt/top.sls base: '*' : - base - users 'roles:salt-master': - match: grain - docker 'roles:dev': - match: grain - emacs - s3cmd - docker
まだIDCFオブジェクトストレージは使いませんが、Pillarを編集してキー情報を設定すれば使えるようにしています。
$ cd /srv/salt/config/pillar $ cp s3cmd.sls.sample s3cmd.sls $ vi s3cmd.sls s3cmd: access_key: xxx secret_key: xxx
salt-masterのインストール salt-masterの仮想マシンにログインしてrootで作業します。ホスト名はsalt.cs3d0idcfcloud.internal
です。
$ apt-get update && apt-get install -y git $ git config --global user.name "Masato Shimizu" $ git config --global user.email "ma6ato@gmail.com" $ git config --global push.default simple
salt-configure のテンプレートをgit clone
します。
$ git clone --recursive git@github.com:masato/salt-config.git /srv/salt/config $ cd /srv/salt/config
作業ユーザーを作成します。ssh_auth
は公開鍵を設定します。
$ cd /srv/salt/config/pillar/users $ cp init.sls.sample init.sls $ vi init.sls users: mshimizu: fullname: Masato Shimizu password: xxx sudouser: True sudo_rules: - ALL=(ALL) NOPASSWD:ALL groups: - docker ssh_auth: - ssh-rsa AAAAB3Nzxxx
SLSや設定ファイルをコピーします。Salt Formulaはusers-formula を使うため、GitHubのリポジトリをサブモジュールにしています。
$ mkdir -p /etc/salt/master.d $ cp /srv/salt/config/etc/salt/master.d/master.conf /etc/salt/master.d $ cat /etc/salt/master.d/master.conf pillar_roots: base: - /srv/salt/config/pillar file_roots: base: - /srv/salt/config/salt - /srv/salt/config/formulas/users-formula
salt-masterをインストールする仮想マシンにはsalt-minioもインストールします。Grainにsalt-minionのroleを定義します。
$ mkdir -p /etc/salt/minion.d $ cat <<EOF > /etc/salt/minion.d/grains.conf grains: roles: - salt-master EOF
salt-masterをbootstrapからインストールします。salt-minionサービスも起動します。
$ curl -L http://bootstrap.saltstack.com | sh -s -- -M $ service salt-minion start
Saltは2014.7.0 (Helium)がインストールされました。
$ salt --version salt 2014.7.0 (Helium)
salt-minionのインストール salt-minionの仮想マシンにログインしてrootで作業します。Grainにsalt-minionのroleを定義します。ホスト名はminion1.cs3d0idcfcloud.internal
です。
$ mkdir -p /etc/salt/minion.d $ cat <<EOF > /etc/salt/minion.d/grains.conf grains: roles: - dev EOF
salt-minionをbootstrapからインストールしてサービスを起動します。
$ curl -L https://bootstrap.saltstack.com | sh $ service salt-minion start
salt-keyで公開鍵の認証 salt-masterの仮想マシンにログインします。salt-keyコマンドを使い接続要求を出しているsalt-minionの公開鍵を承認します。
$ salt-key -A The following keys are going to be accepted: Unaccepted Keys: minion1.cs3d0idcfcloud.internal salt.cs3d0idcfcloud.internal Proceed? [n/Y] Y Key for minion minion1.cs3d0idcfcloud.internal accepted. Key for minion salt.cs3d0idcfcloud.internal accepted.
state.highstate state.highstateを実行して、すべてのSLSをsalt-minionに適応します。
$ salt '*' state.highstate
確認 SaltでインストールしたDockerのバージョンを確認します。Dockerは1.4.1、Goは1.3.3がインストールされました。
$ salt '*' cmd.run 'docker version' salt.cs3d0idcfcloud.internal: Client version: 1.4.1 Client API version: 1.16 Go version (client): go1.3.3 Git commit (client): 5bc2ff8 OS/Arch (client): linux/amd64 Server version: 1.4.1 Server API version: 1.16 Go version (server): go1.3.3 Git commit (server): 5bc2ff8 minion1.cs3d0idcfcloud.internal: Client version: 1.4.1 Client API version: 1.16 Go version (client): go1.3.3 Git commit (client): 5bc2ff8 OS/Arch (client): linux/amd64 Server version: 1.4.1 Server API version: 1.16 Go version (server): go1.3.3 Git commit (server): 5bc2ff8