Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How to utilize GKE for QA environment

How to utilize GKE for QA environment

Kenichi Masuda

June 18, 2018
Tweet

More Decks by Kenichi Masuda

Other Decks in Technology

Transcript

  1. About me • @masudak ますだっくと呼ばれてます • 2016年4月入社 • SET(Software Engineer

    in Test) • 最近感動したもの: ルンバ(自動化素晴らし い)
  2. About SET • 2011年にGoogleが設立 • 「開発生産性とプロダクト品質の向上」がテー マ • SDET, SWETなど色々な名称ある

    • メルカリSETは2016年10月設立 • 2017年春に出るUKアプリがトリガー • 当時作ったもの ◦ ローカル開発環境 ◦ QA環境 ◦ UIテスト自動化
  3. QA環境 • QAエンジニアやエンジニアがQAするところ • 共通のDBや検索データを持つ • API, Frontend, Admin, Webなどが動く

    • 他の人に影響を受けない独立した環境 • 独立したエンドポイント • トピックをデプロイ
  4. 2017年春 • USアプリの刷新をすることに • PHP -> Go • Monolithic ->

    Microservices • Kubernetes on GCP • 「いい感じ」でアプリをデプロイしたい
  5. 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
  6. 書き換え 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/
  7. 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) }
  8. 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としよう!
  9. K8s Controller for PR • ループしながら、PRの状況をチェック • Openだったら、既存のRSを複製 • 環境変数などを書き換え

    • desired stateを変更 • k8sがそのdesiredに近づけていく • PR用のRS完成 • 必要に応じて、external-dnsでドメイン付与 もしかしたら、kustomizeに置き換わる運命???
  10. We are hiring!! • ソフトウェアエンジニア(SET: Software Engineer in Test) •

    ソフトウェアエンジニア(SET iOS: Software Engineer in Test iOS)