アプリのVersionごとに
URLを自動生成
on GKE
吉海将太
自己紹介
自己紹介
吉海 将太
Software Engineer
Kabuku, Inc.
Python, Go, K8S(GKE), AppEngineやってます。
Twitter: @yoshikai_
鹿トドン(旧:奈良トドン): ファイレクシアの鹿
メアドとパスワード忘れてログイン出来なくなりました。
アプリのVersionごとにURLを自動生成とは?
新しいversionのアプリをデプロイすると、デプロイしたversionのURLが自動的に作られ
て、アクセス出来るようになる仕組み
● https://dev.app.io/versions/v1/
○ pod名: myapp-v1
● https://dev.app.io/versions/v2/
○ pod名: myapp-v2
デプロイのトリガーはリポジトリに対してtagを付けてpush
こんな感じです
gitリポジトリにtagを付けてpush
docker imgesのビルド
gkeにデプロイ
by Google Cloud Container Builder
https://dev.app.io/versions/{tag}
人がやるのは
tag付けてpushするだけ!!
簡単!!
喜ぶ会社員たちのイラスト
何がいいの?
こんな時
● 複数のversionを共存させたい
● デプロイしたversionに対してテストして、問題なければプロダクション用のURLの
向き先をそのversionに切り替えたい
GKEで某AppEngine的なことをしたい
今日話すこと
VersionごとにURLを自動生成するために行った構成とデプロイの自動化について話し
ます
● 構成について
● デプロイの自動化
構成について
Ingress
Pod
myapi-r45
version:r45
Pod
nginx
Internet
Service(nodePort)
Production
url: pro.app.io
selector:
version : r45
Service(nodePort)
Develop
url: dev.app.io
pro.app.io
dev.app.io
Service(cluster-ip)
tkp-api-r45-2
dev.app.io/versions/r45/
下記のURLでこのPodにアクセス出来る
https://pro.app.io
https://dev.app.io/versions/r45/
Service(cluster-ip)
myapi-r46
Pod
myapi-r46
version:r46
dev.app.io/versions/r46pro.app.io
下記のURLでこのPodにアクセス出来る
https://dev.app.io/versions/r46/
nameでdomainを割り当てるた
めにcluster-ipを作成
http://myapi-r45で他のpodから
アクセス出来るようにしてある
構成図
構成手順
1. Ingressの設定
a. pro.app.ioはProductionのServiceに、dev.app.ioだったらDevelopのServiceに振り分ける
2. Service(NodePort)の設定 ProductionとDevelopの2つを用意
a. Productionはselectorでproduction用のpodのversion(メタ情報)を指定。
b. DevelopはselectorでNginxのpodを指定
3. Nginx(pod)の設定
a. nginxとdnsmasq(dnsサーバー)のcontainerで構成
b. nginxのlocation機能でurlに含まれるversionから該当するcluster-ipの名前に振り分ける
i. 例: http://dev.app.io/versions/v1 → http://myapi-v1
4. アプリ(pod)の設定
a. アプリのpodとセットで、cluster-ipを作成
i. cluster-ipはそのアプリをselectorで指定
ii. アプリはclusert-ipの名前でアクセス出来るようになる
iii. clusert-ip name: myapi-v1
iv. url: http://myapi-v1
順に説明してきます
Ingressの設定
Service(NodePort)の設定 ProductionとDevelop
Service(NodePort)の設定 ProductionとDevelopの2つを用意
nginxの設定
Nginx(pod)の設定: conf.d/myapi.conf
Nginx(pod)の設定: podの設定
アプリ(pod)の設定
アプリ(pod)の設定
podは、service(cluster-ip)とセットで作りたいので、ひとつの yamlファイルにし
てます。
templateのファイルを作って、デプロイする時に {tag}をversion(gitのtag)で置
換するようにしてます。
デプロイの自動化
デプロイのおさらい
gitリポジトリにタグを付けて push
docker imgesのビルド
gkeにデプロイ
by Google Cloud Container Builder
https://dev.app.io/versions/{tag}
人がやるのは
tag付けてpushするだけ!!
簡単!!
喜ぶ会社員たちのイラスト
バンザイをしている会社員たちのイラスト
デプロイ自動化
Google Cloud Container Builderを使って自動化。リポジトリにタグ付けて pushすると自動的に gke上に作成される
感想
感想
● GKEでも頑張ればAppengineっぽいことが出来る
● Google Cloud Container Builderは便利だけどエラーが起き
た時にとても辛い・・・
○ 1.5日ぐらいビルド通すために時間使いました・・・
○ ビルドが成功(Green)した時は感動で涙を流しました・・・
おまけ
カブクではエンジニアを募集してます!
● サーバーサイドエンジニア
○ Python, Google Cloud Platform
● フロントエンドエンジニア
○ TypeScript,Angular
アットホームな職場です!
https://www.kabuku.co.jp/#jobs
26
おしまい

[Lt]versionごとにurlを自動生成