-
Notifications
You must be signed in to change notification settings - Fork 16
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
Conversation
本戦は複数台構成なので、2台用意して1台だけグローバルIPを持っている構成にできますでしょうか。デーモンはグローバルIPを持っているやつだけで良いですが、dockerぐらいは全台に入れたいです。 |
了解です。サーバ名ありますかね。
それぞれに対応するansibleのinventory_fileもあれば合わせて教えていただきたく。 |
サーバ構成確認しておきたいです。IPアドレスなどは仮なので希望があれば調整します。
|
例年通り最初は1台のサーバーでReactもAPIもMySQLも全部動いている状態にして、それ以外のサーバーはdockerがインストールぐらいの真っさらなままにしたいです。 なのでisu01, isu02という名前でisu01だけグローバルIPありにしてください。 |
* サーバを2台構成に * IPアドレスは片方のサーバにだけ付与 * サーバ間でアクセス制限をしないためにnetworkSecurityGroupをsubnetに付け替え
* 開放するポートをhttpからhttpsに変更
2台構成にしてみました。 |
1台目以外にdocker入れておくの親切すぎますかね?ユーザー作るぐらいでも良いという考え方もありですが。 そういえば去年のISUCONではグローバルIPは1台だけでしたっけ?sshは1台目を踏み台にしていたのだろうか。。 |
去年の状況は去年本選に出場できなかったのでわからず 😭 |
やはりdockerはisu01だけ(他のサーバーはisuconユーザーがいてauthorized_keysが置かれてる状態)、sshはisu01を踏み台にしてね、ということでいい気がしてきました。 どう思いますか? |
賛成:+1: |
じゃそれで |
#!/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はハマりそうです。 |
rebootは予選のときにそうなってたので合わせた次第。必須ではないです。 |
wikiにサーバー構成をまとめました |
Gitへのアクセス権を与えてしまうとベンチマーカーやコミットログも晒してしまうことになるので、やはり予選と同じようにAzure Blobに上げるのが良い気がしますね。 |
CIで回してblobにアップロードするようにしますか。 |
@matsuu 招待いたしますのでAzureアカウントのメールアドレスを教えてください。 |
@edvakf matsuu@gmail.com でお願いしたく |
* isu02は最低限の環境のみ構築する * 現在のansibleのbaseタグにはdockerのインストールが含まれていないので後ほど調整
* customDataを変更するたびにbase64を作成するのが手間なのでmakeで作成できるように変更
* privateIPAddressでIPアドレスを指定してもprivateIPAllocationMethodがDynamicであれば動的にIPアドレスが割り振られるので修正
isu02はansibleのbaseタグのみ適用するようにしました。 |
* azuredeploy.jsonはmakeで生成されるので冗長管理を回避するためリポジトリから削除
* /mntに展開した場合、マウントオプションにより権限周りが通常と異なる場合があるようなので/tmpに変更
ansibleのdocker installに失敗する問題、これと同じでした。cloud-init経由でdockerをインストールしようとすると死ぬ。 |
* customDataでプロビジョニングをするとdockerのインストールに失敗するためExtensionを用いてインストール * ansibleはストレージアカウントに設置したtarballをダウンロードするように変更
Extensionを使ってDockerのインストールとansibleをデプロイするように変更しました |
https://azure.microsoft.com/ja-jp/documentation/articles/virtual-machines-linux-dockerextension/
元々はdocker-composeの設定まで含めてAzureテンプレートを書けるようにするためのものみたいですね。 |
Docker VM extensionでdocker-composeまで面倒見るとisu02の起動はどうすると言った問題になりそうなので、そこまで手を入れてませんでした。あくまでdocker(とdocker-compose)のインストールのみに現状とどめています。 |
このテンプレートでインストールすると、ansibleで/home/isucon/.ssh/を削除する手順があるためisuconユーザでssh接続できなくなる。customDataによるインストールの場合はansibleが実行されたあとにazureによってSSH公開鍵が設置されたので問題なかった模様。ansible側をまず調整する。 |
取り急ぎansibleを走らせるazureテンプレートを作成してみました。
privateリポジトリから取得するため、ansible/playbook/files/home/isucon/.ssh/id_rsaの中身を
プロビジョニング用バッチ(customData)内に埋め込んでいます。