Kubernetes × CircleCIで実現する安心安全Deploy / Safe Deploy with Kubernetes and CircleCI

12a5cec7a54018170b1a009731acf477?s=47 VTRyo
June 03, 2020

Kubernetes × CircleCIで実現する安心安全Deploy / Safe Deploy with Kubernetes and CircleCI

2020.6.3 CircleCI ユーザーコミュニティミートアップ登壇資料
https://circleci.connpass.com/event/175195/

12a5cec7a54018170b1a009731acf477?s=128

VTRyo

June 03, 2020
Tweet

Transcript

  1.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. Kubernetes

    × CircleCI で実現する安⼼安全Deploy VTRyo / @3s_hv #CircleCIJP
  2.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. #CircleCIJP

    イベントハッシュタグ #CircleCIJP
  3.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. #CircleCIJP

    スライドは公開します
  4.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. VTRyo

    / @3s_hv ➤ 株式会社マツリカ / SRE ➤ 作家(早く脱稿したい) ➤ CircleCIユーザコミュニティメ ンバー etc. ➤ AWS Summit 2019 Startup Central 登壇 etc. https://vtryo.me illustration by 湊川あい #CircleCIJP
  5.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. 営業をもっと⾃由に、もっと創造的に。

    #CircleCIJP
  6.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. 営業をもっと⾃由に、もっと創造的に。

    #CircleCIJP
  7.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. 営業をもっと⾃由に、もっと創造的に。

    #CircleCIJP
  8.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    CI/CDってなんだっけ? ➤ 安⼼安全のDeployって? ➤ CircleCIに何をさせている? ➤ Deploy Workflow ➤ config.yml 話すこと #CircleCIJP
  9.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ⼿動でDeployまでしている⼈

    #CircleCIJP
  10.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. Build,

    Testは⾃動の⼈ #CircleCIJP
  11.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. Build,

    Test, Deploy承認 までは⾃動の⼈ #CircleCIJP
  12.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ⾃動でDeployまでしている⼈

    #CircleCIJP
  13.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ⾃動

    CI/CDってなんだっけ? #CircleCIJP 参考:https://aws.amazon.com/jp/devops/continuous-delivery/ Build & Test Deploy Staging Deploy Production Commit change ⾃動 継続的インテグレーション 継続的デリバリ 継続的デプロイメント v1.1 本番Deploy  承認します ⾃動
  14.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    CI(継続的インテグレーション) ➤ リリースプロセスのBuild段階とTest段階のことを指す。コードの変更がCommit されるたびに、⾃動化されたBuildとTestが実⾏される ➤ CD(継続的デリバリ) ➤ リリースプロセスの全体を⾃動化すること。ステージング環境まで⾃動Deployさ れる。本番環境へのDeployするかは開発者が決める ➤ CD(継続的デプロイメント) ➤ 継続的デリバリにおいて、本番環境へのDeployに承認が必要かどうか CI/CDってなんだっけ? #CircleCIJP 参考:https://aws.amazon.com/jp/devops/continuous-delivery/
  15.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ҆৺҆શͷDeployͱ͸

    #CircleCIJP
  16.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. 1.

    開発者なら誰でもDeployまでできる CircleCIの頑張りどころ #CircleCIJP
  17.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. 2.

    ⼈間が頑張らずにDeployまでできる CircleCI, Kubernetes    の頑張りどころ #CircleCIJP
  18.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. 3.

    Stagingでテストされた環境が ProductionにDeployされる CircleCI, Kubernetes    の頑張りどころ #CircleCIJP
  19.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ͜ͷ3ͭΛϙΠϯτʹ

    ࿩͍͖ͯ͠·͢ #CircleCIJP
  20.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ։ൃऀͳΒ୭Ͱ΋Deploy·ͰͰ͖Δ

    #CircleCIJP
  21.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ⾃動

    どこの部分の話? #CircleCIJP 参考:https://aws.amazon.com/jp/devops/continuous-delivery/ Build & Test Deploy Staging Deploy Production Commit change ⾃動 継続的インテグレーション 継続的デリバリ 継続的デプロイメント v1.1 本番Deploy  承認します ⾃動 ͜͜ͷ࿩Λ͢ΔΑ
  22.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    開発者がソースコードをPush or Mergeすると… ➤ CircleCIがBuild & Testを開始 ➤ DockerΠϝʔδ͕ECRにPushされる ➤ KubernetesクラスタにDeployされる Workflowの概要 #CircleCIJP
  23.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    開発者がソースコードをPush or Mergeすると… ➤ CircleCIがBuild & Testを開始 ➤ DockerΠϝʔδ͕ECRにPushされる ➤ KubernetesクラスタにDeployされる Workflowの概要 開発者がやることはシンプル #CircleCIJP
  24.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    ⾃動的にテスト(リリース候補確認)環境にDeployされる ➤ 開発者はMasterにMergeするだけでOK v1.1がMasterにMergeされたWorkflow #CircleCIJP
  25.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    ProductionリリースWorkflowはStaging(本番相当)環境に⾃動Deployされる ➤ 問題なければ「request_prod 」をApprovedすることで本番Deployされる v1.1がProduction DeployされるときのWorkflow #CircleCIJP
  26.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    ProductionリリースWorkflowはStaging(本番相当)環境に⾃動Deployされる ➤ 問題なければ「request_prod 」をApprovedすることで本番Deployされる v1.1がProduction DeployされるときのWorkflow #CircleCIJP 開発者は「Approved」するだけ
  27.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    ProductionリリースWorkflowはStaging(本番相当)環境に⾃動Deployされる ➤ 問題なければ「request_prod 」をApprovedすることで本番Deployされる v1.1がProduction DeployされるときのWorkflow #CircleCIJP 安全だね!
  28.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    Stagingに⾃動的にDeployしたあとに  ApprovedのJobを挟んでおく ➤ 開発者はこの中⾝を知らなかったとしても  Deployすることができる config.yml #CircleCIJP
  29.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ਓ͕ؒؤுΒͣʹDeploy·ͰͰ͖Δ

    #CircleCIJP
  30.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ⾃動

    どこの部分の話? #CircleCIJP 参考:https://aws.amazon.com/jp/devops/continuous-delivery/ Build & Test Deploy Staging Deploy Production Commit change ⾃動 継続的インテグレーション 継続的デリバリ 継続的デプロイメント v1.1 本番Deploy  承認します ⾃動 ͜͜ͷ࿩Λ͢ΔΑ
  31.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    ⼈間がコマンドラインなどを使⽤してDeployするやりかた ➤ kubectl apply ➤ terraform apply ➤ Deploy時にパラメータの変更が⼿動で必要なやりかた ⼈間が頑張るDeployとは(⼀例です) #CircleCIJP
  32.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    ⼈間がコマンドラインなどを使⽤してDeployするやりかた ➤ kubectl apply ➤ terraform apply ➤ Deploy時にパラメータの変更が⼿動で必要なやりかた ⼈間が頑張るDeployとは(⼀例です) #CircleCIJP いつかミスでる & 時間かかる
  33.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    変更されたコードのテスト ➤ Dockerイメージの作成 ➤ 作成されるたび、Dockerイメージタグにバージョン管理のためコミットハッシュ を付与する ➤ ECRにPushする ➤ Migrationの実⾏ ➤ Deploy ➤ クラスタで、作成したDockerイメージに差し替える KubernetesクラスタにDeployするまで #CircleCIJP
  34.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    変更されたコードのテスト ➤ Dockerイメージの作成 ➤ 作成されるたび、Dockerイメージタグにバージョン管理のためコミットハッシュ を付与する ➤ ECRにPushする ➤ Migrationの実⾏ ➤ Deploy ➤ クラスタで、作成したDockerイメージに差し替える KubernetesクラスタにDeployするまで #CircleCIJP なんだかんだ⾔ってやること多い
  35.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    Dockerイメージタグにコミットハッシュ ➤ ↑で作成されたDockerイメージを使ってDeployされる config.yml #CircleCIJP
  36.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    ECRの操作は、CircleCI Orbsを利⽤することで簡単に実現できる config.yml #CircleCIJP 参考:https://circleci.com/orbs/registry/orb/circleci/aws-ecr
  37.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. StagingͰςετ͞Εͨ؀ڥ͕

    ProductionʹDeploy͞ΕΔ #CircleCIJP
  38.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ⾃動

    どこの部分の話? #CircleCIJP 参考:https://aws.amazon.com/jp/devops/continuous-delivery/ Build & Test Deploy Staging Deploy Production Commit change ⾃動 継続的インテグレーション 継続的デリバリ 継続的デプロイメント v1.1 本番Deploy  承認します ⾃動 ͜͜ͷ࿩Λ͢ΔΑ
  39.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    StagingにDeployされてからでなければProductionへDeployできない流れ v1.1がProduction DeployされるときのWorkflow #CircleCIJP
  40.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. なぜその流れがよいの?

    #CircleCIJP
  41.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. かつての地獄…

    ➤ Opsworksによる構築、Deploy ➤ Stackによって失敗したりする ➤ 詳細なログを出してくれない… ➤ 構成変更に時間がかかる(停⽌も⻑ い) ➤ Chef ➤ 毎回Setupコマンド待ち ➤ ローカル開発環境はDockerなんだけど… #CircleCIJP
  42.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. 確かなDockerイメージをProductionへ

    #CircleCIJP Deploy Staging Deploy Production Docker Image ⾃動 workflowでは  Staging Deploy前にdocker build実⾏ 同じDockerイメージがDeploy ➤ 動作確認が取れているDockerイメージが 確実にProductionへ届く ➤ 安定性の向上 ➤ 「それStagingだと環境差分があって  再現しないんですよ」が減る  ※データベース内容による環境差分はあると思います
  43.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. 確かなDockerイメージをProductionへ

    #CircleCIJP Deploy Staging Deploy Production Docker Image ⾃動 workflowでは  Staging Deploy前にdocker build実⾏ 同じDockerイメージがDeploy ➤ 動作確認が取れているDockerイメージが 確実にProductionへ届く ➤ 安定性の向上 ➤ 「それStagingだと環境差分があって  再現しないんですよ」が減る  ※データベース内容による環境差分はあると思います 安全だね!
  44.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    CircleCIによって、継続的デプロイメント(or 継続的デリバリ)の実装が可能 ➤ 「⼈間が頑張らず、誰でもDeployできる」ことには様々なメリットがあるよ ➤ 効率化 ➤ 属⼈化排除 ➤ Deploy安定性向上 ➤ Staging→ProductionというDeployフローが可能なら実装するとメリットがあるよ ➤ 動作確認保証が取れたものがProductionへ届く ➤ サービス安定性向上 まとめ #CircleCIJP
  45.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. ➤

    Amazon EKSͰߏங͢Δࣾ಺PaaS ➤ https://speakerdeck.com/vtryo/create-paas-eks ➤ KubernetesͷJobͰ࣮ߦͨ͠MigrationͷϩάΛCircleCI಺ͰݟΕΔͱศར ➤ https://blog.vtryo.me/entry/migration-log-to-circleci ➤ CircleCIͰϏϧυ͍ͯ͠Δϒϥϯν໊ΛDockerΠϝʔδͷλάʹઃఆ͢Δ ➤ https://blog.vtryo.me/entry/docker-image-tag-using-branch-name その他 参考資料 #CircleCIJP
  46.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. Hire

    me! (side job.) ➤ Hire meは冗談ですが、ご相談はいつで もお待ちしています ➤ Twitter→@3s_hv #CircleCIJP illustration by 湊川あい
  47.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. Kubernetes

    × CircleCI で実現する安⼼安全Deploy VTRyo / @3s_hv 完 #CircleCIJP