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
68
GitOpsで始めるクラウドリソース管理
k8sの仕組みを使ったGitOpsを用いたクラウドリソース管理についての社内勉強会で使用した資料になります。
参考になれば幸いです。
nutslove
April 05, 2025
Tweet
Share
More Decks by nutslove
See All by nutslove
Thanos入門(Receiver構成)
nutslove
0
37
OpenTelemetryによるベンダーニュートラルな監視設定
nutslove
5
430
Grafana Lokiで始めるPodログ/k8s Events管理
nutslove
0
2.2k
Grafana Lokiで始めるログ管理
nutslove
7
9.2k
Istio入門
nutslove
18
8.1k
ステートフルPodのマルチAZ化のために行ったこと
nutslove
2
890
AMP, AMG, X-Ray等、AWSマネージドサービスを活用した監視環境構築
nutslove
2
1.2k
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
133
9.2k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
380
A Modern Web Designer's Workflow
chriscoyier
693
190k
How to train your dragon (web standard)
notwaldorf
91
6k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
118
51k
Code Review Best Practice
trishagee
67
18k
Build The Right Thing And Hit Your Dates
maggiecrowley
35
2.6k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
103
19k
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
YesSQL, Process and Tooling at Scale
rocio
172
14k
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リソースのデプロイ