NETFLIXのSpinnakerをさわってみた備忘禄
マルチクラウドのインフラアプリデリバリの自動化と管理ツールがNETFLIXから11/17にオープンソースで公開されたのでさわって見た。
NETFLIXがGoogle,Microsoft,Pivotalと共同開発したそうです。
名前は「Spinnaker」(スピネーカー)、意味は"三角形の帆"ですが由来は不明です。
- NETFLIXブログ
Netflix、マルチクラウド対応の継続的デリバリを実現する「Spinnaker」をオープンソースで公開 - Publickey
- Pivotalブログ
Cloud Native Continuous Delivery With Netflix Spinnaker | Pivotal P.O.V.
- 本家
The Netflix Tech Blog: Global Continuous Delivery with Spinnaker
Spinnaker: Global Continuous Delivery
- git
GCPのインスタンスに入れてみる
GCPのSDKまわりの設定をしておく
・CloudSDKの認証
Cloud SDK>gcloud auth login
・projectidセット
Cloud SDK>gcloud config set project xxxxx-xxxxxxx-xxx
・確認
Cloud SDK>gcloud config list project [core] project = xxxxx-xxxxxxx-xxx
インスタンス作成
"spinnaker-test"という名前でインスタンスを作ります。マシンタイプは適当に。
Cloud SDK>gcloud compute instances create spinnaker-test --image ubuntu-14-04 --machine-type n1-standard-2 --scopes compute-rw Created [https://www.googleapis.com/compute/v1/projects/xxxx-xxx-xxxxxx/zones/asia-east1-a/instances/spinnaker-test]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS spinnaker-test asia-east1-a n1-standard-2 xx.xx.xx.xx yy.yy.yy.yy RUNNING
"Spinnaker"テスト済OSは以下ということで、Ubuntuにしました。GCPには14.04 LTSがあるのでそれで。
Ubuntu 14.04 LTS
Mac OS X 10.11
サーバーログイン
作ったサーバーにログイン。
手っ取り早く以下のコマンドでログインする。
Cloud SDK>gcloud compute ssh spinnaker-test
GCPのGUIからでもターミナルからでもログインはOK牧場。
Spinnakerインストール
インストールシェルが用意されてるのでcurlで叩き、Cloud(今回google)とかRegion(今回asia-east1)とかを入力する。
Cassandra,Redis,Gradleなどがパッケージされてるようです。
ore@spinnaker-test:~$ sudo su - root@spinnaker-test:~# bash <(curl --silent https://spinnaker.bintray.com/scripts/InstallSpinnaker.sh) Determined that you are running on google infrastructure. Specify a cloud provider (aws|google|none|both): google Specify default google region: asia-east1 Specify default google zone: asia-east1-a gpg: keyring `/tmp/tmpvn7suf44/secring.gpg' created gpg: keyring `/tmp/tmpvn7suf44/pubring.gpg' created gpg: requesting key C7917B12 from hkp server keyserver.ubuntu.com gpg: /tmp/tmpvn7suf44/trustdb.gpg: trustdb created gpg: key C7917B12: public key "Launchpad chrislea" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) : : : Setting up spinnaker-igor (1.4.0-3) ... Setting up spinnaker-orca (1.21.0-3) ... Setting up spinnaker-rosco (0.12.0-3) ... Setting up spinnaker-rush (1.21.0-3) ... Setting up ssl-cert (1.0.33) ... Processing triggers for ureadahead (0.100.0-16) ... Processing triggers for ufw (0.34~rc-0ubuntu2) ... Setting up spinnaker-deck (2.435.0-3) ... Setting up spinnaker (0.11.0-3) ... Rewriting deck settings in "/var/www/settings.js". * Restarting web server apache2 [ OK ] Processing triggers for libc-bin (2.19-0ubuntu6.6) ... spinnaker start/running To stop all spinnaker subsystems: sudo stop spinnaker To start all spinnaker subsystems: sudo start spinnaker To modify the available cloud providers: Edit: /etc/default/spinnaker And/Or: /opt/spinnaker/config/spinnaker-local.yml Then restart clouddriver and rosco with: sudo service clouddriver restart sudo service rosco restart
conf類はこの辺です。
root@spinnaker-test:/opt/spinnaker# ls bin cassandra config install pylib scripts
Spinnakerの停止、起動、確認
root@spinnaker-test:~# stop spinnaker spinnaker stop/waiting root@spinnaker-test:~# status spinnaker spinnaker stop/waiting root@spinnaker-test:~# start spinnaker spinnaker start/running root@spinnaker-test:~# status spinnaker spinnaker start/running
ポートフォワード
SpinnakerはGCPの場合localhostの9000番で起動するようです。 ですので自端末からはポートフォワードして繋ぎます。ポートフォワードはどのやり方でもいいのですがgcloud使ってみました。 --ssh-flagでsshのオプションを渡すのですが、Windowsからgcloudコマンドでやる場合は以下のようにsshに渡すオプションを細かく切ってあげないとエラーする。
エラー
Cloud SDK>gcloud compute ssh spinnaker-test --ssh-flag="-L 8084:localhost:8084" --ssh-flag="-L 9000:localhost:9000" --ssh-flag="-L 8087:localhost:8087" ssh: unknown option "-L 8084:localhost:8084" ssh: unknown option "-L 9000:localhost:9000" ssh: unknown option "-L 8087:localhost:8087"
OK
Cloud SDK>gcloud compute ssh spinnaker-test --ssh-flag="-L" --ssh-flag="8084:localhost:8084" --ssh-flag="-L" --ssh-flag=" 9000:localhost:9000" --ssh-flag="-L" --ssh-flag="8087:localhost:8087"
ブラウザ表示
トップページはこんな感じ。まだ何もない。ちなみにFirefox、IEではなぜか開かないのでChromeで!
公式ガイドにある"Getting Start"してみる
Bake & Deployでイメージからサーバー立ててLBに配置する。
Create Application
右上のActionから"CreateApplication"し、必要な項目を画面のように入れCreateする。
Createされた。
Create Security Group
"Security Group"タブをクリックして、右上の"Create Security Group"をクリックし、必要な項目を画面のように入れNext。
ここでは、ソースはAny(0.0.0.0/0)からポートは80番ポートでCreateする。
Createされた。
Create Loadbalancer
"LOAD BALANCERS"タブをクリックして、右上の"Create Loadbalancer"をクリックし、画面の項目を入力する。
項目を入れて行く。
Createされた。
GCP側から見ても出来てる。
Create a deployment pipeline
PIPELINESタブいって、右上の"Configure"して"Create New"をクリック。
Typeを"Pipeline"
Pipeline Nameを"Bake & Deploy To Test"として"Create"
Createされた。
"Add Stage"をクリックし、TypeをBakeを選ぶ。
※Bake:Bakes an image in the specified region
Packageに"redis-server"と入力 ※Redisではないけど;
"Save Change"をクリック。
このStageのTypeでJenkinsのジョブ実行したり、Canary的なテストをしたり、Script実行したりとできるぽいです。
"Add Stage"をクリックし2つめのステージをAdd
Typeに"Deploy"を選択。
"Add Server Group"をクリック。
Template selectionで"Continue without a template"をクリック。
アカウント、リージョン、ゾーン、名前(Stack)を入力する。
※キャプチャではゾーン入れてないですが入れてないとこけました。
作ったLoadBalancerを選ぶ。
作ったSecurityGroupを選ぶ。
マシンタイプと台数を選ぶ。
"save change"する。
実行してみる
"Bake & Deploy To Test"の右端の"Start Manual Execution"をクリックする。
"Run"
実行される。
デプロイ正常終了。
LB配下にサーバーが作られてますね。GCP側からも確認できます。
80番でリッスンしてないので赤ですが
git連携とかやってないんであれですが、、近々やったら更新します。
使えそうなAPI
curl -X POST localhost:7002/config-refresh
curl localhost:7002/credentials
curl localhost:8084/securityGroups
AWSもやるべ
ほとんどは以下の"AWS Setup"の手順通りでいけると思います。
VPC、subnet作成。 (例、defaultvpc、defaultvpc.internal.ap-northeast-1a) IAM作成 キーペア作成し/home/spinnaker/.aws/credentialsに chmod 400 で配置 ユーザー作成とそのCredentials(アクセスキーとシークレットキーのやつ)をSpinnakerサーバーの/home/spinnaker/.aws/credentialsに配置
細かい点はオフィシャルの手順を確認してもらえたらと。
手順にない部分で数点
/etc/default/spinnaker
以下ファイルでAWS有効にしたり、デフォルトのリージョン入れる
# Spinnaker system defaults ## Amazon # If you plan on using Amazon AWS set this to true SPINNAKER_AWS_ENABLED=true #SPINNAKER_AWS_ENABLED=false # Default region you desire to operate in SPINNAKER_AWS_DEFAULT_REGION=ap-northeast-1
subnetの命名規則
命名規則に沿ってないとsubnetとが出て来ません。こんな感じで↓
命名規則がこれです。 {purpose}.{vpcName}.{availabilityZone}
clouddriver/AmazonSubnetProvider.groovy at master · spinnaker/clouddriver · GitHub
じゃあpurposeってなんだってなるのですが、以下のように調べられます。
root@spinnaker-test:/opt/spinnaker/config# curl localhost:8084/subnets [{"id":"subnet-xxxxxx","state":"available","vpcId":"vpc-xxxxxxx","cidrBlock":"10.101.1.0/24","availableIpAddressCount":250,"account":"my-aws-account","region":"ap-northeast-1","availabilityZone":"ap-northeast-1a","purpose":"internal (defaultvpc)",
なのでsubnet名は以下のようになります
internal.defaultvpc.ap-northeast-1a
それでもsubnetが出ない
UIのリフレッシュが必要なようです。
画面のようにApplicationの"config"タブをクリックし、画面下部にある"Refresh all caches"をクリックします。
そしたらプルダウンで出てくるようになりました;
GCPと同じ感じでデプロイしてみる
ELB作成
SecurityGroup作成
あとは全て同じ流れとなります(・∀・)