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

FluxからArgo CDに移行したら お手製カナリアリリースが動かなくなった話 (20230...

FluxからArgo CDに移行したら お手製カナリアリリースが動かなくなった話 (20230317_k8s_flux_to_argocd)

2023年3月17日にKubernetesの勉強会で登壇したときのスライドです。

Meetup 2023-03: Empowered by Kubernetes
https://rakuten-sapporo.connpass.com/event/270338/

概要
- Flux v1からArgo CDに移行しました
- CircleCIで組んでいたお手製カナリアリリースが動かなくなりました
- 理由、イメージの自動更新の仕様に違いがあったためです

Koki Senda

March 17, 2023
Tweet

More Decks by Koki Senda

Other Decks in Programming

Transcript

  1. 自己紹介 ▪ 名前: 千田 航己 (せんちゃん) ▪ 職種: SRE, バックエンドエンジニア

    2 ▪ リソース管理 • Kubernetes • AWS ▪ モニタリング • Datadog ▪ 基盤システム開発 • 通知配信基盤 • 音声処理基盤 ▪ CI/CD • CircleCI • Argo CD
  2. 自己紹介 ▪ 名前: 千田 航己 (せんちゃん) ▪ 職種: SRE, バックエンドエンジニア

    3 ▪ リソース管理 • Kubernetes • AWS ▪ モニタリング • Datadog ▪ 基盤システム開発 • 通知配信基盤 • 音声処理基盤 ▪ CI/CD • CircleCI • Argo CD
  3. 結論: イメージ自動更新の仕様の違い ▪ Flux v1 • Deployment単位で最新のタグを取得する • → 同じイメージのDeploymentを複数定義して、違うタグを参照できる

    ▪ Argo CD Image Updater • イメージ単位で最新タグを取得する • → 同じイメージのDeploymentを複数定義すると、同じタグを参照することになる 5
  4. 現在のアーキテクチャ ▪ GitOps 6 k8sクラスタ
 マニフェスト
 リポジトリ
 Argo CD
 Sync


    Container
 Registry
 反映
 CircleCI
 Build & Push
 Appリポジトリ
 監視
 Argo CD
 Image Updater

  5. 以前のアーキテクチャ ▪ GitOps 7 k8sクラスタ
 マニフェスト
 リポジトリ
 Sync
 Container
 Registry


    反映
 CircleCI
 Build & Push
 Appリポジトリ
 監視
 Flux v1
 Flux v1

  6. Flux v1からArgo CDに移行 ▪ GitOps 8 k8sクラスタ
 マニフェスト
 リポジトリ
 Argo

    CD
 Sync
 Container
 Registry
 反映
 CircleCI
 Build & Push
 Appリポジトリ
 監視
 Argo CD
 Image Updater

  7. ▪ Flux v1はEnd of Lifeを迎えている • 2022年11月にアーカイブ済み Flux v1からArgo CDに移行した背景

    ▪ 動作が遅くなってきた • 一度のデプロイで30分以上かかる • 追跡対象が増えてきたから? 9
  8. ▪ イメージに異なるprefixをつける お手製カナリアリリース 10 Canary Primary metadata.labels.app: my-api spec.selector.app: my-api

    my-api:primary-v1.2.3 my-api:canary-v1.2.3 1. Canaryイメージを   Build & Push 2. wait 3. Primaryイメージを   Build & Push
  9. ▪ イメージに異なるprefixをつける お手製カナリアリリース 11 Canary Primary metadata.labels.app: my-api spec.selector.app: my-api

    my-api:canary-v1.2.4 my-api:primary-v1.2.3 my-api:canary-v1.2.3 1. Canaryイメージを   Build & Push 2. wait 3. Primaryイメージを   Build & Push
  10. ▪ イメージに異なるprefixをつける お手製カナリアリリース 12 Canary Primary metadata.labels.app: my-api spec.selector.app: my-api

    my-api:canary-v1.2.4 my-api:primary-v1.2.3 my-api:canary-v1.2.3 1. Canaryイメージを   Build & Push 2. wait 3. Primaryイメージを   Build & Push
  11. ▪ イメージに異なるprefixをつける お手製カナリアリリース 13 Canary Primary metadata.labels.app: my-api spec.selector.app: my-api

    my-api:primary-v1.2.4 my-api:canary-v1.2.4 my-api:primary-v1.2.3 my-api:canary-v1.2.3 1. Canaryイメージを   Build & Push 2. wait 3. Primaryイメージを   Build & Push
  12. apiVersion: apps/v1 kind: Deployment metadata: annotations: flux.weave.works/automated: “true” flux.weave.works/tag.my-api: glob:

    canary-* spec: template: metadata: labels: app: my-api spec: containers: - name: my-api image: my-registry.com/my-api apiVersion: apps/v1 kind: Deployment metadata: annotations: flux.weave.works/automated: “true” flux.weave.works/tag.my-api: glob: primary-* spec: template: metadata: labels: app: my-api spec: containers: - name: my-api image: my-registry.com/my-api Deployment定義 14 Canarry Primary
  13. Argo CDの場合 ▪ Application • Argo CDのリソース管理単位 15 my-api •

    Deployment • Service • ・・・ sugoi-api • Deployment • Service • ・・・ my-batch • CronJob • ・・・ App 1 App 2 App 3
  14. Argo CD Image Updaterを使ってイメージを自動更新 ▪ Argo CD Image Updater •

    自動的に最新のタグを取得してくれるツール • Application内で同じイメージのタグを複数共存させられない • 例: my-appの中でmy-apiのDeploymentのタグはv1.2.3のみ 16 my-api • Deployment • Service • ・・・ sugoi-api • Deployment • Service • ・・・ my-batch • CronJob • ・・・ App 1 App 2 App 3 最新: v1.2.3 Argo CD
 Image Updater

  15. apiVersion: argoproj.io/v1alpha1 kind: Application metadata: annotations: argocd-image-updater.argoproj.io/write-back-method: git argocd-image-updater.argoproj.io/image-list: "\

    my-registry.com/my-api,\ my-registry.com/sugoi-api” spec: destination: server: 'https://kubernetes.default.svc' source: path: applications/my-app repoURL: '[email protected]:thousanda/k8s-manifests.git' targetRevision: main apiVersion: apps/v1 kind: Deployment metadata: annotations: flux.weave.works/automated: “true” flux.weave.works/tag.my-api: glob: primary-* spec: template: metadata: labels: app: my-api spec: containers: - name: my-api image: my-registry.com/my-api Argo CDの場合のマニフェスト定義 17 Application Deployment
  16. お手製カナリアリリースが動かない ▪ 1種類のタグしか取得できない! ▪ 2つのDeploymentが同じタグを参照してしまう! 19 my-api:primary-v1.2.3 my-api:canary-v1.2.3 my-api •

    Deployment for canary • Deployment for primary • Service • ・・・ App 1 最新: my-api: primary-v1.2.3 Canary Primary Argo CD
 Image Updater

  17. 結論: イメージ自動更新の仕様の違い ▪ Flux v1 • Deployment単位で最新のタグを取得する • → 同じイメージのDeploymentを複数定義して、違うタグを参照できる

    ▪ Argo CD Image Updater • イメージ単位で最新タグを取得する • → 同じイメージのDeploymentを複数定義すると、同じタグを参照することになる 20
  18. むすび ▪ Flux v1からArgo CDに移行した ▪ お手製カナリアリリースが動かなかった ▪ Argo CD

    Image Updaterの仕様 • Application内でひとつのイメージに対してひとつのタグしか適用できない → Argo Rolloutsを導入してカナリアリリースすることにしました 21