Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: azureテンプレート実装 #50

Merged
merged 10 commits into from
Sep 28, 2016
Merged

WIP: azureテンプレート実装 #50

merged 10 commits into from
Sep 28, 2016

Conversation

matsuu
Copy link
Collaborator

@matsuu matsuu commented Sep 21, 2016

取り急ぎansibleを走らせるazureテンプレートを作成してみました。
privateリポジトリから取得するため、ansible/playbook/files/home/isucon/.ssh/id_rsaの中身を
プロビジョニング用バッチ(customData)内に埋め込んでいます。

@matsuu matsuu changed the title Add azure template WIP: azureテンプレート実装 Sep 21, 2016
@edvakf
Copy link
Contributor

edvakf commented Sep 21, 2016

本戦は複数台構成なので、2台用意して1台だけグローバルIPを持っている構成にできますでしょうか。デーモンはグローバルIPを持っているやつだけで良いですが、dockerぐらいは全台に入れたいです。

@matsuu
Copy link
Collaborator Author

matsuu commented Sep 21, 2016

了解です。サーバ名ありますかね。

  • グローバルIPを持つサーバ app? api?
  • グローバルIPを持たないサーバ app? db? mysql?

それぞれに対応するansibleのinventory_fileもあれば合わせて教えていただきたく。

@matsuu
Copy link
Collaborator Author

matsuu commented Sep 21, 2016

サーバ構成確認しておきたいです。IPアドレスなどは仮なので希望があれば調整します。

サーバ名 スペック 用途 ミドルウェア publicIP privateIP ポート開放 備考
react DS2_v2 frontend docker(nodejs) あり 10.6.1.4 22,443
backend DS2_v2 backend docker(webappとdb) なし 10.6.1.5 22,443(80?) reactからsshできるようにssh鍵周り調整

@edvakf
Copy link
Contributor

edvakf commented Sep 21, 2016

例年通り最初は1台のサーバーでReactもAPIもMySQLも全部動いている状態にして、それ以外のサーバーはdockerがインストールぐらいの真っさらなままにしたいです。

なのでisu01, isu02という名前でisu01だけグローバルIPありにしてください。

* サーバを2台構成に
* IPアドレスは片方のサーバにだけ付与
* サーバ間でアクセス制限をしないためにnetworkSecurityGroupをsubnetに付け替え
* 開放するポートをhttpからhttpsに変更
@matsuu
Copy link
Collaborator Author

matsuu commented Sep 21, 2016

2台構成にしてみました。
ansibleを走らせたところ、docker : install dockerで失敗するようで調査中。

@edvakf
Copy link
Contributor

edvakf commented Sep 21, 2016

1台目以外にdocker入れておくの親切すぎますかね?ユーザー作るぐらいでも良いという考え方もありですが。

そういえば去年のISUCONではグローバルIPは1台だけでしたっけ?sshは1台目を踏み台にしていたのだろうか。。

@matsuu
Copy link
Collaborator Author

matsuu commented Sep 21, 2016

去年の状況は去年本選に出場できなかったのでわからず 😭

@edvakf
Copy link
Contributor

edvakf commented Sep 21, 2016

やはりdockerはisu01だけ(他のサーバーはisuconユーザーがいてauthorized_keysが置かれてる状態)、sshはisu01を踏み台にしてね、ということでいい気がしてきました。

どう思いますか?

@matsuu
Copy link
Collaborator Author

matsuu commented Sep 21, 2016

賛成:+1:

@edvakf
Copy link
Contributor

edvakf commented Sep 21, 2016

じゃそれで

@edvakf
Copy link
Contributor

edvakf commented Sep 21, 2016

#!/bin/sh

set -e

export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y ansible git

