RancherOS で ECS Cluster を構築してみた

Amazon ECS

はじめに

プロダクショングレードのコンテナ管理プラットフォームである RANCHER を開発している RANCHER LABS の存在について、最近知りました。同様に RancherOS が開発されていることを知り、調べていると Amazon ECS で利用出来る AMI が公開されていたため、RancherOS で ECS Cluster を構築してみました。

RancherOS とは

Kubernetes と Docker Swarm の両方をサポートするコンテナ管理プラットホームとして Rancher Labs が開発している OSS の コンテナ特化型 Linux ディストリビューションです。思想自体は、CoreOS に通じるものがあります。

前提条件

本検証に利用した筆者の環境は、以下のとおりです。

 ~ $ sw_vers 
ProductName:    Mac OS X
ProductVersion: 10.12.6
BuildVersion:   16G29
 ~ $ docker version
Client:
 Version:      17.06.0-ce
 API version:  1.30
 Go version:   go1.8.3
 Git commit:   02c1d87
 Built:        Fri Jun 23 21:31:53 2017
 OS/Arch:      darwin/amd64

Server:
 Version:      17.06.0-ce
 API version:  1.30 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   02c1d87
 Built:        Fri Jun 23 21:51:55 2017
 OS/Arch:      linux/amd64
 Experimental: true
 ~ $ aws --version
aws-cli/1.11.110 Python/2.7.10 Darwin/16.7.0 botocore/1.5.73
 ~ $ ecs-cli --version
ecs-cli version 0.6.2 (2803fa1)

AWS CLI および ECS CLI をインストールする

以下の手順は、筆者の環境(macOS)に合わせたインストール方法です。

$ curl -O https://bootstrap.pypa.io/get-pip.py
$ python3 get-pip.py --user
$ pip3 install --user --upgrade awscli
$ sudo curl -o /usr/local/bin/ecs-cli https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-darwin-amd64-latest
$ sudo chmod +x /usr/local/bin/ecs-cli

各 CLI のインストール方法に関する詳細については、以下の公式ドキュメントをご参照ください。

ECS クラスターを作成する

以下のコマンドラインを実行し、ECS インスタンスが起動してくるまで待ちましょう。 --keypair オプションの引数には、適切なキーペア名を指定してください。

$ ecs-cli configure --region ap-northeast-1 --profile default --cluster rancher-cluster
INFO[0000] Saved ECS CLI configuration for cluster (rancher-cluster) 
$ ecs-cli up --keypair `hostname` --capability-iam --size 2 --instance-type t2.small --image-id ami-32b1a755

各リージョンで利用可能なその他の AMI ID については、以下を参照してください。

ECS クラスターが構成出来ましたが、何故か default クラスターに ECS インスタンスが登録されており rancher-cluster は空の模様。 RancherOS の AMI に、/etc/ecs ディレクトリが無いため ecs.config ファイルが作成されなかったことが原因の模様。(ECS クラスター名を、default にしておけばよかった)

Amazon EC2 Container Service

本題ではないので、気にせず先に進めます。

RancherOS に SSH 接続してみる

ECS インスタンスの IP アドレスを確認し、SSH 接続してみたいと思います。 セキュリティグループで TCP/22 のインバウンドを許可してあげてください。

なお、RancherOS のデフォルトユーザ名は rancher です。

 ~ $ ssh -i key rancher@<ip-of-ec2-instance>
...
$ docker ps
CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS              PORTS                                    NAMES
7dad4eb3986b        amazon/amazon-ecs-agent   "/agent"            2 minutes ago       Up 2 minutes        127.0.0.1:51678-51679->51678-51679/tcp   ecs-agent
$ cat /etc/os-release 
NAME="RancherOS"
VERSION=v1.0.3
ID=rancheros
ID_LIKE=
VERSION_ID=v1.0.3
PRETTY_NAME="RancherOS v1.0.3"
HOME_URL="http://rancher.com/rancher-os/"
SUPPORT_URL="https://forums.rancher.com/c/rancher-os"
BUG_REPORT_URL="https://github.com/rancher/os/issues"
BUILD_ID=
$ 

ECS Agent も起動しているようです。

コンテナをデプロイしてみる

nginx コンテナを起動してみます。docker-compose.yml を用意しましょう。 本検証で利用した docker-compose.yml は、以下のとおりです。

version: '2'

services:
  nginx:
    image: nginx
    expose:
      - 80
    ports:
      - "80:80"

ECS クラスター名 default に ECS インスタンスが登録されているため、default クラスターに変更した上でデプロイします。

 ~/local/ecs $ ecs-cli configure --cluster default
INFO[0000] Saved ECS CLI configuration for cluster (default) 
 ~/local/ecs $ ecs-cli compose up
...
 ~/local/ecs $ ecs-cli ps
Name                                        State    Ports                      TaskDefinition
1758f4cd-23b0-4772-b9ea-a67c3d11013b/nginx  RUNNING  <ECS インスタンスIP>:80->80/tcp  ecscompose-ecs:1

ブラウザから nginx のウェルカムページが表示されればデプロイ完了です。

ECS CLI の利用方法については、以下のチュートリアルが参考になると思います。

さいごに

RancherOS を利用して ECS クラスターが構築できました。 コンテナ特化型 Linux ディストリビューションは、ミニマリズムの追求であることが多いように感じます。 RancherOS の概要については、下記のドキュメントに記載がありますので興味があればご一読ください。 RancherOS は、System Container と User Level Container に分離されていますが全てがコンテナとして起動している点が LinuxKit に似ているなと思いました。

ではでは

AWS Cloud Roadshow 2017 福岡