2016年4月22日金曜日

【Microsoft Azure】Azure Container Service がGAしたので改めてやってみる

試してみたらすぐにGA(一般供用開始)しましたね、ACS。
https://azure.microsoft.com/ja-jp/services/container-service/

ということで、ARMテンプレートを変更しなくても良くなったので、再度手順を確認しましょう。

ポータルからさくっと作れますので、スクリーンショットを交えて。
まずは「NEW」→「Containers」→「Azure Container Service」と選択。
















文章を下の「Create」をどうぞ。



















Dockerホスト(Ubuntu 14.04.4 LTSです!)のユーザー名、ログインのためのRSA公開鍵、サブスクリプション、リソース、ロケーションを入力して「OK」















オーケストレーションツールを「DC/OS(Mesos)」と「Swarm」から選んで「OK」
※今回はSwarmを選択してみた
















ACSの設定です。
エージェント数(コンテナホストのVM数ですね)、エージェントの仮想マシンのサイズ(デフォルトはStandard_D2)、マスターの数(冗長構成なら3以上)、DNSプレフィックスを入力して「OK」
















内容を確認して「OK」












料金などの注意事項を読んでから「Create」でACS構築開始












とにかく待つ


















できあがる










「Resource Groups」からリソースを選び、デプロイ履歴を確認。
「Outputs」の中に、MASTERFQDN、SSHMASTER0(ssh接続時のコマンド)、AGENTFQDN(実際のWebアプリのURI)があるので確認。

















SSHでつないで、dockerコマンドでプロセスを見る。
$ ssh xxx@xxxmgmt.japaneast.cloudapp.azure.com -A -p 2200
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.19.0-58-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Fri Apr 22 04:20:31 UTC 2016

  System load:  0.43              Processes:              138
  Usage of /:   5.7% of 28.80GB   Users logged in:        0
  Memory usage: 3%                IP address for eth0:    172.16.0.5
  Swap usage:   0%                IP address for docker0: 172.17.0.1

  Graph this data and manage this system at:
    https://landscape.canonical.com/

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud


$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                                                                                NAMES
0d9a7203292a        yeasy/simple-web    "/bin/sh -c 'python i"   26 seconds ago      Up 24 seconds       0.0.0.0:32771->80/tcp                                                                                                                xxx_web_1
822c18291112        swarm:1.1.0         "/swarm manage --repl"   11 minutes ago      Up 9 minutes        0.0.0.0:2375->2375/tcp                                                                                                               containers_swarm_1
618799d9ffee        progrium/consul     "/bin/start -server -"   11 minutes ago      Up 9 minutes        0.0.0.0:8300-8302->8300-8302/tcp, 0.0.0.0:8400->8400/tcp, 53/tcp, 53/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8301-8302->8301-8302/udp   containers_consul_1


以下の内容でdocker-compose.ymlを作成。
$ vi docker-compose.yml 
web:
  image: "yeasy/simple-web"
  ports:
    - "80"
  restart: "always"

docker-composeコマンドでデプロイ。そしてスケール。
$ docker-compose up -d
xxx_web_1 is up-to-date

$ docker-compose scale web=5
Creating and starting 2 ... done
Creating and starting 3 ... done
Creating and starting 4 ... done
Creating and starting 5 ... done

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                                                                                NAMES
3e30842b5e74        yeasy/simple-web    "/bin/sh -c 'python i"   6 seconds ago       Up 3 seconds        0.0.0.0:32774->80/tcp                                                                                                                xxx_web_5
96776a5764b5        yeasy/simple-web    "/bin/sh -c 'python i"   6 seconds ago       Up 3 seconds        0.0.0.0:32773->80/tcp                                                                                                                xxx_web_4
f858be340919        yeasy/simple-web    "/bin/sh -c 'python i"   6 seconds ago       Up 3 seconds        0.0.0.0:32775->80/tcp                                                                                                                xxx_web_2
57943899efc4        yeasy/simple-web    "/bin/sh -c 'python i"   6 seconds ago       Up 4 seconds        0.0.0.0:32772->80/tcp                                                                                                                xxx_web_3
0d9a7203292a        yeasy/simple-web    "/bin/sh -c 'python i"   51 seconds ago      Up 49 seconds       0.0.0.0:32771->80/tcp                                                                                                                xxx_web_1
822c18291112        swarm:1.1.0         "/swarm manage --repl"   11 minutes ago      Up 9 minutes        0.0.0.0:2375->2375/tcp                                                                                                               containers_swarm_1
618799d9ffee        progrium/consul     "/bin/start -server -"   11 minutes ago      Up 9 minutes        0.0.0.0:8300-8302->8300-8302/tcp, 0.0.0.0:8400->8400/tcp, 53/tcp, 53/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8301-8302->8301-8302/udp   containers_consul_1

