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

Platform for Platform with Kubernetes 〜ML Platform and KaaS〜 / cabasenext2021-k8s-amsy810

Platform for Platform with Kubernetes 〜ML Platform and KaaS〜 / cabasenext2021-k8s-amsy810

CyberAgent group Infrastructure Unit の Dev チームでは、ML 基盤や Kubernetes as a Service 基盤などの先進的なプラットフォームを独自に開発し、社内に提供しています。これらの基盤はいずれも Kubernetes の拡張性を活用して作られており、大きな分散システムとして日々進化しています。本セッションでは、Platform のための Platform としての Kubernetes を、実際の事例を踏まえて紹介します。

https://ca-base-next.cyberagent.co.jp/sessions/amsy810-k8s/

青山 真也
Software Engineer
2016年CyberAgent入社。Kubernetes as a Serviceのプロダクトオーナー、Kubernetes/CloudNative 領域の Developer Expertsとしても従事。世界で2番目にKubernetesの認定資格を取得。 著書に『Kubernetes完全ガイド』『みんなのDocker/Kubernetes』。 現在はOSSへのContribute 活動をはじめ、CloudNative Days Tokyo 2019/2020のCo-chair、CNCF公式のCloud Native Meetup TokyoやKubernetes Meetup TokyoのOrganizerなどコミュニティ活動にも従事。

More Decks by Masaya Aoyama (@amsy810)

Other Decks in Technology

