Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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に近い使い方

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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に近い使い方

Slide 11

Slide 11 text

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に近い使い方

Slide 12

Slide 12 text

AKEへの要望 (一部)  K8sバージョンの更新  ake-node-updaterとして、node毎のrolling updateを提供  基本的にpatchバージョンのみサポート  利用者の声: 「minorバージョンを更新したい」  クラスタの大幅な構成変更  例: Masterのインスタンスタイプ, ネットワーク設定など  クラスタの一部 or 全部を再作成する必要がある (OpenStack Heatの仕様)  利用者の声: 「なるべく止めたくない」 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 12

Slide 13

Slide 13 text

マルチクラスタ対応すると…  VIPとクラスタがN:1→N:Nの関係になる  外見的な振る舞いを変更せず、クラスタ側に変更を加えられる  つまり…  新バージョンクラスタを追加 & 旧バージョンクラスタを除去 = バージョンアップ  新構成クラスタを追加 & 旧構成クラスタを除去 = 構成変更 といったことが可能になる 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 13

Slide 14

Slide 14 text

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!】

Slide 15

Slide 15 text

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) の実装へ

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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作成後

Slide 20

Slide 20 text

【参考】AKE type:LB (MCLB) 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 20 ※実装前のメモのため、実際とは多少異なります

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

【参考】AKE Ingress (MCI) 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 26 ※実装前のメモのため、実際とは多少異なります

Slide 27

Slide 27 text

今後 利用者からの要望が出てくれば or 他事業への展開に向けて…  L4 LBを使い倒す  例: 重み・優先度付きバランシング  L7機能の拡充  例: ユーザー・グループ単位のアクセス制御 (Cloud IAP相当) ※まだ個人の妄想レベルです 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 27

Slide 28

Slide 28 text

まとめ  既存のハードウェアLBを利用して、高性能なtype:LoadBalancer/Ingressを提供  Ingressの中核はNginx Ingressをそのまま利用し、容易にメンテナンス可能  マルチクラスタ対応によって、既存の制約を緩和し、利用者の利便性を向上  社内Wiki にてdogfooding → 順調に稼働中  AKEの利用を促進し、オンプレ資産の活用へ  OpenStack Heatの特徴ある挙動に慣れるまでが辛い 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 28

Slide 29

Slide 29 text

CNDT2020 関連セッション情報  VictoriaMetrics+Prometheusで構築する複数Kubernetesの監視基盤 (1日目 17:00~)  Ingress用VMの監視についてもお話しします! 2020-09-02 Daisuke Takahashi, CNDT2020 Rejekts 29

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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