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

CSIとRook-Ceph, NooBaaに見るCloud-native Storageの可能...

CSIとRook-Ceph, NooBaaに見るCloud-native Storageの可能性@OpenShift Meetup #6

Takuya Utsunomiya

September 11, 2019
Tweet

More Decks by Takuya Utsunomiya

Other Decks in Technology

Transcript

  1. お前は誰や apiVersion: apiextentions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: name: 宇都宮 卓也 spec:

    group: レッドハット株式会社 role: ストレージソリューションアーキテクト born: 大阪 version: 37歳 favorites: technology: ストレージ hobby: [“野球好き”, “プロレス好き”,”将棋好き”] drink: [“ビール”, “ワイン”] annoyance: [“尿酸値”, ”最近目が霞む”, “肩が痛い”] Japan Rook @japan_rook Japan Rook https://rook.connpass.com/ Follow me! Join us!
  2. 8 Principles of Cloud Native Storage 1. Application centric Storage

    should be presented to and consumed by applications, not by operating systems or hypervisors. 2. Platform agnostic The storage platform should be able to run anywhere. Upgrades and scaling is non-disruptive. 3. Declarative & composable Storage resources should be declared and composed just like all other resources required by applications and services. 4. API driven Storage resources and services should be easy to be provisioned, consumed, moved and managed via an API. 5. Natively secure Storage services should integrate and inline security features such as encryption and RBAC. 6. Agile The platform should be able to move application data between locations, dynamically resize and snapshot volumes. 7. Performant The storage platform should offer deterministic performance in complex distributed environments. 8. Consistently available The storage platform should ensure high availability, durability, consistency with a predictable, proven data model. * CloudNativeStorageCon 2019 Keynote Sessionより
  3. 8 Principles of Cloud Native Storage 1. Application centric ストレージは、OSやハイパーバイザーではなく、アプ

    リケーションに向けて提供され、消費されるべきであ る。 2. Platform agnostic ストレージプラットフォームはどこでも稼働すべきであ る。アップグレードやスケールは無停止でなされる。 3. Declarative & composable ストレージリソースは、アプリケーションやサービスに 必要な他の全てのリソースと同じように宣言され、構 成されるべきである。 4. API driven ストレージリソースとサービスは、 APIを介して簡単に プロビジョニング、消費、移動、管理されるべきであ る。 5. Natively secure ストレージサービスは、暗号化や RBACなどのセキュ リティ機能を統合、内包すべきである。 6. Agile ストレージプラットフォームは拠点間でアプリケーショ ンデータを移したり、動的にボリュームのリサイズや スナップショットの取得ができるべきである。 7. Performant ストレージプラットフォームは、複雑で分散化された 環境においても決まった性能を提供するべきであ る。 8. Consistently available ストレージプラットフォームは、高い可用性、耐久性、 および予測可能で実績のあるデータモデルとの一貫 性を担保するべきである。 * CloudNativeStorageCon 2019 Keynote Sessionより
  4. OpenShift Container Storage 4 7 Highly scalable, production-grade persistent storage

    • OpenShift専用のストレージAdd-on • プラットフォームを問わず利用できる、 Open Hybrid Cloudに適したストレージ • ブロック、ファイル、オブジェクトの全種類を提供 • OpenShift Prometheusと連携したモニタリング • OpenShiftのGUIと統合されたDashboard 2019年11月 GA予定 OpenShift Container Storage 4
  5. • OpenShift/Kubernetesで動くストレージオーケストレーションツール • SDSと連携した”Operator”として稼働する仕組み ◦ ストレージシステムの構築、拡張やアップグレードなどの運用を自動化し、使いやすいストレージ環境 を提供する ◦ Automate deployment,

    bootstrapping, configuration, provisioning, scaling, upgrading, migration, disaster recovery, monitoring, resource management,... • Open Source (Apache 2.0) • CNCF Incubating Stable Ceph EdgeFS Alpha Cassandra CockroachDB Minio NFS YugabyteDB https://rook.io/docs/rook/v1.0/quickstart-toc.html Rookが対応するSDS(v1.1)
  6. • プラットフォームを問わないストレージを実現 パブリッククラウドでもオンプレミスでも、全く同じストレージサービスが利用可能となる。 ✓ ユーザーはプラットフォームの違いを意識せずに済む。 ✓ プラットフォーム間のデータコピーやマイグレーションがしやすくなる。 • 運用自動化されたストレージを実現 ✓

    各SDSごとに対応した”Operator”によってストレージ運用手順が自動化され、管理者の負担を削減できる。 • Resilientなストレージを実現 ✓ Kubernetesのリソース管理手法を適用することで、障害時に自動復旧するなど高いResiliencyを提供できる。 • OpenShift/Kubernetes専用のストレージを実現 ✓ 外部のワークロードから隔離することで、予想外の容量面や性能面での悪影響を防止できる。 Rookの利点
  7. • 複数のコンテナオーケストレータで利用可能な業界標準的なストレージインターフェース • Volume pluginをKubernetes Coreから分離することで従来の volume pluginの課題を解決 ◦ in-tree

    pluginはCSIに移行 ◦ FlexVolumeはサポート継続、だが new featureは追加されない • GA : OpenShift 4.2, Kubernetes 1.13~ CSI (Container Storage Interface) - CSI Driver : unique container by storage provider - Provisioner, Attacher, Registrar : sidecar by k8s team Kubernetes Volume plugin Volume plugin Volume plugin Kubernetes Storage Plugin Snapshot Plugin Local Storage Plugin Updated Storage Plugin Independant Update
  8. • In-tree volume plugin の課題 ◦ In-tree volume plugins make

    volume plugin development tightly coupled and dependent on Kubernetes releases. ◦ In-tree volume plugins make Kubernetes developers/community responsible for testing and maintaining all volume plugins (which is nearly impossible). ◦ In-tree volume plugins allow bugs in volume plugins to crash critical Kubernetes components, instead of just the plugin. ◦ In-tree volume plugins grant volume plugins the same privileges as kubernetes components (like kubelet and kube-controller-manager). ◦ In-tree volume plugins force volume plugin developers to make plugin source code public. • FlexVolume volume plugin の課題 ◦ FlexVolume requires root access on host machine to install FlexVolume driver files. ◦ FlexVolume drivers assume all volume mount dependencies, e.g. mount and filesystem tools, are available on the host OS. Installing these dependencies also require root access. 従来の volume plugin の課題
  9. Rook-Ceph CSI : Pod placement kubelet kubelet kubelet Ceph CSI

    rook-ceph-operator rook-discover rook-ceph-agent rook-discover rook-ceph-agent rook-discover rook-ceph-agent rook-ceph-mon rook-ceph-osd rook-ceph-mon rook-ceph-osd rook-ceph-mon rook-ceph-mgr rook-ceph-osd rook-ceph-mds rook-ceph-mds csi-rbdplugin-provisioner csi-rbdplugin csi-cephfsplugin csi-cephfsplugin-provisioner csi-rbdplugin csi-cephfsplugin csi-rbdplugin csi-cephfsplugin workers csi-rbdplugin-provisioner csi-provisioner csi-rbdplugin- attacher csi-snapshotter csi-rbdplugin csi-rbdplugin driver-registrar csi-rbdplugin csi-cephfsplugin-provisioner csi-provisioner csi-attacher csi-cephfsplugin csi-cephfsplugin driver-registrar csi-cephfsplugin containers pod ・・・ ・・・ ・・・
  10. [utubo@tutsunom ~]$ kubectl get all -n rook-ceph NAME READY STATUS

    RESTARTS AGE pod/csi-cephfsplugin-5pp6d 2/2 Running 0 42m pod/csi-cephfsplugin-p5rr6 2/2 Running 0 42m pod/csi-cephfsplugin-provisioner-0 3/3 Running 0 42m pod/csi-cephfsplugin-z56k6 2/2 Running 0 42m pod/csi-rbdplugin-kqmrc 2/2 Running 0 42m pod/csi-rbdplugin-lgn7b 2/2 Running 0 42m pod/csi-rbdplugin-provisioner-0 4/4 Running 0 44m pod/csi-rbdplugin-rkvwm 2/2 Running 0 42m pod/rook-ceph-agent-9d25v 1/1 Running 0 53m pod/rook-ceph-agent-gmj8t 1/1 Running 0 53m pod/rook-ceph-agent-vr26t 1/1 Running 0 53m pod/rook-ceph-mds-myfs-a-658d47879-8h944 1/1 Running 0 18m pod/rook-ceph-mds-myfs-b-696b8f8bbf-8lvr9 1/1 Running 0 18m pod/rook-ceph-mgr-a-6959b4b9b9-cgvj8 1/1 Running 0 53m pod/rook-ceph-mon-a-5b8659f9c6-x4dmq 1/1 Running 0 53m pod/rook-ceph-mon-b-58f4869ccc-tp5dn 1/1 Running 0 53m pod/rook-ceph-mon-c-66d5fc5b5f-7xkvf 1/1 Running 0 53m pod/rook-ceph-operator-7dd97cd7c7-fx94c 1/1 Running 0 55m pod/rook-ceph-osd-0-7f9745f97b-hfc78 1/1 Running 0 51m pod/rook-ceph-osd-1-7f86ff9fbf-q6b6m 1/1 Running 0 51m pod/rook-ceph-osd-2-d5cb8d4dc-64wpx 1/1 Running 0 51m pod/rook-ceph-osd-3-5bdd4667d5-8gbkr 1/1 Running 0 51m pod/rook-ceph-osd-4-99cb9779b-lczlb 1/1 Running 0 51m pod/rook-ceph-osd-5-6f558f9cb-lmr4x 1/1 Running 0 51m pod/rook-ceph-osd-6-76d66bf966-5wl77 1/1 Running 0 51m pod/rook-ceph-osd-7-774b577759-mqzcs 1/1 Running 0 51m pod/rook-ceph-osd-8-6b6f9866df-gwlpd 1/1 Running 0 51m pod/rook-ceph-osd-prepare-ip-172-20-102-136.ec2.internal-jdgkn 0/2 Completed 1 52m pod/rook-ceph-osd-prepare-ip-172-20-55-200.ec2.internal-nzzcj 0/2 Completed 0 52m pod/rook-ceph-osd-prepare-ip-172-20-88-244.ec2.internal-qttm2 0/2 Completed 0 52m pod/rook-discover-2n9dh 1/1 Running 0 55m pod/rook-discover-l5vbv 1/1 Running 0 55m pod/rook-discover-mnj2d 1/1 Running 0 55m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/csi-cephfsplugin-provisioner ClusterIP 100.69.102.86 <none> 1234/TCP 53m service/csi-rbdplugin-provisioner ClusterIP 100.65.66.106 <none> 1234/TCP 53m service/rook-ceph-mgr ClusterIP 100.67.184.234 <none> 9283/TCP 52m service/rook-ceph-mgr-dashboard ClusterIP 100.68.157.93 <none> 8443/TCP 52m service/rook-ceph-mon-a ClusterIP 100.64.168.255 <none> 6789/TCP,3300/TCP 53m service/rook-ceph-mon-b ClusterIP 100.68.5.32 <none> 6789/TCP,3300/TCP 53m service/rook-ceph-mon-c ClusterIP 100.71.185.213 <none> 6789/TCP,3300/TCP 53m NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/csi-cephfsplugin 3 3 3 3 3 <none> 53m daemonset.apps/csi-rbdplugin 3 3 3 3 3 <none> 53m daemonset.apps/rook-ceph-agent 3 3 3 3 3 <none> 53m daemonset.apps/rook-discover 3 3 3 3 3 <none> 55m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/rook-ceph-mds-myfs-a 1/1 1 1 18m deployment.apps/rook-ceph-mds-myfs-b 1/1 1 1 18m deployment.apps/rook-ceph-mgr-a 1/1 1 1 53m deployment.apps/rook-ceph-mon-a 1/1 1 1 53m deployment.apps/rook-ceph-mon-b 1/1 1 1 53m deployment.apps/rook-ceph-mon-c 1/1 1 1 53m deployment.apps/rook-ceph-operator 1/1 1 1 55m deployment.apps/rook-ceph-osd-0 1/1 1 1 51m deployment.apps/rook-ceph-osd-1 1/1 1 1 51m deployment.apps/rook-ceph-osd-2 1/1 1 1 51m deployment.apps/rook-ceph-osd-3 1/1 1 1 51m deployment.apps/rook-ceph-osd-4 1/1 1 1 51m deployment.apps/rook-ceph-osd-5 1/1 1 1 51m deployment.apps/rook-ceph-osd-6 1/1 1 1 51m deployment.apps/rook-ceph-osd-7 1/1 1 1 51m deployment.apps/rook-ceph-osd-8 1/1 1 1 51m deployment.apps/rook-ceph-tools 1/1 1 1 18m NAME DESIRED CURRENT READY AGE replicaset.apps/rook-ceph-mds-myfs-a-658d47879 1 1 1 18m replicaset.apps/rook-ceph-mds-myfs-b-696b8f8bbf 1 1 1 18m replicaset.apps/rook-ceph-mgr-a-6959b4b9b9 1 1 1 53m replicaset.apps/rook-ceph-mon-a-5b8659f9c6 1 1 1 53m replicaset.apps/rook-ceph-mon-b-58f4869ccc 1 1 1 53m replicaset.apps/rook-ceph-mon-c-66d5fc5b5f 1 1 1 53m replicaset.apps/rook-ceph-operator-7dd97cd7c7 1 1 1 55m replicaset.apps/rook-ceph-osd-0-7f9745f97b 1 1 1 51m replicaset.apps/rook-ceph-osd-1-7f86ff9fbf 1 1 1 51m replicaset.apps/rook-ceph-osd-2-d5cb8d4dc 1 1 1 51m replicaset.apps/rook-ceph-osd-3-5bdd4667d5 1 1 1 51m replicaset.apps/rook-ceph-osd-4-99cb9779b 1 1 1 51m replicaset.apps/rook-ceph-osd-5-6f558f9cb 1 1 1 51m replicaset.apps/rook-ceph-osd-6-76d66bf966 1 1 1 51m replicaset.apps/rook-ceph-osd-7-774b577759 1 1 1 51m replicaset.apps/rook-ceph-osd-8-6b6f9866df 1 1 1 51m replicaset.apps/rook-ceph-tools-b8c679f95 1 1 1 18m NAME READY AGE statefulset.apps/csi-cephfsplugin-provisioner 1/1 53m statefulset.apps/csi-rbdplugin-provisioner 1/1 53m NAME COMPLETIONS DURATION AGE job.batch/rook-ceph-osd-prepare-ip-172-20-102-136.ec2.internal 1/1 68s 52m job.batch/rook-ceph-osd-prepare-ip-172-20-55-200.ec2.internal 1/1 65s 52m job.batch/rook-ceph-osd-prepare-ip-172-20-88-244.ec2.internal 1/1 66s 52m $ kubectl get all -n rook-ceph
  11. Rook-Ceph CSI kubelet kubelet kubelet Ceph CSI rook-ceph-operator rook-discover rook-ceph-agent

    rook-discover rook-ceph-agent rook-discover rook-ceph-agent rook-ceph-mon rook-ceph-osd rook-ceph-mon rook-ceph-osd rook-ceph-mon rook-ceph-mgr rook-ceph-osd rook-ceph-mds rook-ceph-mds csi-rbdplugin-provisioner csi-rbdplugin storage/app nodes ・・・ ・・・ ・・・ driver-registrar csi-rbdplugin csi-provisioner csi-rbdplugin- attacher csi-snapshotter csi-rbdplugin ※簡単のため RBD pluginのみ表示 kubelet csi-rbdplugin driver-registrar csi-rbdplugin app node csi-rbdplugin driver-registrar csi-rbdplugin csi-rbdplugin driver-registrar csi-rbdplugin master apiserver
  12. Rook-Ceph CSI : PVC create 〜 PV create/bind の動き kubelet

    kubelet kubelet Ceph CSI rook-ceph-operator rook-discover rook-ceph-agent rook-discover rook-ceph-agent rook-discover rook-ceph-agent rook-ceph-mon rook-ceph-osd rook-ceph-mon rook-ceph-osd rook-ceph-mon rook-ceph-mgr rook-ceph-osd rook-ceph-mds rook-ceph-mds csi-rbdplugin-provisioner csi-rbdplugin storage/app nodes ・・・ ・・・ ・・・ driver-registrar csi-rbdplugin csi-provisioner csi-rbdplugin- attacher csi-snapshotter csi-rbdplugin ※簡単のため RBD pluginのみ表示 kubelet csi-rbdplugin driver-registrar csi-rbdplugin app node csi-rbdplugin driver-registrar csi-rbdplugin csi-rbdplugin driver-registrar csi-rbdplugin master apiserver 1.watch 2. notify PVC 3. kick PV create PV
  13. Rook-Ceph CSI : Pod create 〜 PV attach の動き kubelet

    kubelet kubelet Ceph CSI rook-ceph-operator rook-discover rook-ceph-agent rook-discover rook-ceph-agent rook-discover rook-ceph-agent rook-ceph-mon rook-ceph-osd rook-ceph-mon rook-ceph-osd rook-ceph-mon rook-ceph-mgr rook-ceph-osd rook-ceph-mds rook-ceph-mds csi-rbdplugin-provisioner csi-rbdplugin storage/app nodes ・・・ ・・・ ・・・ driver-registrar csi-rbdplugin csi-provisioner csi-rbdplugin- attacher csi-snapshotter csi-rbdplugin ※簡単のため RBD pluginのみ表示 kubelet csi-rbdplugin driver-registrar csi-rbdplugin app node csi-rbdplugin driver-registrar csi-rbdplugin csi-rbdplugin driver-registrar csi-rbdplugin master apiserver PV App pod 3. attach PV 2. notify PV attach 1.watch
  14. • 直接的にはCOとストレージを提供する 3rd Partyが幸せになれる仕組みのように見える ユーザーのメリットは? • 少なくともCSIがあることで、ユーザーが COを乗り換えるストレージの観点での障壁は下がる • Driver開発の自由度が上がることで

    Cloud Native Storageに参入する3rd Partyが増え、ユーザーからはス トレージの選択肢が増える ◦ 現在50近くのCSI driverがProduction-Readyで公開されている https://kubernetes-csi.github.io/docs/drivers.html • CSI関連のリソースが多くできるため一見複雑化するように見えるが、 CSIは標準化されたアーキでありコン ポーネントの役割が明確なので、ブラックボックスを排除できむしろ使いやすくなると考える 結局CSIって何がうれしいの?
  15. 21 NooBaa OPENSHIFT CONTAINER STORAGE The 2nd episode! PUBLIC CLOUD

    OPEN HYBRID CLOUD IMPERATIVES Application Portability | Platform Independence | Elasticity ON-PREM ハイブリッドクラウドの課題 • アプリケーションの可搬性、プラットフォームからの独立性、順応性はコンテナやサーバレスなどのテクノロ ジーにより実現可能となった。 • 一方でデータはいまだプラットフォームに縛られがち。 • アプリケーションはデータがある場所に留め置かれる傾向(Data Gravity)があるため、データに自由を奪わ れてしまう。
  16. 22 NooBaa クラウド間でデータが移動する困難さ On-Premises AWS OUTPOSTS Stack Cloud • 移動中のデータへのI/Oの扱いやConsisntency、レイテンシーなど性能などの観点から、完璧にリアルタイ

    ムでシームレスにクラウド間を移動することは難しい。 • オブジェクトストレージの多くはEventually Consistencyを担保し、またアプリケーションのI/O要件が元々高 くない。よってある程度リアルタイムでシームレスな移動であれば行いやすい。
  17. 23 NooBaa NooBaa : オブジェクトデータサービス HIGH STACK - DATA MANAGEMENT

    ❖ Active Active – Keep your data available ❖ Flexible – Any resource, on premises or cloud ❖ Secured – All data encrypted, managed LOW STACK - DATA EFFICIENCY LAYER ❖ Compression ❖ Inline Deduplication Data Repository
  18. 24 NooBaa NooBaa Multi-Cloud Object Gateway (MCG) • オンプレミス・オフプレミスを問わず、複数のObject StorageをまたぐGatewayを作る

    ◦ アプリケーションは単一のエンドポイントにアクセスすることになり、開発者はプラットフォームの違いを意識せ ずに済む • MCGの管理下でBucket間のデータマイグレーションやレプリケーションを実行することにより、クラウド間で データの移動や分散を実現する ◦ 複数のBucketをまとめて巨大なオブジェクトストレージを作る事も可能 App Multi-Cloud Bucket Multi-Site Bucket App App Hybrid Bucket S3 Active - Active Multi Cloud Read /Write, First Iteration
  19. 25 NooBaa Efficiency and Security S3 Write Fragment Dedupe Encrypt

    Store Compress Paris DC London DC New York DC
  20. 26 NooBaa Application meta-data NooBaa Core Optimized utilization, resilience, performance,

    locality, economics, etc. Heartbeats Instructions Instructions Scalable NooBaa Storage Node stores chunks, runs lambda functions, monitors host, sends heartbeats Scalable NooBaa Endpoint S3 / Lambda API auth, chunking, dedupe, compress, encrypt Cloud Resource AWS S3 AWS S3-compatible, Azure Blob, Google cloud storage Data path NooBaa Architecture
  21. OpenShift Container Storage 4 27 Highly scalable, production-grade persistent storage

    • OpenShift専用のストレージAdd-on • プラットフォームを問わず利用できる、 Open Hybrid Cloudに適したストレージ • ブロック、ファイル、オブジェクトの全種類を提供 • OpenShiftインフラサービスのPrometheusと連携したモニタリング • OpenShiftのGUIと統合されたDashboard 2019年11月 GA予定 OpenShift Container Storage 4
  22. Provided by Rook-Ceph Provided by Rook-Ceph Provided by NooBaa 29

    OpenShift Container Storage 4 様々なワークロードに対応するOCS4 • Primary for DB and Transactional workloads • Low latency • Messaging Persistent Volume • POSIX-compliant shared file system • Interface for legacy workloads • CI/CD Pipelines • AI/ML Data Aggregation • Messaging Shared File System Block • Media, AI/ML training data, Archiving, Backup, Health Records • Great Bandwidth performance • Object API (S3/Blob) Object Service
  23. 33 • これからのストレージは Cloud Native Storage であるべきだ ◦ コンテナプラットフォームからストレージを操作できるべきだ ◦

    アプリケーションのワークロードやライフサイクルに合わせてストレージを提供すべきだ • コンテナ環境のストレージインターフェースは CSI が標準だ ◦ ちょっと複雑になるかもしれないけどストレージの選択肢が増えるぞ ◦ ストレージプロバイダが次々提供する機能を享受できるようになるぞ • OpenShift Container Storage が来るぞ ◦ オンプレ/パブリッククラウド 問わず使えるぞ ◦ Rook-Ceph と NooBaa でどんなワークロードにも対応できるぞ ◦ Operator でラクラク管理できるぞ、 GUIもついてるぞ ◦ Multi-Cloud Gateway でクラウド間の data portability も完璧だ • OpenShift の Cloud Native Storage は OpenShift Container Storage で決まりだ まとめ