Transcript

  1. 青山 真也 - Masaya Aoyama 2016年度 新卒入社 CyberAgent group Infrastructure

    Unit(CIU)  ・KaaS product owner  ・Developer Experts(Kubernetes / CloudNative 領域)  ・CloudNative Days Tokyo Co-chair  ・Kubernetes 完全ガイド 著者 @MasayaAoyama @amsy810
  2. CyberAgent group Infrastructure Unit “dev” team が開発する基盤 DGX A100 AFF

    A800 GPUaaS (Kubernetes) AI Platform Kubernetes as a Service ML Platform Copyright ©2021 CyberAgent, Inc. All Rights Reserved.
  3. Kubernetes 商用環境では複数台のコンテナのホストマシンを管理する必要がある  = コンテナオーケストレーションツールが必須 Kubernetes はコンテナオーケストレーションツールの1つ Computing resource pool Storage

    pool • Storage system ◦ Block ◦ Shared filesystem ◦ Others • スケジューリング • ローリングアップデート • ヘルスチェック • オート / スケーリング • 障害時のセルフヒーリング • 認証・認可 • サービスディスカバリ • ロードバランシング • 機密情報のアタッチ • マルチテナンシー • ストレージとの連携
  4. Reconciliation loop による宣言された状態への収束 Kubernetes 内部では Controller と呼ばれるプログラムがシステムを制御 複数の Controller によって

    宣言された状態に収束 ◦ 指定されたレプリカ数を維持 ◦ ノード障害によりコンテナ停止時に再復旧 ◦ 機密情報や設定ファイル変更時に自動的に再読み込み ◦ ロードバランサーのメンバーの自動管理 ◦ etc Actual ReplicaSet (replicas=3) Watch ReplicaSet Controller kind: ReplicaSet spec: replicas: 3 template: spec: containers: - image: nginx:1.16 Desired State Watch
  5. エコシステムの豊富さ CNCF / Kubernetes コミュニティではオープンな技術促進が進められており、 Kubernetes と連携した様々な OSS が開発・公開されている Reconciliation

    Loop を利用した OSS の拡張 Controller を利用することで、 様々な定常的な運用の大部分を Kubernetes に委譲 することが可能 • Cert Manager:ACMEを利用した証明書の自動生成と管理、LoadBalancerとの自動連携 • External DNS:IPアドレスとDNSレコードの管理 エコシステムの豊富さという面では、他にも • Prometheus / Loki / Tanka / Grafana:サービスの Observability の確保 • OAuth2 Proxy + Nginx ingress:WebUI へのリクエストに対する OAuth2 連携 • Others:オートスケーリング、Progressive Delibery、Namespace 間のデータ伝搬、etc
  6. プラットフォームとしての拡張性の高さ Kubernetes は拡張しやすく作られており、自社の特定のドメインに特化した機能拡張も可能 Controller を実装するためのフレームワークなども提供されている(汎用的な OSS も利用している) 拡張ポイントの例、 • Custom

    Controller / CustomResourceDefinition • Mutating Webhook / Validating Webhook • kubectl plugins • Device plugins • etc 他にも、コンテナランタイム(OCI/CRI)・ネットワーク(CNI)・ストレージ(CSI)など、 様々な標準化と歩幅を合わせながら Pluggable な実装が進められている
  7. Kubernetes の強み Reconciliation Loop による宣言された状態への収束 エコシステムの豊富さ プラットフォームとしての拡張性の高さ • 復元力がある •

    管理しやすい • 可観測性がある • 堅牢な自動化で頻繁な更新 • etc 1 2 3 ⇒ OSS の進化にも追従しながら、   プラットフォームの進化を続けることで   ビジネスの成功へ
  8. ML Platform の概要 DGX A100 → 高性能な MIG 対応の最新世代 GPU

    を提供(最大 56 GPUs/ 筐体) AFF A800 → 高性能なマルチプロトコル対応ストレージを提供(iscsi / NFS) GPU as a Service → GPU インスタンス・Jupyter Notebook を提供 独自AI Platform → Google AI Platform 相当の基盤を提供 DGX A100 AFF A800 AI Platform GPUaaS (Kubernetes) AI Platform Kubernetes のポータビリティを 生かしてマルチ DC 上への展開も検討
  9. GPU と Kubernetes Kubernetes には Device Plugin という仕組みが用意されている Device Plugin

    は Plugable になっており、様々なデバイスを Kubernetes で取り扱うことが可能 • GPU (NVIDIA / AMD / Intel) • TPU (Tensor Processing Unit) • FPGA • etc. MIG にも対応済み 余談:Kubernetes では InfiniBand の利用、NUMA や GPU Topology を意識した実行なども可能 containers: - name: mljob image: my-mljob:v0.1 resources: limits: nvidia.com/gpu: 1 (コンテナランタイム側の対応も必要) icons: https://icons8.jp/icons/set/video-card
  10. クラウド向け認証情報との連携 クラウド向けの認証情報用に Secret の type を拡張(Validating webhook で検証) • type:

    gcp-credential • type: aws-credential クラウド向けの認証情報を自動マウント(Mutating webhook で挿入) • Pod のアノテーションに指定 • ServiceAccount への紐付け ※ その他にも Pod のアノテーションでのマウント無効化など、いくつかの機能も実装
  11. PersistentVolume への S3/GCS データのロード PersistentVolumeClaim 作成時にアノテーションを付与することで S3 / GCS からデータをロード

    前述のクラウド向け認証情報を利用することで、Private Bucket のロードも可能 1. PVC にデータをロードする Job の作成 2. PVC の .status.conditions で状態管理 (type = Loading を拡張して追加)    課題:.status.conditions が特に使われておらず、    ロード完了前にも PVC の attach が行われてしまう 機械学習の元データを効率的に扱えるように、 Volume Snapshot との連携も検討中 ※ その他にも 元データを変更されないように ReadOnly なマウントなど、いくつかの機能も実装 (Controller)
  12. kubectl plugin による操作性の統一 gcloud ai-platform jobs submit training gcloud ai-platform

    jobs list|get gcloud ai-platform jobs describe gcloud ai-platform jobs stream-logs gcloud ai-platform jobs cancel Cloud resource Google AI Platform Job definition kubectl plugin を実装し、”gcloud ai-platform” と同等のサブコマンドを実装 kubectl ai-platform jobs submit training kubectl ai-platform jobs list|get kubectl ai-platform jobs describe kubectl ai-platform jobs stream-logs kubectl ai-platform jobs cancel On-prem. resource
  13. AI Platform with Kubeflow Experiment Suggestion Trial Trial Trial TFJob/PytorchJob/Job

    Pod Worker Container Metrics Collector Katib DB Metrics Container Kubeflow = Kubernetes 向けの ML ツールキット • 各種 ML フレームワークのサポート ◦ Tensorflow Operator ◦ etc. • ハイパーパラメータチューニング ◦ Katib • etc 前述の kubectl plugin から操作  独自の kubectl plugin を実装
  14. Kubernetes as a Service - AKE OpenStack の Private Cloud

    上に Kubernetes を展開する Kubernetes as a Service  2016 年中頃から開発、2017 年 4 月にリリース(Kubernetes 1.2, 1.3 の頃) 構築した各 Kubernetes クラスタ内で動作する Controller • 弊社 Private Cloud 向けの連携部分の実装 ◦ Cloud Controller Manager ◦ Ingress Controller ◦ Cluster Autoscaler • 自動管理を実現する Controller の実装 ◦ Node Updater ◦ Node Auto Repair Copyright ©2021 CyberAgent, Inc. All Rights Reserved.
  15. Kubernetes 自体のオーケストレーションの刷新 開発当初、Kubernetes を構築するための成熟したプロダクトは存在しなかった  e.g. OpenStack Magnum、kubeadm、etc. OpenStack Heat(=~ Cloud

    Formation)を用いて Kubernetes クラスタ自体のオーケストレーションを自前で実現 時は流れて 2021 年、 1. OpenStack Heat の脱却(運用コスト削減) 2. メディア側 DC・AI事業本部側 DC 双方での KaaS 提供    (CyberAgent group Infrastructure Unit への全社統合に伴い) Copyright ©2021 CyberAgent, Inc. All Rights Reserved.
  16. Cluster API Kubernetes Cluster を Kubernetes Resource として管理可能な Cluster API

    へ移行中 右記のようなマニフェストを元に Controller が VM や Kubernetes の管理を行う ClusterAPI’s controller bootstrap cluster workload clusters Copyright ©2021 CyberAgent, Inc. All Rights Reserved.
  17. Kubernetes を横断管理する Controller の可能性 Kubernetes 自体が “リソース” として管理されているため、 複数の Kubernetes

    を横断した Controller なども実現しやすい custom controller bootstrap cluster workload clusters Copyright ©2021 CyberAgent, Inc. All Rights Reserved.