Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
How to utilize GKE for QA environment
masuken@gmail.com
June 18, 2018
Technology
3
910
How to utilize GKE for QA environment
masuken@gmail.com
June 18, 2018
Tweet
Share
More Decks by masuken@gmail.com
See All by masuken@gmail.com
Development/QA environments and the Go tools in it
masudak
0
5.4k
Introduction of mercari SET team
masudak
0
11k
Recommendation for using your own tools
masudak
1
5.4k
Other Decks in Technology
See All in Technology
1,000万人以上が利用する「家族アルバム みてね」のSRE組織は4年間でどのように作られてきたのか/SRE NEXT 2022
isaoshimizu
4
2k
How We Foster Reliability in Diversity
nari_ex
PRO
8
1.8k
mROS 2のススメ
takasehideki
0
280
シビックテックとコミュニティ
halsk
1
600
キャッチアップ Android 13 / Catch up Android 13
yanzm
1
670
ここらでGPSマルチユニットが如何に使いやすいか本気で説明するから聞きなさい
mitsuzono
0
240
街じゅうを"駅前化"する電動マイクロモビリティのシェアサービス「LUUP」のIoTとSRE
0gm
1
390
開発者のための GitHub Organization の安全な運用と 継続的なモニタリング
flatt_security
0
200
次期LTSに備えよ!AOS 6.1 HCI Core 編
smzksts
0
160
Power Query 日時の変換でちょっと焦ったケース +1 / Power Query Some cases
ishiayaya
0
140
220428event_overview
caddi_eng
1
200
ITエンジニアを取り巻く環境とキャリアパス / A career path for Japanese IT engineers
takatama
0
530
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
310
33k
Agile that works and the tools we love
rasmusluckow
319
19k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
29
4.3k
Designing Experiences People Love
moore
130
22k
Mobile First: as difficult as doing things right
swwweet
212
7.5k
Building an army of robots
kneath
299
40k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
103
16k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
15k
Keith and Marios Guide to Fast Websites
keithpitt
404
21k
Done Done
chrislema
174
14k
GitHub's CSS Performance
jonrohan
1020
410k
Navigating Team Friction
lara
175
11k
Transcript
How to utilize GKE for QA environment @masudak GCPUG Tokyo
June 2018
About me • @masudak ますだっくと呼ばれてます • 2016年4月入社 • SET(Software Engineer
in Test) • 最近感動したもの: ルンバ(自動化素晴らし い)
SET (Software Engineer in Test)
About SET • 2011年にGoogleが設立 • 「開発生産性とプロダクト品質の向上」がテー マ • SDET, SWETなど色々な名称ある
• メルカリSETは2016年10月設立 • 2017年春に出るUKアプリがトリガー • 当時作ったもの ◦ ローカル開発環境 ◦ QA環境 ◦ UIテスト自動化
開発フロー
開発フロー • PMが仕様をJIRAでFIX • エンジニア・デザイナーが「ローカル開発環 境」で実装 • PRを他のメンバーにレビューしてもらう • LGTM
• 「QA環境」でQAエンジニアがマニュアルQA • PMがリリース承認 • エンジニアがリリース
QA環境
QA環境 • QAエンジニアやエンジニアがQAするところ • 共通のDBや検索データを持つ • API, Frontend, Admin, Webなどが動く
• 他の人に影響を受けない独立した環境 • 独立したエンドポイント • トピックをデプロイ
QA環境要件 • 自分専用の環境 • 共通のWebUIからデプロイ • スケールしやすい • 可能な限り本番の構成を反映
2017年春
2017年春 • USアプリの刷新をすることに • PHP -> Go • Monolithic ->
Microservices • Kubernetes on GCP • 「いい感じ」でアプリをデプロイしたい
2017年前半 • CircleCIのビルド中にデプロイ • 新しい環境が自動的に • HTTPヘッダを見て、プロキシ
CircleCI • テストだけでなくreviewdogとかカバレッジと か • gcloud SDKやDockerのインストール • 古いpods削除 •
マニフェストファイルのテンプレートを書き換 え $ kubectl get pods --no-headers --selector='app=XXXX-api' | cut -f1 -d' ' | xargs kubectl delete pod そのあと $ make setup-branch-k8s
書き換え setup-branch-k8s: $(eval PR_NUMBER := $(shell basename ${CIRCLE_PULL_REQUEST})) sed -ie
"s/{{ PR_NUMBER }}/$(PR_NUMBER)/gi" ./tools/kubernetes/XXX-branch.tmpl.yml sed -ie "s/{{ BUILD_NUMBER }}/$(CIRCLE_BUILD_NUM)/gi" ./tools/kubernetes/XXX-branch.tmpl.yml /google-cloud-sdk/bin/kubectl apply -f ./tools/kubernetes/
Go reverse proxy director := func(req *http.Request) { xPrNumber :=
req.Header.Get("X-FOOBAR-PR") apisPort := 4000 req.URL.Scheme = "http" if xPrNumber != "" { req.URL.Host = fmt.Sprintf("foobar-api-%s:%d", xPrNumber, apisPort) } else { req.URL.Host = fmt.Sprintf("foobar-api:%d", apisPort) }
2017年後半
Spinnaker • CircleCIからはGCRにイメージをプッシュするだけ • それをトリガーにSpinnakerからデプロイ • オレオレyamlテンプレートがなくなる • とは言え、まだWebUI中心 •
PR podsに対応できてない
2017年後半 • reconciliation loop ◦ In Kubernetes, a controller is
a control loop that watches the shared state of the cluster through the apiserver and makes changes attempting to move the current state towards the desired state. deeeet氏: PRのstateをdesired stateとしよう!
K8s Controller for PR • ループしながら、PRの状況をチェック • Openだったら、既存のRSを複製 • 環境変数などを書き換え
• desired stateを変更 • k8sがそのdesiredに近づけていく • PR用のRS完成 • 必要に応じて、external-dnsでドメイン付与 もしかしたら、kustomizeに置き換わる運命???
終わりに • 開発生産性も品質もまだまだ追求できる • 開発環境だから、QA環境だからで終わらせない • 開発速度を上げるのはすごく大事 • たった一つのVMの時代から2年でここまで来た •
parityなどを考えるとまだまだ課題は多い • 是非情報交換していきましょう
We are hiring!! • ソフトウェアエンジニア(SET: Software Engineer in Test) •
ソフトウェアエンジニア(SET iOS: Software Engineer in Test iOS)
ご清聴 ありがとうございました