ゆるふわカウンターアタック

Qiitaっぽい時はQiitaで、slideshareっぽい時はslideshareで、preziっぽい時はpreziで、ブログっぽい時はここで

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

spinnaker · GitHub

GCPインスタンスに入れてみる

GCP素人ですがGCPでやってみるべ

GCPSDKまわりの設定をしておく

・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

GCPGUIからでもターミナルからでもログインは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"

ブラウザ表示

f:id:pioho:20151118185737p:plain

トップページはこんな感じ。まだ何もない。ちなみにFirefoxIEではなぜか開かないのでChromeで!

f:id:pioho:20151118185747p:plain

公式ガイドにある"Getting Start"してみる

Bake & Deployでイメージからサーバー立ててLBに配置する。

Create Application

右上のActionから"CreateApplication"し、必要な項目を画面のように入れCreateする。

f:id:pioho:20151118190518p:plain

Createされた。

f:id:pioho:20151118190526p:plain

Create Security Group

"Security Group"タブをクリックして、右上の"Create Security Group"をクリックし、必要な項目を画面のように入れNext。

f:id:pioho:20151118192454p:plain

ここでは、ソースはAny(0.0.0.0/0)からポートは80番ポートでCreateする。

f:id:pioho:20151118192634p:plain

Createされた。

f:id:pioho:20151118192722p:plain

Create Loadbalancer

"LOAD BALANCERS"タブをクリックして、右上の"Create Loadbalancer"をクリックし、画面の項目を入力する。

f:id:pioho:20151118192903p:plain

項目を入れて行く。

f:id:pioho:20151118193029p:plain

f:id:pioho:20151118193059p:plain

Createされた。

f:id:pioho:20151119075724p:plain

GCP側から見ても出来てる。

f:id:pioho:20151118233957p:plain

Create a deployment pipeline

PIPELINESタブいって、右上の"Configure"して"Create New"をクリック。

f:id:pioho:20151118193709p:plain

Typeを"Pipeline"

Pipeline Nameを"Bake & Deploy To Test"として"Create"

f:id:pioho:20151118193749p:plain

Createされた。

f:id:pioho:20151118193922p:plain

"Add Stage"をクリックし、TypeをBakeを選ぶ。

※Bake:Bakes an image in the specified region

Packageに"redis-server"と入力 ※Redisではないけど;

"Save Change"をクリック。

f:id:pioho:20151118194458p:plain

このStageのTypeでJenkinsのジョブ実行したり、Canary的なテストをしたり、Script実行したりとできるぽいです。

f:id:pioho:20151119002029p:plain

"Add Stage"をクリックし2つめのステージをAdd

Typeに"Deploy"を選択。

"Add Server Group"をクリック。

f:id:pioho:20151118194627p:plain

Template selectionで"Continue without a template"をクリック。

f:id:pioho:20151118194109p:plain

アカウント、リージョン、ゾーン、名前(Stack)を入力する。

※キャプチャではゾーン入れてないですが入れてないとこけました。

f:id:pioho:20151118194736p:plain

作ったLoadBalancerを選ぶ。

f:id:pioho:20151118194808p:plain

作ったSecurityGroupを選ぶ。

f:id:pioho:20151118195111p:plain

マシンタイプと台数を選ぶ。

f:id:pioho:20151118195213p:plain

f:id:pioho:20151118195252p:plain

"save change"する。

実行してみる

"Bake & Deploy To Test"の右端の"Start Manual Execution"をクリックする。

f:id:pioho:20151118195434p:plain

"Run"

f:id:pioho:20151118195507p:plain

実行される。

f:id:pioho:20151118195537p:plain

デプロイ正常終了。

f:id:pioho:20151118235016p:plain

LB配下にサーバーが作られてますね。GCP側からも確認できます。

80番でリッスンしてないので赤ですが

f:id:pioho:20151118235509p:plain

git連携とかやってないんであれですが、、近々やったら更新します。

使えそうなAPI

curl -X POST localhost:7002/config-refresh

curl localhost:7002/credentials

curl localhost:8084/subnets

curl localhost:8084/securityGroups

AWSもやるべ

ほとんどは以下の"AWS Setup"の手順通りでいけると思います。

Spinnaker: Getting Started

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とが出て来ません。こんな感じで↓

f:id:pioho:20151121222313p:plain

命名規則がこれです。 {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"をクリックします。

f:id:pioho:20151121223428p:plain

そしたらプルダウンで出てくるようになりました;

f:id:pioho:20151121224158p:plain

GCPと同じ感じでデプロイしてみる

ELB作成

f:id:pioho:20151121224408p:plain

SecurityGroup作成

f:id:pioho:20151121224803p:plain

あとは全て同じ流れとなります(・∀・)