気になる点は、仮想マシンのスケールセットのCapacityに変更がない(でも問題なくdockerでスケールできてる)ことでしょうか?
仮想マシンもスケールしてました。

これで気楽に(お金は気にしてねw)DockerでDevOpsに入門してねー。

追記:Webアプリに繋がらんのでちょっと調べてみなければ...


2016年4月15日金曜日

【Microsoft Azure】Azure Container Service の agent の数を増やしたい

前回の投稿で設定したDockerコンテナですが、そのままではひとつ難点があります。
スケールする場合のエージェントの数が増やせないのです。

仮想マシンのスケールセット(以下VMSS)を利用しているので、本来であればポータルから変更したいところですが、今はまだできません。
VMSSについてはこちら。
https://azure.microsoft.com/ja-jp/documentation/articles/virtual-machine-scale-sets-windows-create/

見てる限りでは、VMSSのcapacityを変更できれば、Docker側から設定した数を上限にスケールできそうです。
今回はこれを変更するために、Azure Resource Explorer を使います。
https://resources.azure.com/

まずAzure Resource Explorerに、ポータルにログインしているブラウザでアクセスします。
このときに、右上の「Read/Write」をクリックして読み書き可能にする必要があります。







次は、左ペインのメニューを、
subscription→ACSのサブスクリプション→resourceGroups→ACSのリソース→Microsoft.Compute→virtualMachineScaleSets→該当するScaleSet
の順に選択します。

ScaleSetのリソースは、こんな感じで表示されます。
















「EDIT」をクリックして、「sku」の中の「capacity」を1から3に変更します。
変更したら「PUT」を押します。
















capacityが3に変更されました。
















ポータルで見てみましょう。
「仮想マシンのスケールセット」を探してみましょう。
こんな風に3に変わっていると思います。










容量(capacity)が3になったので、docker-compose でスケールしてみましょう。
azureuser@xxx:~$  docker-compose scale web=3
Creating and starting 2 ... done
Creating and starting 3 ... done
azureuser@xxx:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                                                                                NAMES
242e38975a34        yeasy/simple-web    "/bin/sh -c 'python i"   5 seconds ago       Up 4 seconds        0.0.0.0:32770->80/tcp                                                                                                                azureuser_web_3
e27e1035774c        yeasy/simple-web    "/bin/sh -c 'python i"   5 seconds ago       Up 4 seconds        0.0.0.0:32769->80/tcp                                                                                                                azureuser_web_2
ae8a0ea43b50        yeasy/simple-web    "/bin/sh -c 'python i"   45 minutes ago      Up 45 minutes       0.0.0.0:32768->80/tcp                                                                                                                azureuser_web_1
5a161555c072        swarm:1.1.0         "/swarm manage --repl"   About an hour ago   Up About an hour    0.0.0.0:2375->2375/tcp                                                                                                               containers_swarm_1
058236a13875        progrium/consul     "/bin/start -server -"   About an hour ago   Up About an hour    0.0.0.0:8300-8302->8300-8302/tcp, 0.0.0.0:8400->8400/tcp, 53/tcp, 53/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8301-8302->8301-8302/udp   containers_consul_1

