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

GitOps共有会

johnmanjiro
August 17, 2022

 GitOps共有会

johnmanjiro

August 17, 2022
Tweet

More Decks by johnmanjiro

Other Decks in Technology

Transcript

  1. johnmanjiro
    GitOps共有会

    View full-size slide

  2. 1. 今日の目標
    2. GitOpsとは
    3. ArgoCDとは
    アジェンダ

    View full-size slide

  3. 今日の目標
    ● GitOpsについてなんとなくわかる
    ● ArgoCDについてなんとなくわかる
    今日やりたいのは全体感の共有(導入指南ではない)
    実際導入するかの判断材料になれば嬉しい
    概要を知りチームで議論した上で、
    最終的に導入しないという判断をすることもありだと思う

    View full-size slide

  4. GitOpsとは
    GitリポジトリをSingle Source of Truthとしてアプリケーションとインフラの両方を
    管理するCD手法
    リソースを常にGitの状態に合わせる
    2017年にWeaveworksが提唱した
    管理手法なので利用はKubernetesに限らない(実際はk8sが多い)

    View full-size slide

  5. GitOpsとは
    GitOpsには2種類ある
    Push型 Pull型

    View full-size slide

  6. GitOpsとは
    Push型
    既存で実施している方法
    k8sクラスタの外からapplyするのでPush
    git push
    (PRマージ) 発火 apply

    View full-size slide

  7. GitOpsとは
    Pull型
    k8sクラスタの中にデプロイする君がいてGitリポジトリをpolling
    リポジトリのmanifestと実際のリソースに差分があったらapply
    差分をとってきてapplyするのでPull
    世間一般でのGitOpsはこっち
    git push
    (PRマージ) polling
    差分があったら
    apply

    View full-size slide

  8. なぜPull型なのか
    Push型のデメリット
    ● CIの権限が強すぎる
    ○ CI乗っ取られたら終わる
    ● CIとCDを分離できない
    ○ アプリケーションの開発とk8sの管理が別チームの場合やりづらい
    ● k8sのリソースが直接変化したときにGitリポジトリと同期できない
    ○ Single Source of Truthとは
    Pull型のメリット
    ● クラスタ内でデプロイするのでCIに権限がいらない
    ● CIとCDを明確に分離できる(上と同じ理由)
    ● Gitリポジトリをpollingしているのでリソースが変わってもリポジトリに同期できる
    ○ 逆にいうとkubectl editしても戻される(設定で変更可能)
    ● Revert時にアプリケーションのCI(RSpecなど)がいらない(構成のところで解説)
    ○ 後からアプリケーション側でもRevertする必要はある

    View full-size slide

  9. Pull型GitOpsの構成

    View full-size slide

  10. Pull型の構成
    Application Repo
    Amazon ECR
    2. docker imageを
    push
    Manifest Repo
    1. 機能開発の
    PRマージ
    3. manifestのimageタグを
    書き換えるPRを作成
    polling
    5. 差分を検知
    6.
    apply
    4. PRマージ
    ● リポジトリが2つに分かれる
    ○ ApplicationとManifestは完全にライフサイクルやCIの内容が違う
    ○ RevertでApplicationのCIを待たなくてよくなる

    View full-size slide

  11. GitOpsのまとめ
    ● GitリポジトリをSingle Source of TruthとしたCD手法
    ● Push型とPull型がある
    ● 世間一般でのGitOpsにはPull型が使われる
    ● Gitリポジトリに合わせるので手で直接いじっても戻される
    ● Pull型の構成ではリポジトリが2つにわかれる(ApplicationとManifest)
    ● Revert時にアプリケーションのCIを待たなくていい
    ○ しかし、アプリケーション側でもRevertをかける必要がある

    View full-size slide

  12. ArgoCDとは

    View full-size slide

  13. ArgoCDとは
    Application Repo
    Amazon ECR
    2. docker imageを
    push
    Manifest Repo
    1. 機能開発の
    PRマージ
    3. manifestのimageタグを
    書き換えるPRを作成
    polling
    5. 差分を検知
    6.
    apply
    4. PRマージ

    View full-size slide

  14. ● Kubernetes上でGitOpsを実現するCDツール
    ● Argo Projectで開発されている
    ○ 既存で使っているArgo Rolloutsの兄弟
    ● GitOpsツールとしては有名
    ○ 情報もいっぱい
    ArgoCDとは

    View full-size slide

  15. ● 導入が簡単
    ○ 運用はしっかり考える必要がありそう
    ● Argo Projectのツールをすでに使っている
    ○ Argo Rollouts
    ● 高機能なGUI
    ○ デモサイト:https://cd.apps.argoproj.io/applications
    ○ マニフェストのeditもGUIからできる
    ● Sync(Gitリポジトリとk8sを一致させること)を細かく設定できる
    なぜArgoCDか?

    View full-size slide

  16. ● Application
    ○ ArgoCDが管理する対象
    ○ GitHubのリポジトリなどを指定する
    ● Project
    ○ 自由にProjectを切ることができる
    ● Resource Hooks
    ○ SyncのPhaseをフックに色々実行できる
    ● Self Heal
    ○ 手動でリソースが変更された場合に Gitの状態に戻す
    ○ 使わないことも可能
    ● リソースの一部を管理から外すこともできる
    ○ 例:Deploymentのreplicasを外せばHPAがreplicasを書き換えても怒られない
    ArgoCDの概要

    View full-size slide

  17. ● Hook(Sync Phase)
    ○ PreSync
    ○ Sync ← 通常ここで実行される
    ○ Skip
    ○ PostSync
    ○ SyncFail
    ● Sync Wave
    ○ 各Phaseの中でのapplyする順番
    ○ Sync
    ■ Sync Wave: 1
    ■ Sync Wave : 2 ← 1, 2の順番でapplyされる
    どれも各リソース(e.g. Deployment)にannotationで設定できる
    Resource Hooks
    差分を取得 apply
    Sync

    View full-size slide

  18. マイグレーションの自動化ができる
    PreSync:マイグレーションJobをapply、実行
    Sync:通常のアプリケーションをapply
    Resource Hooksで何ができるのか?
    注意点
    ● この構成の場合マイグレーションは常に実行される

    View full-size slide

  19. ● 2つのRevert PR
    ○ ManifestとApplication両方にRevertが必要
    ○ argocd-image-updaterもあるけどCIのメリットがなくなる
    ● マイグレーションするかしないかを設定
    ○ 個別にJobをSyncするとかでできなくはない
    ○ ほぼ常にJobがOutOfSyncになる
    ArgoCDで大変そう(?)なこと

    View full-size slide

  20. ● Kubernetes上でGitOpsを実現するCDツール
    ● リッチなGUIがある
    ● Sync PhaseとSync Waveを組み合わせることで、マイグレーションの自動
    化も可能
    ● Self Healで常にGitの状態に合わせることができる
    ● リソースの一部を管理から外すことでHPAも使える
    ● 一方でRevert PRが複数必要になるなどの懸念点もある
    ArgoCDまとめ

    View full-size slide

  21. まとめ
    ● GitOpsはGitをSingle Source of TruthとしたCD手法
    ● ArgoCDはGitOpsをKubernetes上で実現するためのCDツール
    ● 導入する場合は運用が大きく変わるのでみんな理解しているとよさそう

    View full-size slide

  22. ● Guide To GitOps
    ● ArgoCDドキュメント
    ● ArgoCDデモサイト
    ● argocd-notifications
    ● 5 GitOps Best Practices
    ● ArgoCDに入門する
    参考リンク

    View full-size slide