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

メルカリにおけるZone aware routing

sanposhiho
October 19, 2023
920

メルカリにおけるZone aware routing

Kubernetes Meetup Tokyo #61
https://k8sjp.connpass.com/event/298147/

sanposhiho

October 19, 2023
Tweet

More Decks by sanposhiho

Transcript

  1. 2 Mercari JP Platform Infra team / 2022卒新卒 Kubernetes upstream

    approver (SIG-Scheduling) Kubernetes Contributor award 2022 winner Kensei Nakada / sanposhiho
  2. 11 俺の名前は高校生探偵工藤新一 新卒2年目にしてネットワークチームに配属され、FinOps担当になった俺はInter zone egressと言う怪しげで高額な取引を目撃した。 「Zone Aware Routingをちょちょっと設定すればええやん (easy!)」 コスト削減額の試算に夢中になっていた俺は、背後から近づいてくる黒づくめの(?)イン

    シデント達に気が付かなかった…… いや、ギリギリ事前に気が付いた。 「このインシデントの可能性達を野放しにしておけば、誰かが同じ轍を踏み、周りの人 間にも危害が及ぶ」 そう思った俺は、奴らの情報を共有するため、K8s meet upのセッション募集に転が り込んだ… Prologue
  3. 23 Kubernetes: Topology Aware Routing (hint) - service.kubernetes.io/topology-mode: Auto annotationを

    Serviceにつけるだけで有効になる - 現状のClusterに存在するNodeのcore数から、「どのEndpointでどの Zoneからの通信を処理するか」を決定する
  4. 24 Kubernetes: Topology Aware Routing (hint) - service.kubernetes.io/topology-mode: Auto annotationを

    Serviceにつけるだけで有効になる - 現状のClusterに存在するNodeのcore数から、「どのEndpointでどの Zoneからの通信を処理するか」を決定する
  5. 25 Kubernetes: Topology Aware Routing の仕組み - Kubernetes側からは「どのPodがどのPodへ通信を送り得るのかが判断で きない」 -

    Zoneに存在するNodeのリソース数がそのZoneが生成するトラフィック量に 比例すると仮定
  6. 26 Kubernetes: Topology Aware Routing の仕組み NodeのCPUの総量が zoneA:zoneB:zoneC = 3:3:5

    → 生み出されるトラフィックの量も zoneA:zoneB:zoneC = 3:3:5 になると仮定
  7. 33 どちらの機能が使用できるか 通信を送るPodが... - Istio sidecarを持っている場合 → Istio Locality Load

    Balancing - Istio sidecarを持ってない場合 → K8s Topology Aware Routing 「よし、んじゃあ設定するだけやな」 「ほんまに大丈夫か?」
  8. 34 どちらの機能が使用できるか 通信を送るPodが... - Istio sidecarを持っている場合 → Istio Locality Load

    Balancing - Istio sidecarを持ってない場合 → K8s Topology Aware Routing 「よし、んじゃあ設定するだけやな」 「Podはほんまにすべての Zoneに存在するんか?」
  9. 38 博士「PodはほんまにすべてのZoneに存在するんか?」 アイデア: Pod Topology Spreadの使用 - Pod Topology Spreadを使用してすべてのZoneに均等にPodを配置

    - HPAでMinReplicasを3に設定 「よし、これでPodが全部のZoneにスケジュールされ るはずやな」 「ほんまに大丈夫か?」
  10. 39 博士「PodはほんまにすべてのZoneに存在するんか?」 アイデア: Pod Topology Spreadの使用 - Pod Topology Spreadを使用してすべてのZoneに均等にPodを配置

    - HPAでMinReplicasを3に設定 「よし、これでPodが全部のZoneにスケジュールされ るはずやな」 「スケジューリング制約を常に信じてしまってええん か?」
  11. 52 Kubernetes: Topology Aware Routing の仕組み NodeのCPUの総量が zoneA:zoneB:zoneC = 3:3:5

    → 生み出されるトラフィックの量も zoneA:zoneB:zoneC = 3:3:5 になると仮定 「…」 「そもそも、ほんまにこの仮定って信じていい んか?」
  12. 55 Cluster Autoscaler (GKE) - location_policy: BALANCED を使うことで、Zone間でのNodeの数のば らつきを抑えてくれる -

    常に均等であると保証はされない - Scale Downの際にはZoneは考慮されない。単純に 使用率が低いNodeから削除される
  13. 61 ここまでの話し - PodはPod Topology Spread(w/ descheduler)を使えばZoneに均等 に割り振れる - 通信を送る側、受け取る側両方に設定の必要がある

    - IstioのLocality Load Balancingはこれで大丈夫そ う - ただ、K8sのTopology Aware Routingは各ZoneのNodeの総core数が Endpointの割り振りに影響する - そして、ZoneごとにNodeの総core数を均一にするの はどうしても難しい
  14. 70 検証内容 - Google Cloud metricsのpod_flow/egress_bytes_countを使用 - どのNamespaceからどのNamespaceへどのくらい の通信量があるかが見える -

    これを使用して通信量が多いサービス間通信を検証の ターゲットに - K8sのTopology Aware Routingを使用 - Istioの方は別途検証中
  15. 82 まとめ - Zone Aware Routing (Istio/K8s)はただ設定をいじるだけで有効になる が、単純に有効にするだけでは問題の種になり得る - Pod

    Topology Spread (w/ descheduler)を使うのは一つの手ではある が、K8sのZone Aware Routingを使う時はNodeの数に注意が必要 - また、サービスの数によっては、セットアップのめんどさ もある - Zone毎にDeploymentとHPAを作るのがシンプルでいいかも - ただ、マニフェスト管理等のめんどさもある - メルカリではKubernetes Kitを通して解決予定 (WIP)
  16. 83 We are めっちゃ hiring!!! Platformで働く仲間をめっちゃ探しています!!!! 今回話したこと以外にも、めっちゃ色んな面白いことやってます!!! - istioとかのnetworkらへん -

    内製しているCI/CD基盤開発 - 開発者向けの内製抽象化レイヤーの開発 - etc…. ! 「メルカリ Platform 採用」でいますぐ検索!