Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
脱・塩漬け!サステナブルなKubernetesエコシステムの管理をしていくために
Search
Shota Suzuki
November 21, 2022
Technology
2
570
脱・塩漬け!サステナブルなKubernetesエコシステムの管理をしていくために
Cloud Native Days Tokyo 2022
Shota Suzuki
November 21, 2022
Tweet
Share
More Decks by Shota Suzuki
See All by Shota Suzuki
ネットワーク視点で学ぶ Amazon EKS クラスタのスケーラビリティ
sshota0809
2
1.2k
ユーザーの理想からはじめるサービスの信頼性定義
sshota0809
2
530
Google Cloud Anthos Day 登壇資料
sshota0809
0
76
Helm / ArgoCD で実現する Kubernetes における宣言的リソースデリバリーの実践
sshota0809
3
2.9k
Kubernetes における宣言的なリソースデリバリーの実践
sshota0809
1
460
【SRE NEXT 2020】冗長性と生産性を高めるハイブリッドクラウド環境の実現
sshota0809
2
6.8k
VXLANを使ったプライベートクラウドVMマイグレーションの実現
sshota0809
0
170
Other Decks in Technology
See All in Technology
プロダクト開発の貢献をアピールするための目標設計や認知活動 / Goal design and recognition activities to promote product development contributions.
oomatomo
5
900
Oracle Database 23ai 新機能#4 Application Continuity
oracle4engineer
PRO
0
120
入門 バックアップ
ryuichi1208
18
6.8k
Product Utilization of Large Language Models Starting Today
ymatsuwitter
3
1.4k
軽いノリで"自動化"に取り組んではいけないという話
tetsuyaooooo
1
550
O'Reilly Superstream: Building a RAG App to Chat with Your Data
pamelafox
0
120
AWS Lambdaで実現するスケーラブルで低コストなWebサービス構築/YAPC::Hakodate2024
fujiwara3
7
3.5k
クレジットカードを製造する技術
yutadayo
81
48k
Slackbot × RAG で実現する社内情報検索の最適化
howdy39
2
340
「ばん・さく・つき・たー!」にならないためにSHIROBAKOから 学んだこと
ysknsid25
3
690
【完全版】Dify - LINE Bot連携 考え方と実用テクニック
uezo
2
420
リスクから学ぶKubernetesコンテナセキュリティ/k8s-risk-and-security
mochizuki875
1
330
Featured
See All Featured
A designer walks into a library…
pauljervisheath
202
24k
Art, The Web, and Tiny UX
lynnandtonic
296
20k
Side Projects
sachag
452
42k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
225
22k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
355
29k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Statistics for Hackers
jakevdp
796
220k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.3k
How to name files
jennybc
77
99k
Raft: Consensus for Rubyists
vanstee
136
6.6k
How GitHub Uses GitHub to Build GitHub
holman
473
290k
Transcript
脱・塩漬け! サステナブルなKubernetesエコシステムの 管理をしていくために 鈴木 祥太(@sshota0809) CloudNative Days Tokyo 2022
鈴木 祥太 @sshota0809 所属 株式会社ユーザベース SRE B2B 向け SaaS プロダクトを横串で担当
Like Network / Golang / GCP / AWS / k8s / Service Mesh 自己紹介
Kubernetes とエコシステムのライフサイクル エコシステム運用の難しさ サステナブルなエコシステム管理を目指して まとめ アジェンダ
話すこと ・Kubernetes エコシステムの運用について ・helmfile + Renovate + GitOps を利用したエコシステム運用自動化について 話さないこと
・Kubernetes 自体の運用について(アップグレード戦略など) ・helm 以外を前提としたエコシステムのインストール方法などについて ・GitOps の詳細について 話すこと・話さないこと
Kubernetes とエコシステムのライフサイクル
Kubernetes とエコシステムのライフサイクル Kubernetes のライフサイクル 4 ヶ月ごとにマイナーバージョンのリリースがされ 1 年間のサポートをする方針 参考:https://kubernetes.io/releases/ バージョンアップによって
API が非推奨になったり削除されたりする 参考:https://kubernetes.io/docs/reference/using-api/deprecation-policy/ 出典:https://endoflife.date/kubernetes
Kubernetes とエコシステムのライフサイクル Kubernetes の運用を便利にするエコシステム 各コミュニティで活発に開発される様々なエコシステムを利用することで、 Kubernetes の運用などを自動化・省エネ化することが可能 e.g. Istio /
cert-manager / External Secrets Operator / etc... エコシステムのライフサイクル エコシステムも 1 つのソフトウェアなので、当然リリース等のライフサイクルがある エコシステムのバージョンによってサポートしている Kubernetes のバージョンも 指定されている
Kubernetes とエコシステムのライフサイクル e.g. Istio のサポート情報 出典:https://istio.io/latest/docs/releases/supported-releases/
Kubernetes とエコシステムのライフサイクル Kubernetes のサイクル エコシステム のサイクル v1.1.0 v1.2.0 v1.3.0 v1.4.0
v1.5.0 v1.6.0 v1.7.0 v1.8.0 v1.0.0 v2.0.0 v3.0.0 v4.0.0 v5.0.0 v6.0.0 v7.0.0 v8.0.0 Kubernetes とエコシステムどちらもしっかりバージョン 追従する必要がある どちらをサボってしまってもエコシステムの動作に影響が出る可能性がある e.g. エコシステムが削除された Kubernetes の API にアクセスをしてしまう、etc... Kubernetes とエコシステムのライフサイクル例
エコシステム運用の難しさ
エコシステム運用の難しさ 構成管理の戦略 エコシステムのインストールは手段の 1 つとして helm Chart が提供されている 場合が多いが helm
を利用したソフトウェアのインストールは手続き型となる そのため、どのバージョンの helm Chart がどのクラスタにインストール されているのか構成管理の戦略を考える必要がある 構成管理をしないとエコシステムやクラスタの数が増えた際に管理コストが顕著に増大する(体験談) $ helm repo add external-secrets https://charts.external-secrets.io $ helm install external-secrets \ external-secrets/external-secrets \ -n external-secrets \ --create-namespace \ helm コマンドによるインストール
エコシステム運用の難しさ エコシステムのバージョン追従 前述の通りエコシステムのバージョン追従を行う必要があるが、各エコシステムの リリース情報をキャッチアップして helm コマンドでアップグレードする事はかなり大変 エコシステムとクラスタの数が掛け算で運用負荷となる ・・・ ・・・ エコシステム
Kubernetes ×
エコシステム運用の難しさ 構成管理の 戦略 エコシステム のバージョン 追従
エコシステム運用の難しさ 構成管理の 戦略 エコシステム のバージョン 追従 便利なので様々なエコシステムをインストールしたくなるが その運用で考えるべきことはたくさんある
サステナブルなエコシステム管理を目指して
サステナブルなエコシステム管理を目指して 構成管理の戦略 helmfile を利用した宣言的なエコシステム管理
サステナブルなエコシステム管理を目指して helmfile(https://github.com/helmfile/helmfile) helm Chart を宣言的に管理しデプロイできるようにするための helm のラッパーツール ‘’’Helmfile is a
declarative spec for deploying helm charts’’’ YAML ファイルでレポジトリやインストールするチャートを定義することで コマンドラインでの手続き的な管理から脱却することができる repositories: - name: external-secrets url: https://charts.external-secrets.io releases: - name: external-secrets-operator namespace: external-secrets-operator createNamespace: true chart: external-secrets/external-secrets version: 0.6.0 $ helm repo add external-secrets https://charts.external-secrets.io $ helm install external-secrets \ external-secrets/external-secrets \ --version 0.6.0 \ -n external-secrets \ --create-namespace \ helm を利用したコマンドラインでのインストール helmfile.yaml に宣言的に記載
サステナブルなエコシステム管理を目指して helmfile と GitOps helmfile と GitOps を組み合わせることで宣言的にエコシステムを管理できる世界観を実現 GitOps の構成パターン(例)
1. CICD パイプラインによって helmfile からマニフェストファイルを生成しそれを ArgoCD 等で同期 2. 自作/有志が公開している ArgoCD の helmfile プラグインを利用して同期 例 1 のフロー helmfile を管理している レポジトリ GitHub Actions マニフェスト用 リポジトリ ・・・ ArgoCD k8s クラスタ helmfile.yaml helmfile.yaml や values.yaml の変更検知で ワークフローを実行 helmfile.yaml から マニフェストを生成して マニフェスト用リポジトリ にコミット ($ helmfile template) ArgoCDがマニフェストの 差分検知 差分をクラスタに反映
エコシステム運用の難しさ 構成管理の 戦略 エコシステム のバージョン 追従
サステナブルなエコシステム管理を目指して エコシステムのバージョン追従 Renovate を利用した helmfile の自動更新
サステナブルなエコシステム管理を目指して Renovate(https://github.com/renovatebot/renovate) リポジトリ内の依存関係のスキャンおよび更新を自動化するツール 依存関係の更新を自動で検知してアップグレードを施す PR を自動で発行、 多数のコンフィグレーションにより Renovate の柔軟な制御が可能 多くのパッケージマネージャーに対応しており
helmfile にもネイティブで対応 参考:https://docs.renovatebot.com/modules/manager/ … releases: - name: external-secrets-operator namespace: external-secrets-operator createNamespace: true chart: external-secrets/external-secrets version: 0.6.0 helm repository メンテナー Create v0.7.0 helmfile.yaml 内で 指定したバージョンを参照 リポジトリスキャン + 依存関係検知 v0.7.0 の存在を検知 + PR 作成 − version: 0.6.0 + version: 0.7.0
サステナブルなエコシステム管理を目指して Renovate によるアップグレード自動化 with helmfile helmfile.yaml のバージョンアップグレードは Renovateの責務となる Renovate が作成した
PR をどう扱うか組織によって柔軟に選択が可能 1. 人によるレビューを行い承認したら PR をマージしてワークフローを発火 2. PR をトリガーに何かしらのテストを実行しパスしたら自動マージしてワークフローを発火 etc... 例 1 のフロー helmfile を管理している レポジトリ GitHub Actions マニフェスト用 リポジトリ ・・・ ArgoCD k8s クラスタ helmfile.yaml helmfile.yaml や values.yaml の変更検知で ワークフローを実行 helmfile.yaml から マニフェストを生成して マニフェスト用リポジトリ にコミット ($ helmfile template) ArgoCDがマニフェストの 差分検知 差分をクラスタに反映 バージョンアップグレードを 施す PR を作成
エコシステム運用の難しさ 構成管理の 戦略 エコシステム のバージョン 追従
サステナブルなエコシステム管理を目指して 弊社で実際に運用しているフローの全体像 バージョンのアップグレードによってマニフェストがどのように変わるか差分をコメント 差分を確認し問題なければ PR を手動マージ(人間による介入はここのみ) ArgoCD マニフェスト用 リポジトリ (e.g.
sp-manifest) helmfile を管理している レポジトリ Renovate GitHub Actions SRE GitHub Actions helmfileで管理されている ソフトウェアに アップグレードがあり次第 自動検知 + アップグレードを施す PR 作成 差分を確認して 問題なさそうであれば PR をマージ 差分を自動検知し 自動的にクラスタに反映 (新しいバージョンの エコシステムをインストール) helmfile.yaml マニフェスト ・・・ k8s クラスタ バージョンアップした際の マニフェストファイルの 差分を PR にコメント バージョンアップ後の マニフェストファイルを マニフェスト用 リポジトリにコミット
サステナブルなエコシステム管理を目指して バージョンアップに伴う差分をビジュアリング PR に GitHub Actions からコメント
サステナブルなエコシステム管理を目指して helmfile と Renovate の Tips どちらもプライベートな helm repository を参照することができるため
非公開の helm Chart も管理することができる(弊社では自作 Chart もすべて管理) 1. helmfile で helm repository に対する認証情報の設定する(サンプルを参照ください) 2. Renovate で helm repository に対する認証情報を設定する(サンプルを参照ください) Renovate の PR の単位はコンフィグレーションで柔軟に制御が可能なので 開発と本番環境用に別々の PR を発行するといったことも可能 1. helmfile.yaml を /dev/ と /prd/ ディレクトリ以下にそれぞれ配置 2. Renovate の設定でディレクトリごとに PR を分ける(サンプルを参照ください) 3. /dev/ に対する PR をマージ、開発クラスタ上での動作確認 時間の関係で説明し切れない部分はサンプルリポジトリを用意したのでご参照ください https://github.com/sshota0809/cndt2022-helmfile-renovate-sample ROOT dev/ prd/ helmfile.yaml helmfile.yaml
まとめ
Kubernetes とエコシステムのライフサイクル エコシステムは運用自動化ができたり大変便利だが、 しっかりとバージョン追従をすることが大切 エコシステム運用の難しさ 特にエコシステムやクラスタの数が増えるとエコシステム自体の構成管理や バージョンアップにかかる運用工数など様々な課題が表面化する サステナブルなエコシステム管理を目指して helmfile と
Renovate を利用することでエコシステムの構成管理、 自動的なバージョンアップを行うことができる それによってエコシステムやクラスタの数が増えても持続可能な運用を行うことができる まとめ