cd /mnt
cat > .id_rsa <<EOF
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEApYYNairj4va7CiY2pEe3n/uzspiivADfhqDukClVrtO9XAcK
EyaUQYR9yJTEMwA7dx5T9Z+hcUUfONqySdsLF64Bwb39eTDoWmoTAF2ZraNrmxRj
fhJRypo33w8ZxRe0BCnQGMoSNMkNr1eReL7Gi/yoDHdR3X+LHbMMbwl8h2gLc+Kn
bLGb9GZ3flkJAEgGgGnKZPfPGBa005c7gPez79MRDqsl4az9a4fz4QlrKJIIhYPY
JOP73EgoYpHsFqWWM6TAG9uujbsfm1L/bXb3oytIwhlfh1ls2C6et/Su6FaboBzs
eHTeY/c7b2GfnkQX1j290rEbMLiWeC23RekdxwIDAQABAoIBAB4VQgTkrKxIWXAb
x9yNqELsVRmFgjYXFoj6YMFUsdznYMgEA4G9hj5uHQpCd3IpfaVFns7KZ2YVwPnt
TW/83oQ8PNeAdzv6dpBQLQno+RBE3j6+MuLr42+mHbdtoCphB3emPcrzluF/FPyk
Nq0yRxWUItq5KOjP0HHiY8UefUKCjHVXpltjmG4MJGjd6Ne3Ny1zPrT7Lx3Y8wmh
rKRCp2gfdkfzjGwfa+c2h6c/DSdeoL/RhG5UWhS2GxQwLFalHvp7vgAQbC4RVuEU
KOpk//TlO1wfGTQ+p8mURcc3NTA2O5I1kBtAvCkq0pm5MF+savWpTgo4RdG4iGyN
nl3MOYECgYEA2m2dOOBnUyr+1WmYrQISbuqr47Tf/7/fUia3Wt8vQptOVpg46Tda
mKD9qSTXFbCroF0a7fpjoNppj7s3gcMM9MP5WeXZ2Q6X6Zi4iooJ4GsjpPp5McLZ
/pjPkD0bnUeqvitVO7IIlI1hC8KDakBhrflxkkX8blLwKIqZbALlicECgYEAwf7P
l/azpUcVAVYwn0X466Dzsa6RwfQ1j6AoMdU68RD4OL7AYGSwUQEUV7i4nKSskT4M
Goyp0+GP2fa979flSCRzcXoxzO6WdMgOaPgwn8O1BCVH/LE4yIiTBLCwAlDWmOgF
brBadkmNOo9y76WyNpRA/VQ3VCp7oftKbNiRuYcCgYApwgTpp7T5KGIZiJuAj8HY
ZJLB8IVWTmcyPGaXP824LRq34VgX9dYjEbwMxxc7dVAKU2JflpvPV5IQwVjmPNTQ
Qlr8Pb39ChYuuVymV6d1uOXSl3Pt+HNWgf5Ec/pAgj/5JS2hQPL0+2ZPKjuXZ4GF
EggNT8XnjYGOLpkQFimtwQKBgHOBcT8s74ewDAywseCTfANn4NFhfH28Fwv+MxCA
wkh4byLySH7cVLLWbrNQU/NIhUsxY2mHaTKz8b+4jxy4MldDBM2DERXQ1RqRZysO
43ysvSHLxNHq/0E/ODIptZKbaTq/o0Rlkmctof5FHQ0dXj/rA8sSEqN1bAllIsou
JI4PAoGBAJZwkW/GsjNtoFVCdM9mRO62sCzlIQ6eD9LoKkkxrjEsiRDm5BuRpvFN
UbY86uSiA9sfjz+vGdl9eY3CD8015dwJYMxfESS2Lk8B0SWBKKtEidRaU4mmBZLm
R8eK652MXH1032j60S3Bn6E+kTQphAoywqmKD22Yd/eQN0PpsxLu
-----END RSA PRIVATE KEY-----
EOF
chmod go-rwx .id_rsa
GIT_SSH_COMMAND="ssh -i .id_rsa -oStrictHostKeyChecking=no" git clone git@github.com:catatsuy/isucon6-final.git
rm .id_rsa
(
  cd isucon6-final/ansible
  PYTHONUNBUFFERED=1 ANSIBLE_FORCE_COLOR=true ansible-playbook -i development -c local playbook/setup.yml
)
rm -rf isucon6-final
reboot

なるほど。あとでうまい方法考えたいですね。むしろ今後一般公開するときはこういう感じでhttpsでgit cloneするように変えればよさそう。

