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

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

VTRyo
June 03, 2020

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

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

VTRyo

June 03, 2020
Tweet

More Decks by VTRyo

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  4.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.
    VTRyo / @3s_hv
    ➤ 株式会社マツリカ / SRE
    ➤ 作家(早く脱稿したい)
    ➤ CircleCIユーザコミュニティメ
    ンバー etc.
    ➤ AWS Summit 2019 Startup
    Central 登壇 etc.
    https://vtryo.me
    illustration by 湊川あい
    #CircleCIJP

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  9.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.
    ⼿動でDeployまでしている⼈
    #CircleCIJP

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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
     承認します
    ⾃動

    View Slide

  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/

    View Slide

  15.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.
    ҆৺҆શͷDeployͱ͸
    #CircleCIJP

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.
    ͜ͷ3ͭΛϙΠϯτʹ
    ࿩͍͖ͯ͠·͢
    #CircleCIJP

    View Slide

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

    View Slide

  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
     承認します
    ⾃動
    ͜͜ͷ࿩Λ͢ΔΑ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  29.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.
    ਓ͕ؒؤுΒͣʹDeploy·ͰͰ͖Δ
    #CircleCIJP

    View Slide

  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
     承認します
    ⾃動
    ͜͜ͷ࿩Λ͢ΔΑ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  37.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.
    StagingͰςετ͞Εͨ؀ڥ͕
    ProductionʹDeploy͞ΕΔ
    #CircleCIJP

    View Slide

  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
     承認します
    ⾃動
    ͜͜ͷ࿩Λ͢ΔΑ

    View Slide

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

    View Slide

  40.  © 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.
    なぜその流れがよいの?
    #CircleCIJP

    View Slide

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

    View Slide

  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だと環境差分があって
     再現しないんですよ」が減る
     ※データベース内容による環境差分はあると思います

    View Slide

  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だと環境差分があって
     再現しないんですよ」が減る
     ※データベース内容による環境差分はあると思います
    安全だね!

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    #CircleCIJP

    View Slide