前回の記事が1だったので、無事スケールできています。




















【Microsoft Azure】Azure Container Service で Docker と向き合う

いろいろあってDockerと向き合うことになったので、Azure でやるなら Azure Container Service(以下ACS) を使ってみようと。
https://azure.microsoft.com/ja-jp/services/container-service/

Apache Mesos または Docker Swarm のどちらかのオーケストレーションツールを使ってDockerコンテナを管理するっていうので、今回はDockerSwarmを選択。

構成などについては、こちらのドキュメントをまずは読んでください。
https://github.com/Azure/azure-quickstart-templates/blob/master/101-acs-swarm/docs/SwarmWalkthrough.md

ACSは、ポータルの「テンプレートからデプロイ」でARMテンプレートを使ってデプロイします。












こちらから「テンプレートのデプロイ」を選択します。



















ACSのテンプレートはgithubで公開されています。
https://github.com/Azure/azure-quickstart-templates/tree/master/101-acs-swarm (これはDockerSwarmのもの)

実際に使うARMテンプレートはこちら。これを
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-acs-swarm/azuredeploy.json

「テンプレートの編集」を選んで















ACSのARMテンプレートを貼り付けて保存します。













次に、パラメーターをセットします。
とりあえず、DNSNAMEPREFIX(FQDNにつける識別用プレフィックス)とSSHRSAPUBLICKEY(SSHでアクセスする際のRSA公開鍵)を入力して「OK」を押します。

















リソースグループを選ぶなり作成するなりして、リージョンを決めます。
最後に、法律条項を確認して作成します。















デプロイが終わると、以下の2つのFQDNが決定します。

masterFQDN:{DNSNAMEPREFIX}mgmt.japaneast.cloudapp.azure.com
agentFQDN:  {DNSNAMEPREFIX}agents.japaneast.cloudapp.azure.com

masterへのssh接続は、以下のようにします。公開鍵が登録されているので、秘密鍵のパスフレーズでログイン出来ます。

$ ssh azureuser@{DNSNAMEPREFIX}mgmt.japaneast.cloudapp.azure.com -A -p 2200

Are you sure you want to continue connecting (yes/no)? yes
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.19.0-58-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Fri Apr 15 08:28:32 UTC 2016

  System load: 0.15              Memory usage: 1%   Processes:       98
  Usage of /:  5.7% of 28.80GB   Swap usage:   0%   Users logged in: 0

  Graph this data and manage this system at:
    https://landscape.canonical.com/

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

azureuser@xxx:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                                                                                NAMES
5a161555c072        swarm:1.1.0         "/swarm manage --repl"   10 minutes ago      Up 8 minutes        0.0.0.0:2375->2375/tcp                                                                                                               containers_swarm_1
058236a13875        progrium/consul     "/bin/start -server -"   10 minutes ago      Up 8 minutes        0.0.0.0:8300-8302->8300-8302/tcp, 0.0.0.0:8400->8400/tcp, 53/tcp, 53/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8301-8302->8301-8302/udp   containers_consul_1

とりあえず動いています。
ここで簡単なWebアプリコンテナを動かしてみます。
以下の内容で、docker-compose.ymlというファイルを作成します。
web:
  image: "yeasy/simple-web"
  ports:
    - "80"
  restart: "always"

