Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
May 26th, 2021 GitHub InFocus Hidekazu Miyamoto C2C Service Development Section. Rakuten Group, Inc. ラクマにおけるGitOps導⼊事例
Slide 2
Slide 2 text
2 Hidekazu Miyamoto Tech Lead, Rakuma SRE Team Hello!
Slide 3
Slide 3 text
3
Slide 4
Slide 4 text
4 ラクマSREについて ラクマSREチームについて
Slide 5
Slide 5 text
5 SREチームの任務 • サービスを提供するインフラシステムの設計・構築・運⽤ • 24/365のサービスの安定稼働 • パフォーマンスチューニング • ⼈でスケールするのではなく、システムでスケールさせること
Slide 6
Slide 6 text
6 課題 • 新たな機能をどんどん追加してサービスを成⻑させないといけない時期 SRE
Slide 7
Slide 7 text
7 課題 • 新たな機能をどんどん追加してサービスを成⻑させないといけない時期 • 新機能追加時の構成相談や、設定変更依頼、インフラに関する問い合わせが増加 Consultation Capacity Consultation Architect Change setting request Trouble Shooting SRE Support
Slide 8
Slide 8 text
8 課題 • 新たな機能をどんどん追加してサービスを成⻑させないといけない時期 • 新機能追加時の構成相談や、設定変更依頼、インフラに関する問い合わせが増加 • サービスの稼働率の担保、監視、障害対応も並⾏して⾏わないといけない Consultation Capacity Consultation Architect Change setting request Trouble Shooting Monitoring CI/CD Incident Audit SRE Oparation Support
Slide 9
Slide 9 text
9 課題 • 新たな機能をどんどん追加してサービスを成⻑させないといけない時期 • 新機能追加時の構成相談や、設定変更依頼、インフラに関する問い合わせが増加 • サービスの稼働率の担保、監視、障害対応も並⾏して⾏わないといけない Consultation Capacity Consultation Architect Change setting request Trouble Shooting Monitoring CI/CD Incident Audit SRE Oparation Support
Slide 10
Slide 10 text
10 監査の証跡集めに必要なもの • いつ、誰が、どのような変更をしたのか • 責任者の承認をえた上で変更作業を実施しているのか
Slide 11
Slide 11 text
11 ラクマSREについて GitOpsについて
Slide 12
Slide 12 text
12 GitOpsとは https://www.weave.works/blog/gitops-operations-by-pull-request • 2017年に公開されたWeaveworks社のブログで “GitOps”という⾔葉が誕⽣ • 要約すると、⼈の⼿を介さずにインフラに関するのコードをGitで管理する思想 • 主にKubernetesのリソース管理で使われることが多い • インフラの変更に関する追跡情報が集約されているため、監査の証跡集めとしても有効
Slide 13
Slide 13 text
13 ラクマSREについて Terraformの実⾏環境の仕組み
Slide 14
Slide 14 text
14 実現したい事 - 開発編 Cloud Platform Developer GitHub Actions 1. PullRequest 2. Action 4. plan terraform-repo 3. init, fmt 5. Add the result to comment
Slide 15
Slide 15 text
15 実現したい事 – リリース編 Cloud Platform Developer GitHub Actions 1. Approve 3. Action 4. apply terraform-repo Code Owner 2. Merge
Slide 16
Slide 16 text
No content
Slide 17
Slide 17 text
No content
Slide 18
Slide 18 text
No content
Slide 19
Slide 19 text
19 Sample Code https://gist.github.com/hiiiide/1ae69bebb8c0335c177a8b32763e505e
Slide 20
Slide 20 text
20 ラクマSREについて Kubernetesのリソース管理を どのようなGitHub Actionsを組み合わせて GitOps化したか
Slide 21
Slide 21 text
21 実現したい事 Developer application-repo k8s-manifest-repo GitHub Actions Container Registry 1. Push 2. Action 3. Push Image 4. Push manifest file 5. Polling 6. apply
Slide 22
Slide 22 text
22 コンテナのビルドとプッシュ Developer application-repo k8s-manifest-repo GitHub Actions Container Registry 1. Push 2. Action 3. Push Image 4. Push manifest file 5. Polling 6. apply
Slide 23
Slide 23 text
23 コンテナのビルドとプッシュ
Slide 24
Slide 24 text
24 コンテナのビルドとプッシュ コンテナレジストリのログイン処理 ビルド、プッシュ処理 初期処理
Slide 25
Slide 25 text
25 マニフェストファイルの更新 + Pull Request作成 Developer application-repo k8s-manifest-repo GitHub Actions Container Registry 1. Push 2. Action 3. Push Image 4. Push manifest file 5. Polling 6. apply
Slide 26
Slide 26 text
26 マニフェストファイルの更新 + Pull Request作成 • 外部のレポジトリ(k8s-manifest-repo)のチェックアウトが必要 • デフォルトで⽤意されているCheckoutで実現可能 • 対象のレポジトリを⽤意するだけでOK(pathの指定は任意)
Slide 27
Slide 27 text
27 マニフェストファイルの更新 + Pull Request作成 • マニフェストファイル(Deployment)をGitHub Actions内で変更する • 今回はrubyスクリプトを⽤意して、コンテナイメージのタグを更新 • もっとシンプルにしたい場合は yq コマンドを使⽤すると良い
Slide 28
Slide 28 text
28 マニフェストファイルの更新 + Pull Request作成
Slide 29
Slide 29 text
29 マニフェストファイルの更新 + Pull Request作成
Slide 30
Slide 30 text
30 マニフェストファイルの更新 + Pull Request作成
Slide 31
Slide 31 text
31 GitOpsのブランチ戦略について
Slide 32
Slide 32 text
32 前提 • Kustomizeを使⽤したKubernatesのマニフェストファイルを、どのようなブランチ戦略で管理してくか に焦点を当てる • Kustomizeとは、Kubernetesのyamlを効率よく運⽤するのに特化したパッケージングツール
Slide 33
Slide 33 text
33 PRD K8S Cluster staging branch develop branch main branch feature branch STG K8S Cluster DEV K8S Cluster ブランチ戦略 Pattern1 3. merge 2. merge 1. checkout 4. merge
Slide 34
Slide 34 text
34 PRD K8S Cluster staging branch develop branch main branch feature branch STG K8S Cluster DEV K8S Cluster ブランチ戦略 Pattern2 4. merge 3. merge 2. merge 1. checkout
Slide 35
Slide 35 text
35 PRD K8S Cluster main branch feature branch STG K8S Cluster DEV K8S Cluster ブランチ戦略 Pattern3 - overlay更新時 2. merge 1. checkout
Slide 36
Slide 36 text
36 PRD K8S Cluster main branch feature branch STG K8S Cluster DEV K8S Cluster ブランチ戦略 Pattern3 - base更新時 2. merge 1. checkout
Slide 37
Slide 37 text
37 Pattern3 Pros Cons List Pattern1 Pattern2 Pros Cons Pattern1 ブランチが固定になっている為わかりやすい overlaysの対応を⾏う時に他のbranchへのマージ漏れが出てくる可能性があ る Pattern2 ブランチが固定になっている為わかりやすい Pattern1で懸念していたマージ漏れは回避できる 対応するフローが多く⾯倒 Pattern3 ブランチの構成がシンプル Pattern1で懸念していたマージ漏れは回避できる baseの対応時のbranch切り替え作業が⾯倒
Slide 38
Slide 38 text
38 まとめ • インフラの設定管理もコードで管理すれば、監査対応も楽になる • 何かやりたいことがあれば、まずはGitHub MarketplaceでActionsを探そう • GitOpsを導⼊するときはブランチ戦略を考えてから実戦に挑もう
Slide 39
Slide 39 text
No content