×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
同一クラスタ上での FluxCDとArgoCDの リソース最適化の話 石川雲(Kumo Ishikawa) 株式会社サイバーエージェント メディア統括本部 サービスリライアビリティグループ(SRG)
[email protected]
Slide 2
Slide 2 text
自己紹介 ● 石川 雲(いしかわ くも) ● 2023年11月サイバーエージェント中途入社 ● 全社横断SRE組織に所属 ● 現在Ameba Platformチームで活動中 x: @ishikawa_kumo
Slide 3
Slide 3 text
テーマ: 水平スケーリングと Podの分散
Slide 4
Slide 4 text
スコープ: AmebaのEKS
Slide 5
Slide 5 text
1.現状 2.問題 3.解決 4.まとめ
Slide 6
Slide 6 text
現状 AmebaのEKS運用 ❏ Develop/Staging/Production ❏ AmebaBlogと関連サービス ❏ Shared ❏ CI/CD関連ワークロード
Slide 7
Slide 7 text
現状 AmebaのCI/CD
Slide 8
Slide 8 text
現状 AmebaのCI/CD Platform Team Dev Team
Slide 9
Slide 9 text
現状 AmebaのCI/CD ① ② ③ ④ ⑤
Slide 10
Slide 10 text
現状 AmebaのArgoCD Applicationの構造 ❏ ArgoCD Applicationの単位: MicroService ❏ MicroService Appsの単位: KubeVela Application MicroService App 1 App 2
Slide 11
Slide 11 text
現状 KubeVelaのメリット ❏ Dev Team: 最小の知識でコンテナを管理する ❏ Platform Team: テンプレート管理する CNDT 2021 シングルクラスターマルチテナン シーを目指しているEKS上で kubevelaの運用をしてみた
Slide 12
Slide 12 text
現状 KubeVelaのメリット ❏ Dev Team: 最小の知識でコンテナを管理する ❏ Platform Team: テンプレート管理する KubeVelaのデメリット ❏ ArgoCD Image Updaterが使えない ⇨ 代わりにFluxCD Image Updaterを使った
Slide 13
Slide 13 text
現状 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を使っている
Slide 14
Slide 14 text
1.現状 2.問題 3.解決 4.まとめ
Slide 15
Slide 15 text
問題 Ameba EKS上の変化 ⇨ 処理限界が来ている
Slide 16
Slide 16 text
問題 問題1: ArgoCD UI上パフォーマンス悪い、同期が遅い ➢ パフォーマンスチューニングが足りない チューニングに関しては以下の記事と動画 CloudNative Days Winter 2024 プレイベント 記事: HA構成のArgoCDパ フォーマンス最適化への道
Slide 17
Slide 17 text
問題 問題2: FluxCDのコンポーネントがよく落ちる・Image更新されない (本題) ➢ Node メモリ不足でFluxCD Evict ❏ ArgoCD Application Controller Pod単体のメモリが2~3GB超え ❏ 開発目的でNodeのサイズが小さい(4GB) ❏ FluxCD Pod分散配置がない、ArgoCDと同NodeにスケジュールされるとEvict
Slide 18
Slide 18 text
1.現状 2.問題 3.解決 4.まとめ
Slide 19
Slide 19 text
解決 1. 利用可能のメモリを増やす ❏ Nodeサイズアップ ❏ Argo/FluxはNodeAffinityで制限 2. Podのメモリを分散させる ❏ Argo/Flux 水平スケーリング ❏ メモリ消費が多いPodはPodAntiAffinityで制限
Slide 20
Slide 20 text
解決 1. 利用可能のメモリを増やす ❏ Nodeサイズアップ ❏ Argo/FluxはNodeAffinityで制限 2. Podのメモリを分散させる ⇦ 採択 ❏ Argo/Flux 水平スケーリング ❏ メモリ消費が多いPodはPodAntiAffinityで制限
Slide 21
Slide 21 text
解決 Podのメモリを分散させる3つのステップ 1. Argo 水平スケーリング 2. Flux 水平スケーリング 3. Argo/FluxのPod分散
Slide 22
Slide 22 text
解決 - ArgoCD水平スケーリング ArgoCD主要コンポーネントの水平スケーリング ❏ Deployment(Repo, Api, ApplicationSet) ❏ Replica数変更+ENV変更(Apiのみ) ❏ StatefulSet(ApplicationController, Redis/Redis HAProxy) Sharding ❏ Replica数+ENV変更 ❏ Redisは変更できない
Slide 23
Slide 23 text
解決 - ArgoCD水平スケーリング ArgoCDのSharding ❏ Sharding方法: 簡単 ❏ Replica数、ENVなど変更するだけ ❏ Sharding対象: application-controllerのみ ❏ Sharding単位: クラスタ ❏ ShardへResource Assign: 自動・手動
Slide 24
Slide 24 text
解決 - 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手動指定 ❏ クラスタ間のリソース数・優先度が不均等な場合
Slide 25
Slide 25 text
解決 - FluxCD水平スケーリング FluxCD主要コンポーネントの水平スケーリング(Sharding) ❏ Sharding方法: かなり複雑 ❏ 公式のbootstrap用kustomize templateあり ❏ Sharding対象: 全てのController ❏ Sharding単位: Flux Custom Resource ❏ ShardへResource Assign: 手動
Slide 26
Slide 26 text
解決 - FluxCD水平スケーリング 詳細 ❏ 複数deploymentの作成が必要 ❏ 構成: Main Controller + Shard Controller ❏ Format: -
Slide 27
Slide 27 text
解決 - FluxCD水平スケーリング 詳細 ❏ Command Arguments、matchLabelsなどで調整 ❏ annotationでshard/mainロール区別
Slide 28
Slide 28 text
解決 - FluxCD水平スケーリング 詳細 ❏ ShardへのResource Assignは手動のみ ❏ Shard指定のないリソースはMain Controllerで管理
Slide 29
Slide 29 text
解決 - Podの分散 ArgoCDのPodAntiAffinity(デフォルト) 例: application-controller 1. application-controllerのPodをそれぞれ異なる Node に分散配置 2. ArgoCDの全てのPodをそれぞれ異なる Node に分散配置
Slide 30
Slide 30 text
解決 - Podの分散 FluxCDのPodAntiAffinity デフォルト設定がないので、以下のルールを追加 1. 各Shardは異なるNodeに分散配置 2. argocd-application-controllerとは異なるNodeに分散配置 ただし、ShardとMain Controllerは別々で設定
Slide 31
Slide 31 text
解決 - Podの分散 ShardとMain Controllerは別々で設定 main controller shard1
Slide 32
Slide 32 text
1.現状 2.問題 3.解決 4.まとめ
Slide 33
Slide 33 text
まとめ ❏ Amebaの特殊ニーズにより、ArgoCD/FluxCDの併用が必要 ❏ FluxCD落ちるの根本原因: Nodeメモリの使い方 ❏ 水平スケーリングでPodごとのメモリ負荷を減らす ❏ PodAntiAffinityの活用で分散配置
Slide 34
Slide 34 text
ありがとうございました