それから、docker-composeコマンドでコンテナをUPします。
docker ps コマンドで確認できます。
azureuser@xxx:~$ docker-compose up -d
Pulling web (yeasy/simple-web:latest)...
latest: Pulling from yeasy/simple-web
efd26ecc9548: Pull complete
a3ed95caeb02: Pull complete
d1784d73276e: Pull complete
72e581645fc3: Pull complete
9709ddcc4d24: Pull complete
2d600f0ec235: Pull complete
de1491f1bbd4: Pull complete
4becc568d2ff: Pull complete
6aeb62f4b3fa: Pull complete
77144c15ca8f: Pull complete
811db2e8b100: Pull complete
Digest: sha256:35e52520b8f98a092af6ce10c9fdd3ca6ca77f0b79f9d652c29bdd5d17c1c7aa
Status: Downloaded newer image for yeasy/simple-web:latest
Creating azureuser_web_1
azureuser@xxx:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                                                                                NAMES
ae8a0ea43b50        yeasy/simple-web    "/bin/sh -c 'python i"   23 seconds ago      Up 22 seconds       0.0.0.0:32768->80/tcp                                                                                                                azureuser_web_1
5a161555c072        swarm:1.1.0         "/swarm manage --repl"   20 minutes ago      Up 19 minutes       0.0.0.0:2375->2375/tcp                                                                                                               containers_swarm_1
058236a13875        progrium/consul     "/bin/start -server -"   20 minutes ago      Up 19 minutes       0.0.0.0:8300-8302->8300-8302/tcp, 0.0.0.0:8400->8400/tcp, 53/tcp, 53/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8301-8302->8301-8302/udp   containers_consul_1                                                                                                             containers_swarm_1

ブラウザから「{DNSNAMEPREFIX}agents.japaneast.cloudapp.azure.com」へアクセスするとWebアプリの画面が見えます。















2016年4月8日金曜日

Microsoft Azure Web Apps で LINE BOT を動かせ

LINE BOT API のトライアル、みんな申し込んでますよね?
https://business.line.me/ja/products/4/introduction

もちろん、Azure Web Apps と PHP でやりますよ。
と思いましたが、みんなブログ書いてるので、WebApps固有のハマったポイントを。

プログラムを書くために参考にしたのは、このブログ。助かります。
http://qiita.com/srea/items/58ba0f7d870a6ee3da2a

で、まずは Server IP Whitelist に追加するIPアドレス。
Settings -> Properties の「OUTBOUND IP ADDRESSES」にあるIPアドレスを全部登録します。













もう一つは、リクエストに使うcurlの証明書エラー。こんな感じ。

SSL certificate problem: unable to get local issuer certificate

こいつは、以下のように今回は証明書の検証をしないようにします。

curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false);




2016年4月7日木曜日

Ubuntu on Windows を試す

Insider Preview 14316 で、Ubuntu on Windows が動きます。

まずは、Windowsの機能で「Windows Subsystem for Linux (Beta)」を有効にします。

一旦再起動します。

次はPowerShellで、「bash」と入力してEnter。
初回はストアから「Ubuntu on Windows」をダウンロードしてきます。
ダウンロードするとbashが使えます。

uname で見てみると、一応Linux 3.4.0 と表示されてます。



2016年4月1日金曜日

Build2016前後でOSS的に注目するMicrosoftのソリューション2点

サンフランシスコではマイクロソフトのイベント「Build 2016」やってますね。

HoloLends とか興味深いものも多いですが、OSS的な視点でマイクロソフトがここ数日発表したものの中からピックアップ。


1. Windows10でUbuntuが提供するBashが動く

多方面で取り上げられている、Ubuntu on Windows は興味深いですね。
詳しくはこちらで。

まだ動かしていないのですが、VMではない、すなわちLinuxKernelを使わずにELF形式のバイナリを動作させる環境なのでしょうかね。
以前からずっと欲しいと思ってたんですが、やっと、という感じです。
RubyやPythonのLinuxパッケージをそのまま動かすとか、なかなかいいんじゃないかと。

近いうち使ってみて投稿します。


2. DocumentDB Protocol Support for MongoDB (preview)

ポータルからプレビュー申し込みできます。詳しくはこちらで。

今まで.NET、Node.js、Java、PythonしかSDKがない(PHP SDKは私がgithubで公開している)が、これで各言語のMongoDBドライバからAzureDocumentDBに接続できます。

DocumentDBはフルマネージドなので、自前でIaaSでMongoDB立てるよりは現実的な選択肢になり得るんじゃないでしょうか。

MongoDBがもつ関数のすべてが実装されているわけではないようですが、こちらもプレビュー評価したら投稿予定です。