rebootはハマりそうです。

@matsuu
Copy link
Collaborator Author

matsuu commented Sep 22, 2016

rebootは予選のときにそうなってたので合わせた次第。必須ではないです。
githubのアクセストークンを用意すれば鍵なしでもいけますね。
https://help.github.com/articles/creating-an-access-token-for-command-line-use/

@matsuu
Copy link
Collaborator Author

matsuu commented Sep 22, 2016

wikiにサーバー構成をまとめました

@edvakf
Copy link
Contributor

edvakf commented Sep 22, 2016

Gitへのアクセス権を与えてしまうとベンチマーカーやコミットログも晒してしまうことになるので、やはり予選と同じようにAzure Blobに上げるのが良い気がしますね。

@matsuu
Copy link
Collaborator Author

matsuu commented Sep 22, 2016

CIで回してblobにアップロードするようにしますか。
アップロード先となるazureアカウントとか既にありますかね?

@edvakf
Copy link
Contributor

edvakf commented Sep 23, 2016

@matsuu 招待いたしますのでAzureアカウントのメールアドレスを教えてください。

@matsuu
Copy link
Collaborator Author

matsuu commented Sep 23, 2016

@edvakf matsuu@gmail.com でお願いしたく

* isu02は最低限の環境のみ構築する
* 現在のansibleのbaseタグにはdockerのインストールが含まれていないので後ほど調整
* customDataを変更するたびにbase64を作成するのが手間なのでmakeで作成できるように変更
* privateIPAddressでIPアドレスを指定してもprivateIPAllocationMethodがDynamicであれば動的にIPアドレスが割り振られるので修正
@matsuu
Copy link
Collaborator Author

matsuu commented Sep 24, 2016

isu02はansibleのbaseタグのみ適用するようにしました。
ただ、現在ansibleのbaseタグはdockerをインストールするようになってないので後ほど要調整。

* azuredeploy.jsonはmakeで生成されるので冗長管理を回避するためリポジトリから削除
* /mntに展開した場合、マウントオプションにより権限周りが通常と異なる場合があるようなので/tmpに変更
@matsuu
Copy link
Collaborator Author

matsuu commented Sep 25, 2016

ansibleのdocker installに失敗する問題、これと同じでした。cloud-init経由でdockerをインストールしようとすると死ぬ。
moby/moby#23793
customDataでインストールするのは諦めてextension経由でansibleを実行することにする。

* customDataでプロビジョニングをするとdockerのインストールに失敗するためExtensionを用いてインストール
* ansibleはストレージアカウントに設置したtarballをダウンロードするように変更
@matsuu
Copy link
Collaborator Author

matsuu commented Sep 27, 2016

Extensionを使ってDockerのインストールとansibleをデプロイするように変更しました

@edvakf
Copy link
Contributor

edvakf commented Sep 27, 2016

https://azure.microsoft.com/ja-jp/documentation/articles/virtual-machines-linux-dockerextension/
https://github.com/Azure/azure-docker-extension/

Docker VM extension can:

  • Install latest stable version of Docker Engine on your Linux VM
  • If provided, configures Docker daemon to listen on specified port, with given certs
  • Launches a set of containers using docker-compose (intended for running a static set of containers for monitoring, security etc.)

元々はdocker-composeの設定まで含めてAzureテンプレートを書けるようにするためのものみたいですね。

@matsuu
Copy link
Collaborator Author

matsuu commented Sep 28, 2016

Docker VM extensionでdocker-composeまで面倒見るとisu02の起動はどうすると言った問題になりそうなので、そこまで手を入れてませんでした。あくまでdocker(とdocker-compose)のインストールのみに現状とどめています。

@matsuu
Copy link
Collaborator Author

matsuu commented Sep 28, 2016

このテンプレートでインストールすると、ansibleで/home/isucon/.ssh/を削除する手順があるためisuconユーザでssh接続できなくなる。customDataによるインストールの場合はansibleが実行されたあとにazureによってSSH公開鍵が設置されたので問題なかった模様。ansible側をまず調整する。

@matsuu matsuu merged commit 8738c3c into isucon:master Sep 28, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants