Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GitOpsで始めるクラウドリソース管理

nutslove
April 05, 2025
68

 GitOpsで始めるクラウドリソース管理

k8sの仕組みを使ったGitOpsを用いたクラウドリソース管理についての社内勉強会で使用した資料になります。
参考になれば幸いです。

nutslove

April 05, 2025
Tweet

Transcript

  1. 話す内容 2025/4/5 2 • GitOpsについて ➢ GitOpsとは ➢ GitOpsの仕組み ➢

    GitOpsのメリット ➢ GitOpsのためのツール • デモ ➢ CrossPlane + ArgoCD + Kyverno ➢ Terraform + Flux + Flux Tofu Controller
  2. GitOpsとは 2025/4/5 4 • Git上のコードをSingle Source of Truth(正)として、 リソースを常にコードと同じ状態に同期するデプロイメント手法 •

    現時点ではGitOpsはKubernetesの仕組みを使うのが一般的(※) 最初はk8sのネイティブリソース(e.g. Pod)が対象だったが、 k8sのAPIを拡張した各種ツールが登場したことによって、 クラウドリソースの管理も可能に。 ※Pipecdなどk8sの仕組みを使わず、独自のReconcileロジックを実装しているものもある
  3. 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: ・・中略・・
  4. ※補足: 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上のあるべき状態と 実際のリソースの状態に差分が ある場合、必要な対応をする
  5. GitOpsの仕組み(Operator/Controller) 2025/4/5 8 • Reconciliation Loopを行う主体 • etcd上に登録されているリソースのあるべき状態と、 実際のリソースの状態を定期的に比較し、差分がある場合、 あるべき状態にリソースを同期する

    • 例えば、Deploymentリソースを管理するController(※) は 常に指定した数のPod(=ECSのTask)が動くように働きかける ※kube-controller-managerに内包されている
  6. 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
  7. GitOpsのメリット 2025/4/5 10 • ドリフト検出 ➢ Git上のコードの状態 = 実際のリソースの状態を維持できる •

    CDパイプラインが不要 ➢ CIパイプラインは必要 • Admission Controllerを使ったPolicy as Codeの実現 ➢ Flux Tofu Controllerを使う場合は例外
  8. GitOpsのためのツール 2025/4/5 11 • ArgoCD ➢ Gitリポジトリ上のマニフェストファイルとk8s上のリソースを比較し、 KubernetesのリソースをGitの状態に同期する ➢ 基本Kubernetesのリソースが管理対象

    ➢ GUIベース • Flux ➢ Tofu Controllerというコンポーネントを追加することで TerraformリソースもGitOps方式で管理できる ➢ CUIベース
  9. クラウドリソースを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のコメントとして投稿してくれる
  10. 組み合わせパターン(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に保存せず、リクエストを拒否する
  11. 組み合わせパターン(2) 2025/4/5 16 • Terraform + Flux + Flux Tofu

    Controller ➢ Terraform: クラウドリソースの管理 ➢ Flux: Git上コードのドリフト検出、k8sリソースの管理 ➢ Flux Tofu Controller: クラウドリソースのデプロイ・ドリフト検出 Git上のコードを監視 Tofu Controller etcd上のFluxの リソースを監視 AWS(のリソース)を監視、 AWSリソースのデプロイ