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
GitOpsで始めるクラウドリソース管理
Search
nutslove
April 05, 2025
1
77
GitOpsで始めるクラウドリソース管理
k8sの仕組みを使ったGitOpsを用いたクラウドリソース管理についての社内勉強会で使用した資料になります。
参考になれば幸いです。
nutslove
April 05, 2025
Tweet
Share
More Decks by nutslove
See All by nutslove
MCP入門
nutslove
2
90
Thanos入門(Receiver構成)
nutslove
0
40
OpenTelemetryによるベンダーニュートラルな監視設定
nutslove
5
450
Grafana Lokiで始めるPodログ/k8s Events管理
nutslove
0
2.2k
Grafana Lokiで始めるログ管理
nutslove
7
9.6k
Istio入門
nutslove
18
8.2k
ステートフルPodのマルチAZ化のために行ったこと
nutslove
2
920
AMP, AMG, X-Ray等、AWSマネージドサービスを活用した監視環境構築
nutslove
2
1.2k
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
The World Runs on Bad Software
bkeepers
PRO
68
11k
Why Our Code Smells
bkeepers
PRO
336
57k
How STYLIGHT went responsive
nonsquared
100
5.6k
Fontdeck: Realign not Redesign
paulrobertlloyd
84
5.5k
Optimizing for Happiness
mojombo
378
70k
A Tale of Four Properties
chriscoyier
159
23k
Designing for humans not robots
tammielis
253
25k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
1
56
Automating Front-end Workflow
addyosmani
1370
200k
Transcript
GitOpsで始めるクラウドリソース管理 2025/4/5 李俊起
話す内容 2025/4/5 2 • GitOpsについて ➢ GitOpsとは ➢ GitOpsの仕組み ➢
GitOpsのメリット ➢ GitOpsのためのツール • デモ ➢ CrossPlane + ArgoCD + Kyverno ➢ Terraform + Flux + Flux Tofu Controller
2025/4/5 3 GitOpsについて
GitOpsとは 2025/4/5 4 • Git上のコードをSingle Source of Truth(正)として、 リソースを常にコードと同じ状態に同期するデプロイメント手法 •
現時点ではGitOpsはKubernetesの仕組みを使うのが一般的(※) 最初はk8sのネイティブリソース(e.g. Pod)が対象だったが、 k8sのAPIを拡張した各種ツールが登場したことによって、 クラウドリソースの管理も可能に。 ※Pipecdなどk8sの仕組みを使わず、独自のReconcileロジックを実装しているものもある
GitOpsの仕組み(Reconciliation Loop) 2025/4/5 5 • 現在のリソースの状態(Current State)と理想の状態(Desired State)を比較し、2つの状態に差分があった場合、理想の状態に 同期させるKubernetesの仕組み
GitOpsの仕組み(Custom Resource Definition(CRD)) 2025/4/5 6 • KubernetesのAPIの拡張し、独自のリソースをk8sの仕組みで管 理できるようにするもの • 以下のようなマニフェストファイルで管理/定義できる
apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: iamusers.nutslove.com spec: group: nutslove.com names: kind: IAMUser listKind: IAMUserList plural: iamusers singular: iamuser scope: Namespaced versions: - name: v1alpha1 served: true storage: true schema: openAPIV3Schema: type: object properties: spec: ・・中略・・
※補足: APIの拡張とは 7 • ユーザはkubectlコマンドラインツールを使って、kube-apiserver にAPIリクエストを送信する • CRDでAPIを拡張するというのは、 kube-apiserverが処理できるAPIの種類を増やすということ kube-apiserver
kube-scheduler kube-controller-manager etcd マスターノード k8sクラスタ オペレーター 2025/4/5 kubectlコマンド API kubernetesの司令塔。 クラスタ内のすべての 処理はkube-apiserver を経由して行われる。 クラスタ内のすべての 情報を保持する キーバリューストア 各リソースの状態をモニタリング し、etcd上のあるべき状態と 実際のリソースの状態に差分が ある場合、必要な対応をする
GitOpsの仕組み(Operator/Controller) 2025/4/5 8 • Reconciliation Loopを行う主体 • etcd上に登録されているリソースのあるべき状態と、 実際のリソースの状態を定期的に比較し、差分がある場合、 あるべき状態にリソースを同期する
• 例えば、Deploymentリソースを管理するController(※) は 常に指定した数のPod(=ECSのTask)が動くように働きかける ※kube-controller-managerに内包されている
CRD、Operatorのプチデモ 2025/4/5 9 • デモ用CRD、Operatorの概要 • IAMユーザ(IAMユーザにアタッチするIAMポリシーとIAMグループも) を管理するCRDとOperator kube-apiserver etcd
k8sクラスタ IAM Operator IAMユーザの実際の状態を確認し、 etcd上の状態と差分がある場合 はetcd上の状態に同期 (kube-apiserver経由で) etcdから IAMユーザのあるべき状態を確認 https://github.com/nutslove/Operator
GitOpsのメリット 2025/4/5 10 • ドリフト検出 ➢ Git上のコードの状態 = 実際のリソースの状態を維持できる •
CDパイプラインが不要 ➢ CIパイプラインは必要 • Admission Controllerを使ったPolicy as Codeの実現 ➢ Flux Tofu Controllerを使う場合は例外
GitOpsのためのツール 2025/4/5 11 • ArgoCD ➢ Gitリポジトリ上のマニフェストファイルとk8s上のリソースを比較し、 KubernetesのリソースをGitの状態に同期する ➢ 基本Kubernetesのリソースが管理対象
➢ GUIベース • Flux ➢ Tofu Controllerというコンポーネントを追加することで TerraformリソースもGitOps方式で管理できる ➢ CUIベース
クラウドリソースをGitOpsで管理するためのツール 2025/4/5 12 • CrossPlane ➢ クラウドリソースをKubernetesのCR(Custom Resource)として管理 ➢ Kubernetesのリソースとして扱えるのでArgoCDやKyvernoなど、
Kubernetesのエコシステムとの高い親和性 • Flux Tofu Controller ➢ FluxでTerraformリソースを管理するためのコンポーネント ➢ Branch Plannerという追加機能を有効にすると、Pull Requestを トリガーにPlanを自動実行し、結果をGithubリポジトリ上に Pull Requestのコメントとして投稿してくれる
2025/4/5 13 Demo
組み合わせパターン(1) 2025/4/5 14 • CrossPlane + ArgoCD + Kyverno ➢
CrossPlane: クラウドリソースの管理・デプロイ・ドリフト検出 ➢ ArgoCD: Git上コードのドリフト検出、k8sリソースの管理 ➢ Kyverno: Policy as Code(Admission Controller)として機能 マニフェストファイル Git上のコードを監視 etcd上の Crossplane リソースを監視 AWS(のリソース)を監視、 AWSリソースのデプロイ etcdに保存する前にkyvernoのポリシーを チェックし、リクエスト内容がポリシーに違反して いたらetcdに保存せず、リクエストを拒否する
※補足: Admission Controller 15 • APIリクエストをetcdに登録する前に、リクエストの内容を検証し、 必要に応じてリクエストの内容を変更したり、リクエストを拒否する もの(仕組み) • KyvernoはAdmission
Controllerの一種 2025/4/5 https://kyverno.io/docs/introduction/admission-controllers/
組み合わせパターン(2) 2025/4/5 16 • Terraform + Flux + Flux Tofu
Controller ➢ Terraform: クラウドリソースの管理 ➢ Flux: Git上コードのドリフト検出、k8sリソースの管理 ➢ Flux Tofu Controller: クラウドリソースのデプロイ・ドリフト検出 Git上のコードを監視 Tofu Controller etcd上のFluxの リソースを監視 AWS(のリソース)を監視、 AWSリソースのデプロイ