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

Rook EdgeFS

Rook EdgeFS

Rook Meetup #3 でお話したEdgeFSです。

C32c94c52ce15a3a4120c55457fef767?s=128

Makoto Watanabe

July 03, 2020
Tweet

More Decks by Makoto Watanabe

Other Decks in Technology

Transcript

  1. Rook / EdgeFS makotow@Japan Rook Meetup #3 2020/07/03

  2. Agenda ▷ EdgeFS とは? ▷ Rook が EdgeFS に提供するもの ▷

    特徴的な機能・なにができるようになるか ▷ 情報源・まとめ 2
  3. 今回の内容 話すこと • EdgeFSの作られた背景、目指すもの • Rook との連携 • 使うために必要な知識やオペレーション •

    情報源 3 話さないこと • データ分散等の中身のアルゴリズム、 ただしキーワードや情報のありかは触れます • 通信の内部や実装 • 障害復旧等
  4. Who am I? @makotow CSI をウォッチしたり、Kubernetesと戯れたりしています。 本職はいわゆるソリューションアーキテクトです。 仕事とEdgeFS, Rook はほとんど関係ありません。

    (完全個人の趣味です) Disclaimer 本日の話は個人の見解であり、所属する組織の公式見解ではあり ません。 4 Rookだらけの Advent Calendar 2019 EdgeFSパートを 7日分担当しました 本日は この記事の内容 をサマライズした ものです
  5. 5 EdgeFS とは?

  6. マルチクラウド時代の 分散ストレージシステム 地理的に透過的にアクセス可能なもの 6 http://edgefs.io/ https://rook.io/docs/rook/v1.3/edgefs-storage.html

  7. • 地理的に分散しているストレージサイトを 1つのデータサービスとして仮想的にアクセス可能 • マルチクラウドやハイブリッドクラウド、 エッジIoTを実現するもの 7 EdgeFSのユースケース

  8. EdgeFSの特徴 High Performance 8 標準的なストレージプロトコル( NFS,iSCSI,S3)で 高いスループット、低レイテンシ Kubernetes Integrated Geo-Scalable

    1つのグローバルネームスペース として接続された、 地理的に分散したのサイト オブジェクト、ブロック、ファイルアクセスに対して スケール、リモートサイトのデータへの効率的なアクセスが可能 Rookオーケストレーションにより管理の容易性を提供 CSIによりdynamic/static provisioning,clone,snapshotを提供
  9. EdgeFSとは?: 機能編 • File, Block and Object • Fast &

    easy deployment • Data Protection • Data Reduction • At rest encryption • Multi-Tenancy with QoS controls • No SPoF • Highly-Available 9
  10. EdgeFS現状 • Nexenta Systems.Inc ◦ 現在はDDNに • DDNはHPCワークロード等で有名 • CCOWやFlexHashなどは

    Nexenta Edgeの言葉が多い ◦ Rook-EdgeFSのドキュメントでは知っている前 提でキーワードが出現 ◦ EdgeFSのドキュメントを見ることで理解が深ま る 10
  11. 11 Rook EdgeFS とは? EdgeFSとRookの関係

  12. Rook とは? Storage Orchestrator EdgeFSの観点からみると、 EdgeFSをKubernetes上へデプロイし、 ライフサイクルを管理してくれるもの 12

  13. Kubernetes Integration Rook Operator 13

  14. 1. ISGW LINK 2. Scale-Out NFS 3. Scale-Out SMB (v1.3で追加)

    4. S3 5. Edge-X S3 6. Swift 7. iSCSI 8. CSI NFS/iSCSI EdgeFSの提供する機能 様々なストレージプロトコルの CRDが準備されている 本資料ではScale-Out NFS、CSI NFSを ベースに説明 14
  15. EdgeFSをKubernetesで使うために必要なステップ 15 EdgeFS operator の導入 EdgeFSの コンフィギュレーション Kubernetes上で 各ストレージプロトコルの CRDをApply

    CSI NFS/iSCSI の場合は StorageClassの定義 PVCを定義 Podへマウント EdgeFS Cluster の導入 EdgeFS 関連の操作 Kubernetesでの操作 Kubernetes Service, Deploymentを展開 ServiceでIPが付与される ServiceのIPで マウント PVCで マウント
  16. EdgeFSをKubernetesで使うために必要なステップ 16 EdgeFS operator の導入 EdgeFSの コンフィギュレーション Kubernetes上で 各ストレージプロトコルの CRDをApply

    CSI NFS/iSCSI の場合は StorageClassの定義 PVCを定義 Podへマウント EdgeFS Cluster の導入 EdgeFS 関連の操作 Kubernetesでの操作 Kubernetes Service, Deploymentを展開 ServiceでIPが付与される ServiceのIPで マウント PVCで マウント
  17. EdgeFSのクラスタデプロイは簡単、高速 $ git clone --single-branch --branch release-1.3 https://github.com/rook/rook.git $ cd

    rook/cluster/examples/kubernetes/edgefs $ kubectl create -f operator.yaml $ kubectl create -f cluster.yaml Cluster CRD のパラメータは非常に多く、柔軟に設定可能 https://rook.io/docs/rook/v1.3/edgefs-cluster-crd.html ノードの必要要求を満たしていれば4コマンドでクラスタデプロイ完了 17
  18. EdgeFS operator の導入 18 $ kubectl get all -n rook-edgefs-system

    NAME READY STATUS RESTARTS AGE pod/rook-discover-6xhh9 1/1 Running 0 52m pod/rook-discover-7tvqk 1/1 Running 0 52m pod/rook-discover-84rcs 1/1 Running 0 52m pod/rook-discover-x6n8d 1/1 Running 0 52m pod/rook-edgefs-operator-6d6cdb64b9-r4nd7 1/1 Running 0 54m NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/rook-discover 4 4 4 4 4 <none> 52m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/rook-edgefs-operator 1/1 1 1 54m NAME DESIRED CURRENT READY AGE replicaset.apps/rook-edgefs-operator-6d6cdb64b9 1 1 1 54m
  19. EdgeFS Cluster Operator 19 $ kubectl get all -n rook-edgefs

    NAME READY STATUS RESTARTS AGE pod/rook-edgefs-mgr-5cb8c9886b-csjmr 3/3 Running 0 3m52s pod/rook-edgefs-target-0 3/3 Running 0 3m52s pod/rook-edgefs-target-1 3/3 Running 0 3m52s pod/rook-edgefs-target-2 3/3 Running 0 3m52s pod/rook-edgefs-target-3 3/3 Running 0 3m52s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/rook-edgefs-mgr ClusterIP 10.98.116.140 <none> 6789/TCP 3m52s service/rook-edgefs-restapi ClusterIP 10.105.115.218 <none> 8881/TCP,8080/TCP,4443/TCP 3m52s service/rook-edgefs-target ClusterIP None <none> <none> 3m52s service/rook-edgefs-ui ClusterIP 10.98.187.240 <none> 3000/TCP,3443/TCP 3m52s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/rook-edgefs-mgr 1/1 1 1 3m52s NAME DESIRED CURRENT READY AGE replicaset.apps/rook-edgefs-mgr-5cb8c9886b 1 1 1 3m52s NAME READY AGE statefulset.apps/rook-edgefs-target 4/4 3m52s Statefulset: Edgefs target Deployment: Rook-edgefs-mgr Service: rook-edgefs-mgr, restapi, target, ui
  20. EdgeFS Cluster の中身 20 1. rook-edgefs-target(StatefulSet) a. 各ノードでストレージ機能として動作 b. corosync,

    daemon(edgefs), auditdが含まれる 2. rook-edgefs-mgr (Deployment) a. 管理コンソールやCLI b. GRPCのエンドポイント c. EdgeFS のrook-edgefs-mgrに含まれるtoolboxコンテナで実施 3. Service: rook-edgefs-mgr の公開 a. GRPC b. UI c. Management Console
  21. Kubernetes上へエンドポイントを展開するまで EdgeFS toolboxへログイン EdgeFSの世界でのオペレーション デプロイしたedgefs-mgrポッドへログイン efscli を使用してEdgeFSを構成する 21 $ kubectl

    get pod --all-namespaces | grep edgefs-mgr rook-edgefs rook-edgefs-mgr-5cb8c9886b-csjmr 3/3 Running 0 6h51m $ kubectl exec -it -n rook-edgefs rook-edgefs-mgr-5cb8c9886b-csjmr -- env COLUMNS=$COLUMNS LINES=$LINES TERM=linux toolbox Defaulting container name to rook-edgefs-mgr. Use 'kubectl describe pod/rook-edgefs-mgr-5cb8c9886b-csjmr -n rook-edgefs' to see all of the containers in this pod. Welcome to EdgeFS Mgmt Toolbox. Hint: type neadm or efscli to begin root@rook-edgefs-mgr-5cb8c9886b-csjmr:/opt/nedge#
  22. Kubernetes上へエンドポイントを展開するまで EdgeFSのcluster, tenant, bucketを準備 Cluster Tenant EdgeFSでオペレーション、データの保管領域を作成 22 root@rook-edgefs-mgr-5cb8c9886b-csjmr:/opt/nedge# efscli

    cluster create Hawaii root@rook-edgefs-mgr-5cb8c9886b-csjmr:/opt/nedge# efscli tenant create Hawaii/Cola root@rook-edgefs-mgr-5cb8c9886b-csjmr:/opt/nedge# efscli bucket create Hawaii/Cola/bk1 root@rook-edgefs-mgr-5cb8c9886b-csjmr:/opt/nedge# efscli tenant create Hawaii/Pepsi root@rook-edgefs-mgr-5cb8c9886b-csjmr:/opt/nedge# efscli bucket create Hawaii/Pepsi/bk1 Bucket リージョン相当 テナント、環境の分離 保管場所、後述するサービスと紐付けるもの
  23. Kubernetes上へエンドポイントを展開するまで EdgeFSでServiceを作成、サーブ 23 root@rook-edgefs-mgr-5cb8c9886b-csjmr:/opt/nedge# efscli service create nfs nfs-cola root@rook-edgefs-mgr-5cb8c9886b-csjmr:/opt/nedge#

    efscli service serve nfs-cola Hawaii/Cola/bk1 Serving new export 2,Cola/bk1@Hawaii/Cola/bk1 root@rook-edgefs-mgr-5cb8c9886b-csjmr:/opt/nedge# efscli service create nfs nfs-pepsi root@rook-edgefs-mgr-5cb8c9886b-csjmr:/opt/nedge# efscli service serve nfs-pepsi Hawaii/Pepsi/bk1 Serving new export 2,Pepsi/bk1@Hawaii/Pepsi/bk1 Service Serviceのサーブ EdgeFSでサービスの作成と、サービスを公開するバケットを指定 どのストレージプロトコルで公開するか バケットとサービスを紐づけ外部に公開 ※ServiceはKubernetesのものではない、EdgeFSのService
  24. EdgeFS Cluster tenant bucket 24 NFS Service bucket NFS Service

    S3 Service Kubernetes上へエンドポイントを展開するまで EdgeFS Clusterの準備完了
  25. EdgeFSをKubernetesで使うために必要なステップ 25 EdgeFS operator の導入 EdgeFSの コンフィギュレーション Kubernetes上で 各ストレージプロトコルの CRDをApply

    CSI NFS/iSCSI の場合は StorageClassの定義 PVCを定義 Podへマウント EdgeFS Cluster の導入 EdgeFS 関連の操作 Kubernetesでの操作 Kubernetes Service, Deploymentを展開 ServiceでIPが付与される ServiceのIPで マウント PVCで マウント
  26. 26 各ストレージプロトコルでCRDを提供 殆どはKindを変更するだけで対応可能 Instances は立ち上げるPod数、 マルチヘッド構成が可能=> IOを分散させパフォーマンスをあげることが可能 apiVersion: edgefs.rook.io/v1 kind:

    NFS metadata: name: nfs-cola namespace: rook-edgefs spec: instances: 1 apiVersion: edgefs.rook.io/v1 kind: S3 metadata: name: s301 namespace: rook-edgefs spec: instances: 1 ScaleOut-NFS CRD S3 CRD Kubernetes上へエンドポイントを展開するまで CRDを適応
  27. Kubernetes上へエンドポイントを展開するまで CRDを適応 EdgeFS Cluster tenant bucket 27 NFS Service bucket

    NFS Service S3 Service Scale-Out NFS CRD S3 CRD SVC Deployment Metadata.name に EdgeFSのService名を設定 EdgeFSサービスの IPをストレージ アクセスに使用
  28. CSI NFS/iSCSI target 28

  29. CSI NFS/iSCSI target StorageClass 29 • StorageClassに、EdgeFSのサービス、クラスタ、テナントを指定し、 PVC定義時にStorageClassで指定することでbucketを動的に作成 apiVersion: storage.k8s.io/v1

    kind: StorageClass metadata: name: edgefs-nfs-csi-storageclass provisioner: io.edgefs.csi.nfs parameters: segment: rook-edgefs service: nfs-csi cluster: csi-test tenant: tenant01 Kubernetes namespace EdgeFS Service EdgeFS cluster 名 EdgeFS tenant 名
  30. CSI NFS/iSCSI target PVC 30 • PVC定義時にStorageClassで指定することでbucketを動的に作成 EdgeFSのStorageClassを 指定 apiVersion:

    v1 kind: PersistentVolumeClaim metadata: name: edgefs-nfs-csi-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: edgefs-nfs-csi-storageclass
  31. Scale-Out NFS/iSCSI targetとCSI NFS の違い 31 EdgeFS Cluster tenant bucket

    NFS Service PVC StorageClass PV 動的にBucketを作成 Kubernetesと シームレスに統合
  32. EdgeFS ISGW 32

  33. ISGW (Inter-Segment GateWay) 33 • 地理的分散ストレージを実現する機能 • 複数Kubernetesクラスタ間でデータを同期 ◦ 双方向・片方向同期に対応

    ◦ NFS、S3、LUN間も可能 • データレプリケーション方法は選択可能 ◦ フルレプリケーション ◦ メタデータのみレプリケーション、データを都度取得 Kubernetes/Rook EdgeFSでは、 • ISGW CRDで複数のKubernetesクラスタでデータ同期が可能
  34. Kubernetesへデプロイしたイメージ(マルチクラスタ) 34 apiVersion: edgefs.rook.io/v1 kind: ISGW metadata: name: hawaii namespace:

    rook-edgefs spec: direction: send+receive remoteURL: ccow://10.3.32.240:14000 localAddr: 10.3.30.75:14000 apiVersion: edgefs.rook.io/v1 kind: ISGW metadata: name: hawaii namespace: rook-edgefs spec: direction: send+receive remoteURL: ccow://10.3.30.75:14000 localAddr: 10.3.32.240:14000
  35. 情報源 35

  36. 情報源 • EdgeFSとRook EdgeFSでドキュメントが別れている ◦ 両方見ると理解が進む • ストレージ部分はNexenta Edge深く知るためには Nexenta

    Edgeの確認も必要 36
  37. 情報源 • EdgeFS ◦ http://edgefs.io/ • MediumのEdgeFS blog ◦ https://medium.com/edgefs

    • Reddit ◦ EdgeFS - a new kid in town! Solving multi-cloud data access : docker ◦ https://www.reddit.com/r/docker/comments/ a8ny7f/edgefs_a_new_kid_in_town_solving_m ulticloud_data/ • GitHub ◦ https://github.com/Nexenta/edgefs-csi ◦ https://github.com/rook/rook • Slack ◦ rook-io.slack.com • Rook のドキュメントを参照することで、 動かすことは可能 • 細かい実装や思想、設計については GitHubのログや、Issueを見ると理解が 早まる 37
  38. 最近いろいろあったこと https://github.com/rook/rook/issues/5525 EdgeFSクローズドソース化により、 Nexenta からのDCMA申請により Fork含むリポジトリ削除が実施された。 RookからEdgeFS provider を消そう という動きがあったが「

    Rookは関係無いよね」 ということで一旦クローズ ただ、今日紹介しようとおもった サイトがいくつか消えている … 38
  39. ほかにもできること 1. Erasure Coding a. 標準ではクラスタ作成時のパラメータで指定したレプリカ数をコ ピー 2. VDEV Management、Monitoring

    3. Cluster Upgrade 39
  40. まとめ 40

  41. まとめ • EdgeFSの概要について • ドキュメント不足は否めないが調べることは可能 ◦ ソースみたり、Slackで聞けばすぐ教えてくる。 ◦ とりあえず動かすだけであればRookのドキュメントを見るとすぐに実現 可能

    • 本日は説明してませんが‥ ◦ ErasureCoding、FlexHash、VDEVManagement など 面白そうなテクノロジーがつまっています 41
  42. Thanks! Any questions? 42

  43. Credits Special thanks to all the people who made and

    released these awesome resources for free: ▷ Presentation template by SlidesCarnival ▷ Photographs by Unsplash 43