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

GitOps ツール徹底比較!あなたに必要なツールがきっと見つかる

makocchi
September 09, 2020

GitOps ツール徹底比較!あなたに必要なツールがきっと見つかる

CNDT 2020 での発表資料です
「GitOps ツール徹底比較!あなたに必要なツールがきっと見つかる」

makocchi

September 09, 2020
Tweet

More Decks by makocchi

Other Decks in Technology

Transcript

  1. Presented by @makocchi
    1
    CNDT 2020
    GitOps ツール徹底比較!
    あなたにぴったりな GitOps ツールがきっと見つかる
    GitOps
    しようよ!

    View full-size slide

  2. CNDT 2020 | @makocchi 2
    Makoto Hasegawa
    Working at // AI Division, CyberAgent, Inc
    Currently //
    Develop and maintain private OpenStack cloud.
    Develop and maintain Kubernetes as a Service platform.
    CKA (Certified Kubernetes Administrator) CKA-1700-0150-0100
    CKAD (Certified Kubernetes Application Developper) CKAD-1800-0005-0100
    Job Title // Technical Lead Infrastructure Engineer
    WHO am I
    Twitter // @makocchi
    Facebook // makocchi0923
    Hobby // Playing bass

    View full-size slide

  3. CNDT 2020 | @makocchi 3
    Japan Container Days V18.04
    「Docker だけじゃないコンテナ runtime 徹底比較」
    https://speakerdeck.com/makocchi/about-container-runtimes-japan-container-days-
    v18-dot-04
    Japan Container Days V18.12
    「runc だけじゃないコンテナ low level runtime 徹底比較」
    https://speakerdeck.com/makocchi/jkd-20181205-about-low-level-runtimes
    CloudNative Days Tokyo 2019
    「Kubernetes に Audit log を求めるのは間違っているのだろうか?」
    https://speakerdeck.com/makocchi/cndt2019-kubernetes-audit-log-
    c4d4c5f6-6058-40f9-a5fc-abbb36073a19
    Makoto Hasegawa

    View full-size slide

  4. Presented by @makocchi
    CNDT 2020
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    4
    やった!
    いっぱい撮るぞ
    今日の発表資料は後ほど公開します
    写真は撮る必要ありませんが、
    撮りたい人は好きなだけ撮って下さい
    だってオンラインだもの

    View full-size slide

  5. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    5
    いい感じにスベった暖まってきたところで・・

    View full-size slide

  6. TODAY'S AGENDA
    #CNDT2020 #CNDT2020_A
    6
    GitOps とは?
    GitOps ツール比較
    GitOps Engine について
    まとめ
    GitOps の仕組み

    View full-size slide

  7. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    7
    さっそくですが
    "GitOps" とは?
    について説明していきます

    View full-size slide

  8. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    8
    GitOps とは?
    https://www.weave.works/blog/gitops-operations-by-pull-request
    言葉として広まったのは Weaveworks 社が blog で
    発表してからと言われています
    blog「Operations by Pull Request」(2017/08)
    Weaveworks 社では 2016 年から使われているようです
    簡単に言うと、、、
    Gitへの変更をコミットし、
    Pull Request を作成して、
    それを承認する、

    というサイクルで Kubernetes 上のリソースを管理するということです

    View full-size slide

  9. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    9
    Kubectl apply
    Kubectl apply -k
    Kubectl set image
    helm upgrade
    https://static.sched.com/hosted_files/kccncna19/a4/flux-cd-deep-dive.pdf
    } git push
    GitOps とは?
    ざっくり言ってしまうと、上記のような操作を git push(merge) で自動で行う手法です

    View full-size slide

  10. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    10
    GitOps とは?
    GitOps を実現する上で欠かせないルールがいくつかあります
    例えばこんな感じです。
    すべての Kubernetes のリソース構成を Git リポジトリに保存する
    Git リポジトリのリソースは Pull Request 経由でのみ変更する
    Git リポジトリのリソースが変更されたら、その変更を自動でクラスターに適用する
    クラスターの実際の状態が Git リポジトリのリソースと違っている場合は、それを修正する
    ここらへんの定義は運用しているチームによって若干違ってくる場合があると思いますが、
    概ねこんな感じになるのではないでしょうか

    View full-size slide

  11. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    11
    GitOps とは?
    GitOps によってもたらされるメリットとしては下記のようなものがあります
    環境に対する変更が Git の履歴によって分かりやすくなる
    誰がいつ何を変更したのかが分かる
    いつでも前の環境に戻すことができる
    環境に対する変更の差分が分かりやすくなる
    Pull Request によるレビュープロセスを通すことで組織のガバナンスを適用することができる
    自動化による運用コスト軽減
    Deploy に関してコマンドラインは一切使う必要が無い
    すごいでしょ

    View full-size slide

  12. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    12
    GitOps とは?
    CI/CD のパイプラインを考えた時に、GitOps が担当する部分は CD の部分になります (諸説あります)
    CI
    パイプライン
    Image
    Registry
    コードの更新
    Pull Request 作成
    Pull Request の merge
    いい感じに自動で Deploy
    CI
    CD

    View full-size slide

  13. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    13
    GitOps とは?
    CI/CD のパイプラインを考えた時に、GitOps が担当する部分は CD の部分になります (諸説あります)
    CI
    パイプライン
    コードの更新
    Pull Request 作成
    Pull Request の merge
    いい感じに自動で Deploy
    Image
    Registry

    View full-size slide

  14. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    14
    GitOpsの仕組み
    Git のリポジトリの更新を検知する方法によって 2 通りの GitOps の手法が存在します
    つまり

    View full-size slide

  15. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    15
    GitOpsの仕組み
    Git のリポジトリの更新を検知する方法によって 2 通りの GitOps の手法が存在します
    つまり
    Push 型
    Webhook
    いい感じに Deploy してくれるやつ

    View full-size slide

  16. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    16
    GitOpsの仕組み
    Git のリポジトリの更新を検知する方法によって 2 通りの GitOps の手法が存在します
    つまり
    Push 型 1VMMܕ
    Webhook Polling
    いい感じに Deploy してくれるやつ
    このようにアプローチの仕方で分かれます

    View full-size slide

  17. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    17
    GitOpsの仕組み
    Push 型の最たるパターンは Git リポジトリからの Webhook を受けて Deploy が実行されることでしょう
    Webhook の飛ばし先としては・・・・
    Push 型
    Webhook

    View full-size slide

  18. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    18
    GitOpsの仕組み
    Push 型の最たるパターンは Git リポジトリからの Webhook を受けて Deploy が実行されることでしょう
    このように Circle CI や GitHub Actions のようになると思います
    Push 型
    Webhook
    Circle CI
    GitHub Actions
    Travis CI
    ... and so on
    {
    Push 型の場合は Circle CI や GitHub Actions 内で Kubernetes に
    対して Deploy をすることになります (CIOps とも言われています)
    apply

    View full-size slide

  19. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    19
    GitOpsの仕組み
    Push 型の場合は Kubernetes のクラスターに対する認証情報を外部に(Deploy するやつ)に持たせないといけません
    Push 型
    また、対象の Kubernetes のクラスターは API の endpoint を外部にさらさないといけません
    組織によってはセキュリティ要件的に不可能なケースもあるかもしれません
    一方で、manifest 内の暗号化した文字列を apply 前に復号化するといった作業はしやすいメリットがあります
    (例 : sealed secret など https://github.com/bitnami-labs/sealed-secrets)

    View full-size slide

  20. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    20
    GitOpsの仕組み
    Pull 型の場合は Kubernetes クラスター内に展開した Agent のようなものが
    GitHub レポジトリを定期的に見に行く(Polling) ことになります
    1VMMܕ
    Polling
    なのでもう少し分かりやすくすると・・・・

    View full-size slide

  21. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    21
    GitOpsの仕組み
    Pull 型の場合は Kubernetes クラスター内に展開した Agent のようなものが
    GitHub レポジトリを定期的に見に行く(Polling) ことになります
    1VMMܕ
    Polling
    Polling 自分自身に対して
    Deploy する

    View full-size slide

  22. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    22
    GitOpsの仕組み
    Pull 型は Kubernetes の API を外部にさらす必要はありません (オンプレミス内でもOK!)
    また Kubernetes クラスターの認証情報もクラスター内に留めておくことが可能です
    1VMMܕ
    Polling 自分自身に対して
    Deploy する
    一方で manifest 内で暗号化されている部分を復号化して apply するといったことは少し困難になります
    Kubernetes External Secrets のようなものと一緒に使うのがいいでしょう
    (https://github.com/godaddy/kubernetes-external-secrets)

    View full-size slide

  23. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    23
    結局 Push 型と 1VMM ܕどちらがいいの?
    どちらが良い、悪いというのは一概には言えない部分があります
    ご自身や所属チームが運用しやすいと思った方式で良いと思います
    個人的にはよりセキュアに運用できる Pull 型をオススメします
    Pull 型のほうが
    オススメ

    View full-size slide

  24. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    24
    "GitOps" について理解が深まったところで
    さっそくツールの話に入っていきます!
    ようやく本題

    View full-size slide

  25. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    25
    先に謝っておきます
    本セッションは Pull 型のツールの話をします
    Push 型のファンの皆様ごめんなさい!

    View full-size slide

  26. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    26
    それでは本日の主役の
    ツール達に登場してもらいましょう

    View full-size slide

  27. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    27

    View full-size slide

  28. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    28
    まずは表面的な比較からいきましょう
    Google Trend / Github Status / Contributors / Foundation

    View full-size slide

  29. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    29
    GitOps ツール比較 〜 Google Trend 〜
    直近 1 年間の Google Trend です
    Argo CD が少し Trend 的には優勢のようですね

    View full-size slide

  30. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    30
    GitOps ツール比較 〜 Google Trend 番外編〜
    少し話がずれてしまいますが、GitOps の Trend です
    近年徐々に広まっているということが分かりますね
    Weaveworksによる
    Blog の発表

    View full-size slide

  31. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    31
    GitOps ツール比較 〜 開発状況編〜
    GitHub Stars GitHub commits Contributors Foundaion
    5400+ 4800+ 230+ CNCF (sandbox)
    3700+ 2400+ 270+ CNCF (Incubating)※
    3700+ 9500+ 190+ CDF
    Flux と Argo CD は CNCF によって管理されています
    一方で Jenkins X は Jenkins と共に CDF (Continuous Delivery Foundation) によって管理されています
    とは言っても CDF は Linux Foundation 配下なので、CNCF とあまり違いは無いかもしれません
    (※ 正確には CNCF に登録されているのは Argo workflow のほう)
    ※2020/09/01時点

    View full-size slide

  32. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    32
    続いて機能の比較をしていきます

    View full-size slide

  33. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    33
    https://github.com/fluxcd/flux
    Flux は一言で言ってしまうと非常にシンプルな作りになっています
    Flux の設定・操作は fluxctl を使います
    Flux の Agent をクラスターに展開する際に Git のリポジトリや
    ディレクトリ、Namespace 等を指定して起動させます
    つまり 1 Agent = 1 リポジトリ定義 になります
    複数のリポジトリ定義、例えば Production や Staging 等を branch
    を分けている場合、同一のクラスターに展開したい場合は定義毎に
    Flux の Agent を起動させないといけません (※注意事項あり)
    ということでマルチテナント環境の場合においても、それぞれのテ
    ナントの環境毎に Agent が必要になります
    複数動かす場合は serviceaccount と clusterrolebinding に注意
    (flux という名前固定で serviceaccount や clusterrolebinding が作
    成されるので後から install するやつに上書きされる可能性あり)

    View full-size slide

  34. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    34
    https://github.com/fluxcd/flux
    Flux のインストール手順 (公式手順より)
    # namespace Λ࡞੒
    $ kubectl create ns flux
    # flux ͷ deployment Λ࡞੒
    $ export GHUSER="makocchi-git"
    $ fluxctl install \
    --git-user=${GHUSER} \
    --git-email=${GHUSER}@users.noreply.github.com \
    [email protected]:${GHUSER}/flux-get-started \
    --git-path=namespaces,workloads \
    --namespace=flux | kubectl apply -f -
    # public key Λੜ੒͢Δ
    # ͜ΕΛ github ͷ repo ͷ deploykey ʹొ࿥͢Δ
    # write ݖݶ͕ඞཁ
    $ fluxctl identity --k8s-fwd-ns flux
    ssh-rsa AAAA.....
    ※ もちろん Helm による install もサポートされています (https://charts.fluxcd.io)

    View full-size slide

  35. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    35
    https://github.com/fluxcd/flux
    デフォルトでは Flux は sync state を Git の tag で管理します
    場合によっては Git の tag を勝手につけて欲しくない場合もあるか
    もしれませんが、その場合にはリポジトリに Deploy key を登録する
    際に権限を readonly にしておきましょう。その際に Agent に
    "--git-readonly" を渡すのを忘れずに
    通常は Polling で一定間隔で Git リポジトリを見ていますが、手動
    で sync させることももちろん可能です (fluxctl sync)
    # ϚχϡΞϧͰ sync ͤ͞Δ
    $ fluxctl sync --k8s-fwd-ns flux
    Synchronizing with ssh://[email protected]/makocchi-git/flux-get-
    started
    Revision of master to apply is 116fca5
    Waiting for 116fca5 to be applied ...
    Done.

    View full-size slide

  36. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    36
    https://github.com/fluxcd/flux
    Flux の Agent は port 3031 経由で metrics を取得することができ
    ます(Prometheus 形式)
    例えば "flux_daemon_sync_manifests{success='false'} > 0" のよ
    うに監視しておけば、manifest の apply に失敗した場合検知するこ
    とができます
    シンプルな作りなゆえ、実行に必要なリソースは非常に軽量
    version 1.20.2 において binary は 60MB 程 / メモリ使用は 40MB 以下
    が、Flux にできることはこれだけじゃない!

    View full-size slide

  37. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    37
    https://github.com/fluxcd/flux
    Flux が監視するのは実は Git リポジトリだけではなくて、Image を
    監視することもできます (flux 的には「policy」という定義)
    Image が更新されたら deployment も更新される仕組み
    Policy は annotation で自由に設定が可能です
    例えばコンテナ名が "myapp" で image に "nginx:1.18.0" を使用
    していたとすると・・・
    "fluxcd.io/tag.myapp: glob:1.18.*" としておくと 1.18.x の
    image が更新される度に deployment を更新してくれます
    Git の更新(image tag の更新)は flux が自動でやってくれます
    これはもはや GitOps というか ImageOps(造語)

    View full-size slide

  38. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    38
    Argo CD の特徴としては、なんといっても GUI があることではないで
    しょうか
    設定や状態の確認、マニュアルの Sync 操作等すべて GUI から可能です
    誰でも見れるデモサイトがあります
    https://cd.apps.argoproj.io/
    https://github.com/argoproj/argo-cd

    View full-size slide

  39. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    39
    Argo CD は Git リポジトリや ディレクトリ や deploy 先のクラスター等
    の定義を「Application」という名前で定義します
    Application である程度細かく権限を設定できるのでマルチテナントで
    も問題なく運用できるでしょう (別途 Argo CD 管理者が居たほうがいい
    と思いますが)
    Argo CD は各種設定が Custom Resource で定義されるので、いわゆる
    Argo CD で Argo CD を管理することが可能です
    この手法を「App Of Apps Pattern」といいます
    https://argoproj.github.io/argo-cd/operator-manual/cluster-bootstrapping/#app-of-apps-pattern
    https://github.com/argoproj/argo-cd

    View full-size slide

  40. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    40
    Argo CD のインストール手順 (公式手順より)
    # namespace Λ࡞੒
    $ kubectl create namespace argocd
    # ֤छίϯϙʔωϯτͷ install
    $ kubectl apply -n argocd -f https://raw.githubusercontent.com/
    argoproj/argo-cd/stable/manifests/install.yaml
    # ha ߏ੒Ͱ install ͢Δ manifest ΋༻ҙ͞Ε͍ͯ·͢
    $ kubectl apply -n argocd -f https://raw.githubusercontent.com/
    argoproj/argo-cd/stable/manifests/ha/install.yaml
    Install 後、「kubectl port-forward」や LoadBalancer を定義すること
    で argocd-server の Pod にアクセスすると GUI 操作が可能になります
    GUI の初期 password は argocd-server の Pod 名 (例えばこんな感じ
    argocd-server-77875446bc-mtl2v) です
    https://github.com/argoproj/argo-cd

    View full-size slide

  41. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    41
    Argo CD は複数の「Application」を動かすことができるので、例えばこ
    のように中央集権 Argo CD を立てて、多数のクラスターを管理すると
    いったことも可能です
    イケてるクラスター
    ステキなクラスター
    ワンダフルなクラスター
    まとめて
    面倒みちゃる
    イケてるApplication
    ワンダフルApplication
    ステキApplication
    https://github.com/argoproj/argo-cd

    View full-size slide

  42. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    42
    もちろんこういったパターンや
    イケてるクラスター
    ステキなクラスター
    ワンダフルなクラスター
    https://github.com/argoproj/argo-cd

    View full-size slide

  43. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    43
    こういったパターンも有りかなと思います
    イケてるクラスター
    ステキなクラスター
    ワンダフルなクラスター
    要件に応じていろいろな構成パターンが組めるのは Argo CD の魅力だと思います
    https://github.com/argoproj/argo-cd

    View full-size slide

  44. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    44
    Argo CD も各種 metrics を Prometheus 形式で取得可能です
    Install 手順に従っていれば "argocd-metrics" 及び "argocd-server-
    metrics" の Service のエンドポイントが作成されています
    Prometheus 側は scrape 先に上記のエンドポイントを port 8082 で設
    定するだけ
    Grafana の dashboard もあります
    https://github.com/argoproj/argo-cd

    View full-size slide

  45. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    45
    https://github.com/jenkins-x/jx
    Jenkins X が提供するものは前述の Flux や Argo CD とは少し異な
    り、CI/CD のパイプラインそのものを構築します (GitOps が組み込
    まれている)
    様々な OSS が組み合わさって Jenkins X が成り立っています
    Helm V3
    Skaffold
    Kaniko
    Nexus
    ChartMuseum
    Velero
    Prow
    Tekton
    Lighthouse
    Vault
    UI は octant の plugin が提供されている
    (https://github.com/jenkins-x/octant-jx)
    言い換えると、これだけのものがインストールされるということ

    View full-size slide

  46. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    46
    https://github.com/jenkins-x/jx
    Jenkins という名前が入っていますが、いわゆるあの "Jenkins" と
    は違ったものです
    https://jenkins-x.io/docs/resources/content/
    ちょっと前までは
    ワシがロゴじゃったのよ・・

    View full-size slide

  47. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    Jenkins X は jx コマンドで操作します
    jx コマンドは何でもできてしまう・・すごいやつ (Jenkins X の設定や
    操作はもちろんのこと、Kubernetes クラスターの作成も可能、istio や
    flagger といったアドオンもインストールすることができます)
    「jx boot」でインストールが可能 (従来の「jx install」は deprecated)
    無事にインストールが終わると staging 用と production 用の 2 つの
    Git リポジトリが作成され、これが GitOps 用のリポジトリになります
    dev の Git リポジトリも作成されるが、これは「jx boot」用
    アプリケーションの Git リポジトリを Jenkins X に import もしくは
    「jx create quickstart」することでやっと準備が整います
    47
    https://github.com/jenkins-x/jx

    View full-size slide

  48. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    少しアーキテクチャが複雑なのが残念なところですね・・
    48
    https://github.com/jenkins-x/jx

    View full-size slide

  49. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    簡単にするとこうなります(1/3)
    49
    https://github.com/jenkins-x/jx
    Preview
    Pull Request
    Webhook
    App Staging Production
    Tekton Registry

    View full-size slide

  50. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    簡単にするとこうなります(2/3)
    50
    https://github.com/jenkins-x/jx
    Preview
    Merge
    Webhook
    App Staging Production
    Tekton Registry
    Pull Request
    & merge
    Webhook
    Staging

    View full-size slide

  51. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    簡単にするとこうなります(3/3)
    51
    https://github.com/jenkins-x/jx
    Preview
    App Staging Production
    Tekton Registry
    Staging
    jx promote
    Pull Request
    & merge
    Webhook
    Production

    View full-size slide

  52. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    52
    GitOps ツール比較 〜 機能編〜
    インストール Multi
    Tenancy GUI ImageOps その他



    (※)
    ChatOps૊ΈࠐΈ
    CI/CD ͢΂ͯΧόʔ
    Jenkins X はインストール自体は簡単ですが、使用するコンポーネントが多く時間がかかる点や、設定の複雑さがあります
    Flux は Multi Tenancy が必要な時にも対応は可能ですが、すこし手がかかります
    (こちらにベストプラクティスが載っています https://github.com/fluxcd/multi-tenancy)
    Argo CDは強力な GUI を使えるメリットがあります
    ※2020/09/01時点

    View full-size slide

  53. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    53
    各種 GitOps ツールについて
    みなさんのお気に入りは
    見つかりましたでしょうか?

    View full-size slide

  54. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    54
    GitOps Engine のお話

    View full-size slide

  55. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    55
    Argo CD + Flux = Argo Flux
    2019 年 11 月に衝撃的なニュースが飛び込んできました
    なんと Argo CD と Flux おんなじようなことやってるから
    一緒になっちゃおうぜ!って発表がありました
    GitOps Engine という仕組みでお互いを共通化していき、
    お互いに不足している部分をカバーしあっていこうという
    素晴らしい動きだと思いました
    https://www.weave.works/blog/argo-flux-join-forces
    ちょwおまww

    View full-size slide

  56. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    56
    GitOps Engine のリリース
    発表以来しばらく動きが無かったのですが、
    2020 年 6 月についに最初の GitOps Engine がリリース!
    Argo と Flux 統合は進んでいるかのように見えたのですが・・
    世の中そう上手くいくことばかりでは無かったのです
    https://blog.argoproj.io/argo-cd-v1-6-democratizing-gitops-with-gitops-engine-5a17cfc87d62

    View full-size slide

  57. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    57
    Argo Flux 計画の破綻
    Flux は GitOps Engine を取り込んで Flux v2 として提供できるように
    いろいろ検証を進めていたのですが、
    「我々(コントリビューター)が考えるビジョン (v2) を提供するためには
     GitOps Engine では駄目だ」
    と結論付け、新たに「GitOps Toolkit」を作成し、
    Flux v2 へ組み込む道を選びました
    GitOps 界の戦国時代はまだまだ続きそうですね
    音楽性の違いってやつ?
    GitOps Toolkit 作るわ
    GitOps Engine 続けるわ

    View full-size slide

  58. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    58
    GitOps Toolkit について
    GitOps Toolkit についてはこちらにアーキテクチャやドキュメントが
    記載されていますので、是非御覧ください
    GitOps Toolkit についての発表は
    こちらの Weaveworks の blog をどうぞ
    https://toolkit.fluxcd.io/
    https://www.weave.works/blog/gitops-with-flux-v2

    View full-size slide

  59. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    59
    というわけで
    さっそく GitOps Toolkit 触ってみた
    GitOps Toolkit
    やっぱ気になるよね!

    View full-size slide

  60. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    60
    GitOps Toolkit
    https://github.com/fluxcd/toolkit
    fluxctl ではなく gotk というコマンドラインツールになりました
    Git リポジトリの定義や sync の間隔、リポジトリ内のどのディレクトリ
    を見るか等の設定はすべて Custom Resource に移行されました
    gitrepositories.source.toolkit.fluxcd.io
    kustomizations.kustomize.toolkit.fluxcd.io
    などなど
    インストールは 「gotk bootstrap」 で行います
    gitops-system namespace が作成され、ここに controller 達が
    Deploy されます
    インフラ用の Git リポジトリが作成され、Deploy key も自動で登録さ
    れます (Flux v1では手動だったので便利になった)
    リポジトリには初期の bootstrap される manifest 達が入っています
    GitOps Toolkit
    だよね・・多分

    View full-size slide

  61. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    61
    GitOps Toolkit
    https://github.com/fluxcd/toolkit
    bootstrap が終わればあとは Git リポジトリを更新するとクラスターへ適
    用してくれるようになります
    いろいろな設定が Custom Resource になったので、Flux(v1) の時のよう
    に複数の agent/controller を動かす必要が無くなりました
    通知(アラート)の機能が備わっています!
    これは slack の例。他には Discord や Teams などにも対応しています

    View full-size slide

  62. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    62
    GitOps Toolkit
    https://github.com/fluxcd/toolkit
    Flux(v1) の時にあった Image の更新検知は・・・?
    残念ながら現段階ではできない様子
    ロードマップに載っているんですが・・現在はデザインもされていない
    https://toolkit.fluxcd.io/roadmap/
    GUI 対応もロードマップに無いので、予定は無さそうですね

    View full-size slide

  63. CNDT 2020
    @makocchi
    #CNDT2020 #CNDT2020_A
    インストール Multi
    Tenancy GUI ImageOps その他



    (※)
    ChatOps૊ΈࠐΈ
    CI/CD ͢΂ͯΧόʔ
    ઈࢍ։ൃத
    63
    GitOps ツール比較 v2 〜 機能編〜
    ※2020/09/01時点
    GitOps Toolkit
    GitOps Toolkit は Flux の弱点を上手く克服してきていますね
    今後に期待できそうです

    View full-size slide

  64. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    64
    本日のまとめ

    View full-size slide

  65. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    65
    ??
    ?
    とりあえず手軽に GitOps というものを
    体験してみたい

    View full-size slide

  66. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    66
    ??
    ?
    もう Git をいちいち更新するのも面倒くさい
    新しい Image を Push したら
    勝手に Deployしてほしい

    View full-size slide

  67. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    67
    ??
    ?
    GUI 見ながらリソースが適用されていく
    様子を見てニヤニヤしたい

    View full-size slide

  68. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    68
    ??
    ?
    「CI/CD のパイプラインをいい感じに作っといて。
    あ 明日までね。
    ついでに Git リポジトリもよろしく」
    「!?」

    View full-size slide

  69. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    69
    ??
    ?
    タコが好きです

    View full-size slide

  70. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    70
    ??
    ?
    新しいのが大好き!
    触ってみたい!
    GitOps Toolkit

    View full-size slide

  71. CNDT 2020 | @makocchi
    Why not find your favorite GitOps tools? #CNDT2020 #CNDT2020_A
    71
    みなさんにお願い!!
    GitOps に興味が出てきた人は
    是非試してみてください!
    セッションを見るだけで終わらせずに、
    何らかのアクションをしてみましょう!
    約束だぞ!  

    View full-size slide

  72. Presented by @makocchi
    72
    CNDT 2020
    GitOps ツール徹底比較!
    あなたにぴったりな GitOps ツールがきっと見つかる
    GitOps
    しようよ!
    FINISH
    ご清聴ありがとうございました!!
    GitOps ツール徹底比較!
    あなたにぴったりな GitOps ツールがきっと見つかる
    All images in this presentation are picked from pixabay.com

    View full-size slide