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
790
脱・塩漬け!サステナブルな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 Auto ModeでKubernetesの運用をシンプルにする
sshota0809
1
510
Amazon EKS Auto ModeでKubernetesの運用をシンプルにする
sshota0809
0
410
ネットワーク視点で学ぶ Amazon EKS クラスタのスケーラビリティ
sshota0809
2
2k
ユーザーの理想からはじめるサービスの信頼性定義
sshota0809
2
650
Google Cloud Anthos Day 登壇資料
sshota0809
0
130
Helm / ArgoCD で実現する Kubernetes における宣言的リソースデリバリーの実践
sshota0809
3
3.8k
Kubernetes における宣言的なリソースデリバリーの実践
sshota0809
1
540
【SRE NEXT 2020】冗長性と生産性を高めるハイブリッドクラウド環境の実現
sshota0809
2
7.4k
VXLANを使ったプライベートクラウドVMマイグレーションの実現
sshota0809
0
300
Other Decks in Technology
See All in Technology
Kubernetes環境周りの責任範囲をいい機会なので考える / Taking the Opportunity to Clarify Kubernetes Responsibilities
kohbis
1
100
生成AIで始める業務改革 - 製造業編 in 福島 -
daikikanemitsu
2
610
欲しいを叶える個人開発の進め方 / How to Run an Indie Project That Brings Your Ideas to Life
endohizumi
0
120
インシデント対応入門
grimoh
6
4.4k
生成AIの研究活用_AILab2025研修
cyberagentdevelopers
PRO
11
5.4k
使って学ぼう MCP (と GitHub Codespaces)
tsubakimoto_s
1
200
Three-Legged OAuth in AgentCore Gateway
hironobuiga
1
110
AWSが推進するAI駆動開発ライフサイクル入門 〜 AI駆動開発時代に必要な人材とは 〜/ introduction_to_aidlc_and_skills
fatsushi
7
3.5k
AIで「ふとした疑問」を即座に検証する 〜定量で圧倒するN1理解〜
kakehashi
PRO
2
550
xDS を活用したサービスディスカバリーで実現するブランチ別 QA 環境の構築手法
knwoop
1
170
「データの価値を、みんなの武器に。」Data Enablementの価値とツラみ
ryoskdara_
1
120
意志を実装するアーキテクチャモダナイゼーション
nwiizo
3
1.1k
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
190
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
120
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.1k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
120
Test your architecture with Archunit
thirion
1
2.2k
Code Review Best Practice
trishagee
74
20k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
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 を利用することでエコシステムの構成管理、 自動的なバージョンアップを行うことができる それによってエコシステムやクラスタの数が増えても持続可能な運用を行うことができる まとめ