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

マルチクラスタ向けLoadBalancer・Ingressによるクラスタ移行 / Migrating between Clusters with MCLB and MCI

マルチクラスタ向けLoadBalancer・Ingressによるクラスタ移行 / Migrating between Clusters with MCLB and MCI

36631e35786e16256423db3c9de70a78?s=128

Daisuke Takahashi

September 02, 2020
Tweet

Transcript

  1. マルチクラスタ向け LoadBalancer/Ingressによる クラスタ移行 高橋大輔, CyberAgent 2020-09-02 @ Cloud Native Days

    Tokyo 2020 Rejekts
  2. Profile – Daisuke Takahashi  Work at: CIU (CyberAgent Group

    Infrastructure Unit) , CyberAgent, Inc.  2019年新卒入社 Infrastructure Engineer  AI Div.と兼務  In charge of:  GPUレンダリング & ML基盤の物理全般  OpenStack環境 / K8s as a Serviceの開発・運用 Daisuke Takahashi, CNDT2020 Rejekts 2020-09-02 2
  3. AKE – K8s as a Service at CyberAgent  Adtech

    Container Engine (2016-)  OpenStack Heat (CloudFormation相当) で、プライベートクラウド上に展開  特徴  GKE並に簡単なデプロイとスケーリング  認証のKeystone連携  type:LoadBalancer, Ingress対応  Persistent Volume対応 (Block, NFS)  今回触れない歴史などは、過去資料をご覧ください (主にここら辺の青山さんの資料など) 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 3
  4. AKE – K8s as a Service at CyberAgent  Adtech

    Container Engine (2016-)  OpenStack Heat (CloudFormation相当) で、プライベートクラウド上に展開  特徴  GKE並に簡単なデプロイとスケーリング  認証のKeystone連携  type:LoadBalancer, Ingress対応  Persistent Volume対応 (Block, NFS)  今回触れない歴史などは、過去資料をご覧ください (主にここら辺の青山さんの資料など) 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 4 以下、「type:LoadBalancerなService」⇒ type:LB
  5. AKE type:LB/Ingressの要件 (-2019) Daisuke Takahashi, CNDT2020 Rejekts 2020-09-02 5 BIG-IPは負荷軽減のためL4

    LBかつL2 DSR専門 外部疎通は必ずハードウェア LB (BIG-IP) を経由 通信制御やアクセス統計・解析などに必要 アプリからSrc IP (Global) が 知りたい [Ingress] type:LoadBalancer, Ingressリソースを作るだけ なるべくGKEに近い使い方
  6. AKE type:LBの仕組み・作成 実装  Private cloud用のcloud-provider 仕組み  L4 LB

    (L2 DSR構成)から各Nodeに転送  例: VIP:PortA→NodeA:PortA  Node内はkube-proxy (とiptables) にお任せ 作成  BIG-IPのAPIを使ってVirtualServer/Poolなど を作成、VMのIPを登録  厳密にはNW共通化API「AXC」を経由 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 6 L4 LB BIG-IP VM VM VM Network Pod Network Cluster
  7. AKE Ingress (CNLB) の仕組み 実装  自前Controllers, OpenStack Heat, Nginx

    Ingress, Calico 仕組み  クラスタ外のVM-Pod NW間を疎通させる  Calicoを活用 (中身はBGP)  L4 LB (L2 DSR構成)からNginxに転送  NginxでX-Forwarded-Forを付加し、 Pod宛にproxy 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 7 VM VM Pod Network Cluster L4 LB BIG-IP Ingress用VM Ingress用VM VM Network
  8. AKE Ingress (CNLB) の作成 作成 1. [Controller] Heat Stackの作成 

    内部的にはIngressリソースとは別にHeatStack Controller/リソースが存在 2. [Heat→色々] Ingress用VMなどの作成 3. [Ingress用VM] Calico (BIRD) による経路交換 4. [Controller] Ingress用VMのIPをL4 LBに登録 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 8 VM VM Pod Network Cluster L4 LB BIG-IP Ingress用VM Ingress用VM VM Network
  9. AKE type:LB/Ingressの構成 (-2019) type:LB Ingress (CNLB) 2020-09-02 Daisuke Takahashi, CNDT2020

    Rejekts 9 L4 LB BIG-IP VM VM VM Network Pod Network Cluster VM VM Pod Network Cluster L4 LB BIG-IP Ingress用VM Ingress用VM VM Network
  10. AKE type:LB/Ingressの要件 (-2019) Daisuke Takahashi, CNDT2020 Rejekts 2020-09-02 10 BIG-IPは負荷軽減のためL4

    LBかつL2 DSR専門 外部疎通は必ずハードウェア LB (BIG-IP) を経由 通信制御やアクセス統計・解析などに必要 アプリからSrc IP (Global) が 知りたい [Ingress] type:LoadBalancer, Ingressリソースを作るだけ なるべくGKEに近い使い方
  11. AKE type:LB/Ingressの要件 (-2019) Daisuke Takahashi, CNDT2020 Rejekts 2020-09-02 11 BIG-IPは負荷軽減のためL4

    LBかつL2 DSR専門 外部疎通は必ずハードウェア LB (BIG-IP) を経由 通信制御やアクセス統計・解析などに必要 アプリからSrc IP (Global) が 知りたい [Ingress] type:LoadBalancer, Ingressリソースを作るだけ なるべくGKEに近い使い方
  12. AKEへの要望 (一部)  K8sバージョンの更新  ake-node-updaterとして、node毎のrolling updateを提供  基本的にpatchバージョンのみサポート 

    利用者の声: 「minorバージョンを更新したい」  クラスタの大幅な構成変更  例: Masterのインスタンスタイプ, ネットワーク設定など  クラスタの一部 or 全部を再作成する必要がある (OpenStack Heatの仕様)  利用者の声: 「なるべく止めたくない」 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 12
  13. マルチクラスタ対応すると…  VIPとクラスタがN:1→N:Nの関係になる  外見的な振る舞いを変更せず、クラスタ側に変更を加えられる  つまり…  新バージョンクラスタを追加 &

    旧バージョンクラスタを除去 = バージョンアップ  新構成クラスタを追加 & 旧構成クラスタを除去 = 構成変更 といったことが可能になる 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 13
  14. AKE type:LB/Ingressの要件 (2020-) Daisuke Takahashi, CNDT2020 Rejekts 2020-09-02 14 BIG-IPは負荷軽減のためL4

    LBかつL2 DSR専門 外部疎通は必ずハードウェア LB (BIG-IP) を経由 通信制御やアクセス統計・解析などに必要 アプリからSrc IP (Global) が 知りたい [Ingress] type:LoadBalancer, Ingressリソースを作るだけ なるべくGKEに近い使い方 AKEクラスタ間の移行パスの確保 複数クラスタ宛にバランシン グしたい【NEW!】
  15. AKE type:LB/Ingressの要件 (2020-) Daisuke Takahashi, CNDT2020 Rejekts 2020-09-02 15 BIG-IPは負荷軽減のためL4

    LBかつL2 DSR専門 外部疎通は必ずハードウェア LB (BIG-IP) を経由 通信制御やアクセス統計・解析などに必要 アプリからSrc IP (Global) が 知りたい [Ingress] type:LoadBalancer, Ingressリソースを作るだけ なるべくGKEに近い使い方 AKEクラスタ間の移行パスの確保 複数クラスタ宛にバランシン グしたい【NEW!】 Multi-cluster LoadBalancer/Ingress (MCLB/MCI) の実装へ
  16. AKE type:LB (MCLB) の仕組み・作成 実装・仕組み (変更なし)  Annotationで機能を有効化  ake.cyberagent.io/mclb:

    "true" 作成  VirtualServer/Poolの作成は、最初のクラ スタのみ実施  NamespaceとService名が一致すれば同一MCLB扱 い  L4 LBにVMのIPと所属クラスタ情報をセッ トで登録  クラスタのtype:LB離脱時や削除時に利用 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 16 VM VM Pod Network Cluster A L4 LB BIG-IP VM Network 203.0.113.120:443 → [ClusterA]Node1:443 → [ClusterA]Node2:443
  17. AKE type:LB (MCLB) の仕組み・作成 実装・仕組み (変更なし)  Annotationで機能を有効化  ake.cyberagent.io/mclb:

    "true" 作成  VirtualServer/Poolの作成は、最初のクラ スタのみ実施  NamespaceとService名が一致すれば同一MCLB扱 い  L4 LBにVMのIPと所属クラスタ情報をセッ トで登録  クラスタのtype:LB離脱時や削除時に利用 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 17 VM VM Pod Network Cluster A VM VM Pod Network Cluster B L4 LB BIG-IP VM Network 203.0.113.120:443 → [ClusterA]Node1:443 → [ClusterA]Node2:443
  18. AKE type:LB (MCLB) の仕組み・作成 実装・仕組み (変更なし)  Annotationで機能を有効化  ake.cyberagent.io/mclb:

    "true" 作成  VirtualServer/Poolの作成は、最初のクラ スタのみ実施  NamespaceとService名が一致すれば同一MCLB扱 い  L4 LBにVMのIPと所属クラスタ情報をセッ トで登録  クラスタのtype:LB離脱時や削除時に利用 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 18 VM VM Pod Network Cluster A VM VM Pod Network Cluster B L4 LB BIG-IP VM Network 203.0.113.120:443 → [ClusterA]Node1:443 → [ClusterA]Node2:443
  19. AKE type:LB (MCLB) の仕組み・作成 実装・仕組み (変更なし)  Annotationで機能を有効化  ake.cyberagent.io/mclb:

    "true" 作成  VirtualServer/Poolの作成は、最初のクラ スタのみ実施  NamespaceとService名が一致すれば同一MCLB扱 い  L4 LBにVMのIPと所属クラスタ情報をセッ トで登録  クラスタのtype:LB離脱時や削除時に利用 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 19 VM VM Pod Network Cluster A VM VM Pod Network Cluster B L4 LB BIG-IP VM Network 203.0.113.120:443 → [ClusterA]Node1:443 → [ClusterA]Node2:443 → [ClusterB]Node1:443 → [ClusterB]Node2:443 ※L4 LBへの登録のタイミングは、 正確にはPod作成後ではなく、Service作成後
  20. 【参考】AKE type:LB (MCLB) 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 20 ※実装前のメモのため、実際とは多少異なります

  21. AKE Ingress (MCI) の仕組み・作成 実装・仕組み (変更なし)  Annotationで機能を有効化  ake.cyberagent.io/mci:

    "true" 作成  VirtualServer/Poolの作成は、最初のクラ スタのみ実施  NamespaceとIngress名が一致すれば同一MCI扱い  L4 LBにIngress用VMのIPと対応するクラス タ情報をセットで登録  クラスタのIngress離脱時や削除時に利用 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 21 VM VM Pod Network Cluster A L4 LB BIG-IP Ingress用VM (A) VM Network Ingress用VM (A) 203.0.113.121:443 → [ClusterA]VM1:443 → [ClusterA]VM2:443
  22. AKE Ingress (MCI) の仕組み・作成 実装・仕組み (変更なし)  Annotationで機能を有効化  ake.cyberagent.io/mci:

    "true" 作成  VirtualServer/Poolの作成は、最初のクラ スタのみ実施  NamespaceとIngress名が一致すれば同一MCI扱い  L4 LBにIngress用VMのIPと対応するクラス タ情報をセットで登録  クラスタのIngress離脱時や削除時に利用 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 22 VM VM Pod Network Cluster A VM VM Pod Network Cluster B L4 LB BIG-IP Ingress用VM (A) VM Network Ingress用VM (A) 203.0.113.121:443 → [ClusterA]VM1:443 → [ClusterA]VM2:443
  23. AKE Ingress (MCI) の仕組み・作成 実装・仕組み (変更なし)  Annotationで機能を有効化  ake.cyberagent.io/mci:

    "true" 作成  VirtualServer/Poolの作成は、最初のクラ スタのみ実施  NamespaceとIngress名が一致すれば同一MCI扱い  L4 LBにIngress用VMのIPと対応するクラス タ情報をセットで登録  クラスタのIngress離脱時や削除時に利用 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 23 VM VM Pod Network Cluster A VM VM Pod Network Cluster B L4 LB BIG-IP Ingress用VM (A) VM Network Ingress用VM (A) 203.0.113.121:443 → [ClusterA]VM1:443 → [ClusterA]VM2:443
  24. AKE Ingress (MCI) の仕組み・作成 実装・仕組み (変更なし)  Annotationで機能を有効化  ake.cyberagent.io/mci:

    "true" 作成  VirtualServer/Poolの作成は、最初のクラ スタのみ実施  NamespaceとIngress名が一致すれば同一MCI扱い  L4 LBにIngress用VMのIPと対応するクラス タ情報をセットで登録  クラスタのIngress離脱時や削除時に利用 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 24 VM VM Pod Network Cluster A VM VM Pod Network Cluster B L4 LB BIG-IP Ingress用VM (B) Ingress用VM (A) VM Network Ingress用VM (A) Ingress用VM (B) 203.0.113.121:443 → [ClusterA]VM1:443 → [ClusterA]VM2:443
  25. AKE Ingress (MCI) の仕組み・作成 実装・仕組み (変更なし)  Annotationで機能を有効化  ake.cyberagent.io/mci:

    "true" 作成  VirtualServer/Poolの作成は、最初のクラ スタのみ実施  NamespaceとIngress名が一致すれば同一MCI扱い  L4 LBにIngress用VMのIPと対応するクラス タ情報をセットで登録  クラスタのIngress離脱時や削除時に利用 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 25 VM VM Pod Network Cluster A VM VM Pod Network Cluster B L4 LB BIG-IP Ingress用VM (B) Ingress用VM (A) VM Network Ingress用VM (A) Ingress用VM (B) 203.0.113.121:443 → [ClusterA]VM1:443 → [ClusterA]VM2:443 → [ClusterB]VM1:443 → [ClusterB]VM2:443
  26. 【参考】AKE Ingress (MCI) 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 26 ※実装前のメモのため、実際とは多少異なります

  27. 今後 利用者からの要望が出てくれば or 他事業への展開に向けて…  L4 LBを使い倒す  例: 重み・優先度付きバランシング

     L7機能の拡充  例: ユーザー・グループ単位のアクセス制御 (Cloud IAP相当) ※まだ個人の妄想レベルです 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 27
  28. まとめ  既存のハードウェアLBを利用して、高性能なtype:LoadBalancer/Ingressを提供  Ingressの中核はNginx Ingressをそのまま利用し、容易にメンテナンス可能  マルチクラスタ対応によって、既存の制約を緩和し、利用者の利便性を向上  社内Wiki

    にてdogfooding → 順調に稼働中  AKEの利用を促進し、オンプレ資産の活用へ  OpenStack Heatの特徴ある挙動に慣れるまでが辛い 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 28
  29. CNDT2020 関連セッション情報  VictoriaMetrics+Prometheusで構築する複数Kubernetesの監視基盤 (1日目 17:00~)  Ingress用VMの監視についてもお話しします! 2020-09-02 Daisuke

    Takahashi, CNDT2020 Rejekts 29
  30. お知らせ その2 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 30

  31. Our AI Platform, on top of Kubernetes and NVIDIA Ampere

    GPUs more details at GTC Fall… nvidia.com/gtc 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 31