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

サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術

 サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術

[Japan Container Days v18.04 Keynote (Production User Stories)]
CyberAgentではプライベートクラウド上にGKEライクなコンテナ基盤を展開するサービスを提供しています。最近では様々な利便性からコンテナでの開発が増えており、オンプレ環境でも Kubernetes as a Serviceの需要があります。サーバ上にKubernetesを展開するだけでは利用できないLoadBalancerやIngressを実現する方法やOpenStackとの連携方法について説明しながら、アドテク領域での利用に耐えうるコンテナ基盤の事例を紹介します。

by Masaya Aoyama (@amsy810)

Masaya Aoyama (@amsy810)

April 19, 2018
Tweet

More Decks by Masaya Aoyama (@amsy810)

Other Decks in Technology

Transcript

  1. MasayaAoyama @amsy810 Masaya Aoyama @CyberAgent [adtech studio] ぼくは 「あくーえ」 ぼくは

    「青山 真也」 αΠόʔΤʔδΣϯτʹ͓͚Δ ϓϥΠϕʔτίϯςφج൫AKEΛࢧ͑Δٕज़
  2. self introduction page 03 連載 「今こそ始めよう! Kubernetes入門」 @ThinkIT Certified Kubernetes Administrator

    (CKA-1700-0138-0100) OpenStack Active Technical Contributor Masaya Aoyama Infrastructure Engineer MasayaAoyama @amsy810 ͋͘ʔ͑
  3. ΠϕϯτΛ੝Γ্͛ΔͨΊ…ϓϨθϯτاը page 05 Raspberry Pi 3 * 3 USB Charger

    6 port 50W 4-Tier acrylic case Switching hub Wi-Fi AP etc… おうち Kubernetes の素
  4. page 07 High Computing Machine Learning を用いたモデル生成 GPU / 分散処理

    などを積極的に利用 データセットは PB クラスに大規模 1 システムあたり 300,000 req/sec〜 をさばく High Traffic DSP システムにおいては 10 ms〜100 ms 以内にレスポンスを返す Low Latency Ad Technology のシステムは性能要件が非常にシビア
  5. “adtech studio” loves Container page 09 Some engineer use Docker

    for development. e.g. Minikube, Nvidia-Docker Local We use AKE On-premise (Unmanaged) We use GCP GKE and AWS ECS Public Cloud (Managed)
  6. timeline option page 011 06 2016 Kubernetes 1.2/1.3 の時代 Docker

    Swarm、Kubernetes、Mesos などの覇権争い Start feasibility study for Container as a Service Engineer needs container platform for technical curiosity.
  7. 04 2017 AKE is Implemented by only 2 people (and

    then, new OpenStack based private cloud was also released) Release AKE 07 2017 Support stable cinder integration from Kubernetes v1.7 CNCF announced “production ready from v1.7” Stable support Persistent Volume
  8. 09 2017 High performance Baremetal LB integration for ad-technology system

    without OpenStack Octavia (LBaaS). Support “type LoadBalancer” 11 2017 Ingress is support L7 loadbalancing. but, specification and implementation are not determined now. Implement “GKE like” Ingress
  9. Creating Cluster page 016 Provisioning K8s OpenStack Heat を用いて自動構築を実施 Scaling

    等も Heat の機能を使って実施 Vaious operation is executed via “ake client” $ ake cluster create amsy810 \ --az ad-izanami-1a \ --network netA …
  10. Release Flow of new version page 017 Build Pached K8s

    Original の Baremetal Loadbalancer 連携のため Patch を当てた Kubernetes をビルド Create OS Image Kubernetes、Docker、etcd など 必要なコンポーネントを組み込んだ OS Image Provisioning K8s OpenStack Heat を用いて自動構築を実施 Scaling 等も Heat の機能を使って実施 Run E2E Test Sonobuoy や bosh を使った E2E Test を実施
  11. Key features of AKE page 019 Add-on system for us

    High performance L4 / L7 LoadBalancer Kubernetes and Swarm (Multi COE) OpenStack integration Multi Container Runtime Tuning for adtech system
  12. page 020 AKE (Adtech Container Engine) key features 02 OpenStack

    integration OpenStack と統合し、独自カスタマイズの Kubernetes 環境を提供 03 High performance L4 / L7 LoadBalancer Integration with hardware load balancer Implement GKE like original ingress controller 01 Kubernetes & Swarm (Multi COE) 複数の COE (Container Orchestration Engine) をサポート
  13. 06 Multi Container Runtime (now planning) 複数の Container Runtime をサポート予定

     Docker, containerd, rkt, kata-container AKE (Adtech Container Engine) key features 05 Tuning for adtech system Network & Kernel & Hypervisor tuning Kubernetes tuning (Horizontal Pod Autoscaler, some controller manager) 04 Add-on mechanism for us 利便性向上のため、アドオン機能の提供  Datadog, EFK (ElasticSearch + Fluentd + Kibana), etc… page 021
  14. Kubernetes & Swarm (Multi COE) page 023 Docker Swarm シンプルな

    COE Kubernetes デファクトスタンダート 高機能な COE type: LoadBalancer 相当の機能を実装 Kernel の Rebuild (for tuning)
  15. OpenStack Integration page 025 アプライアンスストレージと連携して Dynamic Provisioning で Persistent Volume

    を提供 OpenStack Cinder Volume Kubernetes クラスタへの認証で Keystone のユーザ情報を利用 OpenStack Keystone Identity and Auth page 025 AWS CloudFormation 相当 YAML で書かれたマニフェストを用いて Kubernetes クラスタを構築 Heat Custom Resource を独自実装 OpenStack Heat Orchestration CLI などからの接続時は Cluster 名をもとにした名前解決 OpenStack Designate DNS
  16. Why we choose vanilla Heat not some tools? page 026

    OpenStack Magnum Floating IP 等 L3 Network が必要 開発スピードが遅い、大幅な変更 細かい設定が困難 Rancher 2.0 Rancher 2.0 の GA は 5 月 細かい設定が困難 Tectonic 検証時点での知名度は低い 細かい設定が困難 OpenStack 連携した K8s を構築 クラウドやオンプレ上に K8s を構築 既存のクラスタの Import も可能 クラウドやオンプレ上に K8s を構築
  17. Why we choose on VM not baremetal? page 027 Virtual

    Machine Overhead が大きい Baremetal コンテナを詰めすぎると影響範囲が大きい  (コア数の少ない物理サーバで解消可能) 物理サーバのコア数に依存したクラスタサイズ マルチテナントではネットワークの分離が面倒 自在な粒度で Node を切り出せる Overhead が少ない
  18. Service “type: NodePort” page 029 Pod Network (Internal Network) NIC

    NIC IP: x.x.x.x IP: y.y.y.y IP: x.x.x.x ѼͷτϥϑΟοΫ͕ ֤ Pod ʹసૹ͞ΕΔ
  19. Service “type: NodePort” page 030 Pod Network (Internal Network) NIC

    NIC LoadBalancer BIG-IP GCLB IP: x.x.x.x IP: y.y.y.y NodePort + Manual LoadBalancer VIP: z.z.z.z VIP: z.z.z.z ѼͷτϥϑΟοΫ͕ ֤ Pod ʹసૹ͞ΕΔ
  20. Service “type: NodePort” page 031 Pod Network (Internal Network) NIC

    NIC LoadBalancer BIG-IP GCLB IP: x.x.x.x IP: y.y.y.y ϊʔυͷεέʔϧ࣌΍ো֐࣌ʹ LoadBalancer ͷૢ࡞͕ඞཁ VIP: z.z.z.z NIC IP: w.w.w.w
  21. Service “type: LoadBalancer” page 032 Pod Network (Internal Network) NIC

    NIC LoadBalancer BIG-IP GCLB IP: x.x.x.x IP: y.y.y.y खಈͰͷ LoadBalancer ੍ޚ͕ෆཁ ݫີʹ͸ NodePort + LB ͱ͸ҟͳΔ VIP: z.z.z.z NIC IP: w.w.w.w
  22. Implement Baremetal LB Integration page 033 最近は MetalLB なども出てきている “type:

    LoadBalancer” は Cloud Provider Integration で実装 Ad Technology 領域では性能不足 OpenStack では Octavia (LBaaS) が利用可能 Not difficult, it’s easy! Baremetal LB と連携するよう CloudProvider Integration を独自実装 参考: https://developers.cyberagent.co.jp/blog/archives/12058/ 「GKE 互換のオンプレコンテナ基盤 AKE (Adtech Container Engine) 誕生秘話とアーキテクチャ完全公開!」
  23. GKE vs nginx/nghttpx ingress controller page 034 Create Ingress Resource

    GKE ingress controller Create Ingress Resource Create Ingress Controller Deployment Create HorizontalPodAutoscaler Create LoadBalancer Service Rewrite Ingress status for IP Addr nginx/nghttpx ingress controller 参考: https://adtech.cyberagent.io/techblog/archives/3758 「オンプレでも GKE Like な Ingress を使うために 自作 Ingress Controller を実装してみた」
  24. GKE vs nginx/nghttpx ingress controller page 035 Create Ingress Resource

    GKE ingress controller Create Ingress Resource Create Ingress Controller Deployment Create HorizontalPodAutoscaler Create LoadBalancer Service Rewrite Ingress status for IP Addr AKE ingress controller 参考: https://adtech.cyberagent.io/techblog/archives/3758 「オンプレでも GKE Like な Ingress を使うために 自作 Ingress Controller を実装してみた」 Auto provisioning
  25. ake addon mechanism page 037 Monitoring メトリクス監視、コンテナの監視 AKE では後からでも利便性の高い Add-on

    を追加できるようにしています Logging コンテナから出力される ログの蓄積 (今後は SaaS にも対応予定) Other dashboard Helm や dashboard、 その他ユーザの利便性向上に繋がるものを ワンクリックで利用可能に $ ake cluster addon \ --cluster amsy810 \ --enable datadog
  26. Tuning for adtech system page 039 iptables 周りや Hash table

    サイズ、 connection 周りなどを中心にチューニング 今後は CNI 周りの検証も行い、更に高速化 Network tuning Kernel tuning ボトルネックとなりそうな箇所のチューニング 4.x 系で入ったパラメータも実施 Hypervisor tuning Over commit ratio = 1.0 Hyper Threading 以上のコア割り当てをしない Virtualization 周りもチューニング Kubernetes tuning Kubernetes Master の設定を変更できるため、 HPA の間隔やシステムへの割り当てリソースを調整