Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

同一クラスタ上でのFluxCDとArgoCDのリソース最適化の話

Kumo Ishikawa
December 10, 2024

 同一クラスタ上でのFluxCDとArgoCDのリソース最適化の話

Kumo Ishikawa

December 10, 2024
Tweet

More Decks by Kumo Ishikawa

Other Decks in Technology

Transcript

  1. 現状 KubeVelaのメリット ❏ Dev Team: 最小の知識でコンテナを管理する ❏ Platform Team: テンプレート管理する

    CNDT 2021 シングルクラスターマルチテナン シーを目指しているEKS上で kubevelaの運用をしてみた
  2. 現状 KubeVelaのメリット ❏ Dev Team: 最小の知識でコンテナを管理する ❏ Platform Team: テンプレート管理する

    KubeVelaのデメリット ❏ ArgoCD Image Updaterが使えない ⇨ 代わりにFluxCD Image Updaterを使った
  3. 現状 ArgoCD Image Updaterが使えない ❏ 2021~2022: ArgoCD Image UpdaterはCustomResourceに対応していない ❏

    Kustomize/Helmにのみ対応 ❏ 当時は本番で使えないと判断 ❏ 2023~: Kustomize Image Transformerで頑張ればなんとかなりそう ❏ Custom image field type: image=xxx:yy O ❏ Custom image field type: image: xxx, tag: yy X ⇨ 今でもFluxCD Image Updaterを使っている
  4. 問題 問題2: FluxCDのコンポーネントがよく落ちる・Image更新されない (本題) ➢ Node メモリ不足でFluxCD Evict ❏ ArgoCD

    Application Controller Pod単体のメモリが2~3GB超え ❏ 開発目的でNodeのサイズが小さい(4GB) ❏ FluxCD Pod分散配置がない、ArgoCDと同NodeにスケジュールされるとEvict
  5. 解決 1. 利用可能のメモリを増やす ❏ Nodeサイズアップ ❏ Argo/FluxはNodeAffinityで制限 2. Podのメモリを分散させる ⇦

    採択 ❏ Argo/Flux 水平スケーリング ❏ メモリ消費が多いPodはPodAntiAffinityで制限
  6. 解決 - ArgoCD水平スケーリング ArgoCD主要コンポーネントの水平スケーリング ❏ Deployment(Repo, Api, ApplicationSet) ❏ Replica数変更+ENV変更(Apiのみ)

    ❏ StatefulSet(ApplicationController, Redis/Redis HAProxy) Sharding ❏ Replica数+ENV変更 ❏ Redisは変更できない
  7. 解決 - ArgoCD水平スケーリング ArgoCDのSharding ❏ Sharding方法: 簡単 ❏ Replica数、ENVなど変更するだけ ❏

    Sharding対象: application-controllerのみ ❏ Sharding単位: クラスタ ❏ ShardへResource Assign: 自動・手動
  8. 解決 - ArgoCD水平スケーリング Resource Assign: Sharding Algorithmについて ❏ Legacy(v1.8以降): ClusterIDのハッシュでShard決定

    ❏ シンプルさを優先する場合 ❏ Round-Robin(v2.8以降, Alpha): ClusterIDでソート後、均等にShard決定 ❏ クラスタ数において均等な負荷分散を求める場合 ❏ Consistent-Hash(v2.12以降, Alpha): 特殊ハッシュでShard決定 ❏ クラスタ数の変更に対する耐性と安定性を求める場合 ❏ 手動Sharding指定: shard-num手動指定 ❏ クラスタ間のリソース数・優先度が不均等な場合