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
72
GitOpsで始めるクラウドリソース管理
k8sの仕組みを使ったGitOpsを用いたクラウドリソース管理についての社内勉強会で使用した資料になります。
参考になれば幸いです。
nutslove
April 05, 2025
Tweet
Share
More Decks by nutslove
See All by nutslove
MCP入門
nutslove
2
63
Thanos入門(Receiver構成)
nutslove
0
38
OpenTelemetryによるベンダーニュートラルな監視設定
nutslove
5
440
Grafana Lokiで始めるPodログ/k8s Events管理
nutslove
0
2.2k
Grafana Lokiで始めるログ管理
nutslove
7
9.4k
Istio入門
nutslove
18
8.1k
ステートフルPodのマルチAZ化のために行ったこと
nutslove
2
910
AMP, AMG, X-Ray等、AWSマネージドサービスを活用した監視環境構築
nutslove
2
1.2k
Featured
See All Featured
Docker and Python
trallard
44
3.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
35
2.7k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
34
2.2k
BBQ
matthewcrist
88
9.6k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.4k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
105
19k
GitHub's CSS Performance
jonrohan
1030
460k
Automating Front-end Workflow
addyosmani
1370
200k
A better future with KSS
kneath
239
17k
Gamification - CAS2011
davidbonilla
81
5.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.7k
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リソースのデプロイ