Slide 1

Slide 1 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. ©2020 RAKUS Co., Ltd. 新サービス立ち上げに向けた CI/CD環境の構築 SREチーム みかた

Slide 2

Slide 2 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. 自己紹介 / チーム紹介

Slide 3

Slide 3 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. 見形親久(みかたちかひさ) <経歴> 2002~ Sierにて受託開発を実施 2015~ ラクスにて楽楽精算の開発を担当 2021~ SREチームを立ち上げ <得意分野> アプリ開発(C/C++/Java/Python・・・etc) サービス運用(仕組み化/自動化) インフラはちょっとだけワカル <趣味> ランニング 飲み歩き サウナ スノーボード 最近はもっぱら スノーボード yukiyama ID:8ob1gooRVJD

Slide 4

Slide 4 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. SREチームの構成 ● Businnes Platformチーム  サブスクリプション管理システムの開発を行うチーム  モダンな技術でシステム開発を行っています ● DevOpsチーム  IaCやCI・CD環境・・・etc 俗に言うSREっぽいチーム  Business PlatformチームのCI・CDもサポートしています

Slide 5

Slide 5 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. SREチームの役割 ● Businnes Platformチーム  モダンな技術へのチャレンジ ● DevOpsチーム  モダンな技術の展開 チャレンジで集めたノウハウは 商用のサービスへ還元していきます

Slide 6

Slide 6 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. システム構成

Slide 7

Slide 7 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. システム構成 ● システム基盤はAWS EKS(Kubernetes)を採用 ● フロントとバックを分割したSPA構成 ● フロントエンドはTypeScript + Reactを採用 ● バックエンドはGo + Pythonを採用

Slide 8

Slide 8 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd.

Slide 9

Slide 9 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. CI環境の検討

Slide 10

Slide 10 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. CI環境の検討  CIの実行待ちは極力小さくする  最初のうちは実行時間は気にしない  開発者と同数以上のパイプラインを用意する  インフラ担当不在なのでサーバ管理に不安あり  マネージドサービスを利用して管理をしない  CIで利用するツールはまだ未確定  外部サービスとの連携のも考慮点に入れる

Slide 11

Slide 11 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. CI環境の検討 ● 最初はコストを抑えたい  VCSに用意されているRunnerの無料枠は使い倒す  CircleCIなどのCIサービスは本当に必要か考える ● 情報の漏洩リスク、トレーサビリティも考慮する  アクセスを社内のみに制限する  トラブル時に操作記録を確認できる

Slide 12

Slide 12 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. CI環境の検討 観点 GitLab CI オンプレ GitLab CI クラウド GitHub Actions クラウド Circle CI 実行待ち ❌ ○ ○ ○ サーバ管理 ❌ ○ ○ ○ ツール連携 ❌ △ ○ ○ コスト ○ △ △ ❌ セキュリティ ○ ○ ○ △

Slide 13

Slide 13 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd.

Slide 14

Slide 14 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. CD環境の検討

Slide 15

Slide 15 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. CD環境の検討 ● 本番環境へのアクセス権は制限する必要がある  インフラ部門のみCDできる様にしたい ● CIとCDに境界線を与えるべきか  CI=開発 / CD=インフラ と責任部署が別れている  CIとCDは明確に別けた方が運用がシンプル

Slide 16

Slide 16 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. CD環境の検討 ● SSOT(single source of truth)を担保したい  本番環境の直接操作(kubectl等)は禁止する  本番・ステージングなど環境ごとのマニフェスト管理は避ける  テンプレートエンジンを利用して動的にマニフェストを生成する ● CDの資材のレビューとその履歴の追跡は必須  Gitを利用してプルリクでレビューする

Slide 17

Slide 17 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. CD環境の検討 要件を整理するとGitを元にした自動デプロイの流れがよさそうです Helm + ArgoCDの組み合わせでGitOpsを行うという方針となりました

Slide 18

Slide 18 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. Helm  Kubernetesのパッケージ管理ツール  Chartと言われる設定ファイル郡でマニフェストを管理する  デプロイされたChartはリリースという概念で一括管理される  公開されたリポジトリ  幅広いツールのチャートがHelmリポジトリで公開されている  Goを利用したテンプレートエンジン  GoのTmplateを利用しておりif、ループ、関数も利用可能

Slide 19

Slide 19 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. ArgoCD / GitOps  ArgoCD  GitOpsベースでKubernetesに対応したCDツール  Gitリポジトリをサポートしている  WebのUIとコマンドラインを提供している  GitOps  Weaveworksが2017年に提唱した開発手法  Gitで管理されているマニフェストをk8sへ同期する  プルリクエストといった慣れた手法でk8sへデプロイできる

Slide 20

Slide 20 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd.

Slide 21

Slide 21 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. 今後の展望について

Slide 22

Slide 22 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. 今後の展望について ノウハウを他のサービスでも利用できる様にするのが今後の展望です 今回の環境はクラウドを前提としているので、オンプレの移植が必要です

Slide 23

Slide 23 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. オンプレへの移行先 ● ソースコードのリポジトリ:GitHub → GitHub or GitLab ● CIのRunner:GitHub Actions → GitHub Actions or GitLab CI ● CIの基盤:GitHub提供 → Kubernetes or VM tanzu ● コンテナのリポジトリ:AWS ECR → Docker Registry ● マニフェスト管理:Helm → Helm ● CDツール:ArgoCD → ArgoCD

Slide 24

Slide 24 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd.

Slide 25

Slide 25 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. まとめ

Slide 26

Slide 26 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. まとめ 正直なところGitHubとCircleCIで完了でしょ? くらいに考えていましたが、 蓋を開けてみたらあまりにも選択肢が多く目移りしてしまいました 本当に必要なモノ、現場の運用、組織構成も考えた上で、 欲張らずに最小セットで初めてみることが大切かと思います

Slide 27

Slide 27 text

#RAKUSMeetup ©2020 RAKUS Co., Ltd. ©2020 RAKUS Co., Ltd. ご清聴ありがとうございました