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. αΠόʔΤʔδΣϯτʹ͓͚Δ
    ϓϥΠϕʔτίϯςφج൫AKEΛࢧ͑Δٕज़
    MasayaAoyama @amsy810
    Masaya Aoyama
    @CyberAgent [adtech studio]

    View full-size slide

  2. MasayaAoyama @amsy810
    Masaya Aoyama
    @CyberAgent [adtech studio]
    ぼくは
    「あくーえ」
    ぼくは
    「青山 真也」
    αΠόʔΤʔδΣϯτʹ͓͚Δ
    ϓϥΠϕʔτίϯςφج൫AKEΛࢧ͑Δٕज़

    View full-size slide

  3. self
    introduction
    page
    03
    連載 「今こそ始めよう! Kubernetes入門」 @ThinkIT
    Certified Kubernetes Administrator (CKA-1700-0138-0100)
    OpenStack Active Technical Contributor
    Masaya Aoyama
    Infrastructure Engineer
    MasayaAoyama @amsy810
    ͋͘ʔ͑

    View full-size slide

  4. Hobby == Kubernetes
    Kubernetes ͷϥζϕϦʔύΠแΈ
    “αΠόʔΤʔδΣϯτ෩”

    View full-size slide

  5. ΠϕϯτΛ੝Γ্͛ΔͨΊ…ϓϨθϯτاը
    page
    05
    Raspberry Pi 3 * 3
    USB Charger 6 port 50W
    4-Tier acrylic case
    Switching hub
    Wi-Fi AP
    etc…
    おうち Kubernetes の素

    View full-size slide

  6. Ad Technology meets
    Kubernetes
    Target workloads of us

    View full-size slide

  7. page
    07
    High Computing
    Machine Learning を用いたモデル生成
    GPU / 分散処理 などを積極的に利用
    データセットは PB クラスに大規模
    1 システムあたり
    300,000 req/sec〜 をさばく
    High Traffic
    DSP システムにおいては
    10 ms〜100 ms 以内にレスポンスを返す
    Low Latency
    Ad Technology のシステムは性能要件が非常にシビア

    View full-size slide

  8. “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)

    View full-size slide

  9. History of AKE
    Why “Adtech Container Engine” is implemented?

    View full-size slide

  10. 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.

    View full-size slide

  11. 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

    View full-size slide

  12. 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

    View full-size slide

  13. our development is
    growing fast
    production environment!
    Now 15 clusters

    View full-size slide

  14. AKE Overview
    How to create and release Kubernetes Cluster?

    View full-size slide

  15. 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 …

    View full-size slide

  16. 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 を実施

    View full-size slide

  17. Key Features of AKE
    GKE like container platform

    View full-size slide

  18. 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

    View full-size slide

  19. 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) をサポート

    View full-size slide

  20. 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

    View full-size slide

  21. 01 Kubernetes & Swarm
    (Multi COE)
    Kubernetes
    Docker Swarm
    etc…

    View full-size slide

  22. Kubernetes & Swarm
    (Multi COE)
    page
    023
    Docker Swarm
    シンプルな COE
    Kubernetes
    デファクトスタンダート
    高機能な COE
    type: LoadBalancer 相当の機能を実装
    Kernel の Rebuild (for tuning)

    View full-size slide

  23. 02 OpenStack Integration
    Keystone
    Cinder
    Designate
    Heat

    View full-size slide

  24. 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

    View full-size slide

  25. 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 を構築

    View full-size slide

  26. Why we choose
    on VM not baremetal?
    page
    027
    Virtual Machine
    Overhead が大きい
    Baremetal
    コンテナを詰めすぎると影響範囲が大きい
     (コア数の少ない物理サーバで解消可能)
    物理サーバのコア数に依存したクラスタサイズ
    マルチテナントではネットワークの分離が面倒
    自在な粒度で Node を切り出せる Overhead が少ない

    View full-size slide

  27. 03 High performance
    L4 / L7 LoadBalancer
    Baremetal Loadbalancer
    GKE Like Ingress

    View full-size slide

  28. 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 ʹసૹ͞ΕΔ

    View full-size slide

  29. 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 ʹసૹ͞ΕΔ

    View full-size slide

  30. 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

    View full-size slide

  31. 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

    View full-size slide

  32. 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) 誕生秘話とアーキテクチャ完全公開!」

    View full-size slide

  33. 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 を実装してみた」

    View full-size slide

  34. 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

    View full-size slide

  35. 04 Add-on mechanism for us
    Datadog, Prometheus
    ElasticSearch + Fluentd + Kibana
    Helm, Dashboard

    View full-size slide

  36. ake addon
    mechanism
    page
    037
    Monitoring
    メトリクス監視、コンテナの監視
    AKE では後からでも利便性の高い
    Add-on を追加できるようにしています
    Logging
    コンテナから出力される
    ログの蓄積
    (今後は SaaS にも対応予定)
    Other
    dashboard
    Helm や dashboard、
    その他ユーザの利便性向上に繋がるものを
    ワンクリックで利用可能に
    $ ake cluster addon \
    --cluster amsy810 \
    --enable datadog

    View full-size slide

  37. 05 Tuning for adtech system
    Network
    Kernel
    Kubernetes
    Hypervisor

    View full-size slide

  38. 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 の間隔やシステムへの割り当てリソースを調整

    View full-size slide

  39. 06 Multi Container Runtime
    (now planning)
    Docker
    containerd
    rktlet
    cri-o

    View full-size slide

  40. AKE will support
    several container runtime
    page
    041

    View full-size slide

  41. cons
    pros
    Kubernetes Master の柔軟な設定
    新しいバージョンが増えた際に
    迅速に対応可能
    特定のワークロードに向けた
    チューニングが可能
    考えつくことはなんでも実現可能
    実装コストが大きい
    運用コストが少し大きい
    内部実装を理解していないと危険
    ハイブリットクラウド構成

    View full-size slide

  42. ࣂ͍ओ͞Μืूத
    ʢWe are hiring!ʣ
    ͋͘ʔ͑

    View full-size slide

  43. KubeCon 2018 EU ೔ຊަྲྀձ
    ˏίϖϯϋʔήϯ

    View full-size slide