自分で立てたdeisにアプリをdeployするまで

quickstartのConfigure DNSregister an admin user and deploy your first app.をやっただけ。

ロードバランサーの確認

$ kubectl --namespace=deis describe svc deis-router | grep LoadBalancer
Type:           LoadBalancer
LoadBalancer Ingress:   104.198.90.182

これがロードバランサーのIP。

でも、これがいつできたのがわからない :scream:

On Google Container Engine, Deis Workflow will automatically provision and attach a Google Cloud Loadbalancer to the router copmonent.

Deis Workflowは自動的にGCPロードバランサーを作ってアタッチするっていってるけど、一体これはいつ行われたんだ・・ :thinking: helm install したときか?該当のコードをdeisのorganization配下でgcpとかload balancerとかgclbとかいろいろ検索してみたけど、わからず・・

kubernetesのserviceでtype:LoadBalancerとしてるから

そもそも、k8sにserviceというcomponentがあって、serviceは色んなタイプがあるけれどLoadBalancerを選ぶと、k8sがよしなにバックエンドのcloud providerを見てロードバランサーを作ってくれるってことですね。GKEの場合は、それは、Google cloud load balancerを使って実現すると。 なので、多分k8sのコードにそういうことが書いてあるはず(まだ見てないけど)。

deis/workflowがやるのはpodを作成するってことだけだと思いこんでしまっていて、podはcontainerを包含した単位なのに、なぜ上位のGCPの操作の仕方まで知っているんだろう?というところがつまづいてしまった原因でした:scream: そもそもk8sは何ができるのかを分かったようで分かってなかったってことですね。

ロードバランサーのIPをもとにnip.ioというサービスを利用したときのhostを確認する

$ host 104.198.90.182.nip.io
104.198.90.182.nip.io has address 104.198.90.182

これで deis.<GCPロードバランサーIPアドレス>.nip.io で手元でアクセスできるようになる。

$ curl http://deis.104.198.90.182.nip.io/v2/ && echo
{"detail":"Authentication credentials were not provided."}

手元のdeisコマンドでユーザー登録する

$ deis register http://deis.104.198.90.182.nip.io
username: admin
password:
password (confirm):
email: xx@bb
Registered admin
Logged in as admin
Configuration file written to /Users/mpon/.deis/client.json

既存のやつが上書きされちゃうっぽい。ってことは複数のdeis workflowに対して何かやりたいときは、deis registerをやり直さないといけないのか??ちょっとめんどいかもしれない :rolling_eyes:

$ deis register --help
Registers a new user with a Deis controller.

Usage: deis auth:register <controller> [options]

Arguments:
  <controller>
    fully-qualified controller URI, e.g. 'http://deis.local3.deisapp.com/'

Options:
  --username=<username>
    provide a username for the new account.
  --password=<password>
    provide a password for the new account.
  --email=<email>
    provide an email address.
  --login=true
    logs into the new account after registering.
  --ssl-verify=true
    enables/disables SSL certificate verification for API requests

deis registerのhelpを見てみても複数に切り替える的なやつはなさげだ。まぁいっか :dancer:

アプリケーションの器をdeis上に作る

$ deis create --no-remote
Creating Application... done, created jangly-sailfish
If you want to add a git remote for this app later, use `deis git:remote -a jangly-sailfish`

作ったとこにサンプルアプリケーションをpullする

$ deis pull deis/example-go -a jangly-sailfish
Creating build... done

アクセスする

$ curl http://jangly-sailfish.104.198.90.182.nip.io
Powered by Deis

コンフィグを上書きする

この間、勝手にローリングデプロイが行われるのでdown timeは0 💯

$ deis config:set POWERED_BY="Docker Images + Kubernetes" -a jangly-sailfish
Creating config... done

=== jangly-sailfish Config
POWERED_BY      Docker Images + Kubernetes
$ curl http://jangly-sailfish.104.198.90.182.nip.io
Powered by Docker Images + Kubernetes

スケーリング

コマンドでさくっとできる。

$ deis scale cmd=2 -a jangly-sailfish
Scaling processes... but first, coffee!
done in 10s
=== jangly-sailfish Processes
--- cmd:
jangly-sailfish-cmd-2108971595-1vxqg up (v3)
jangly-sailfish-cmd-2108971595-b7xhf up (v3)