Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Agenda ▷ EdgeFS とは? ▷ Rook が EdgeFS に提供するもの ▷ 特徴的な機能・なにができるようになるか ▷ 情報源・まとめ 2

Slide 3

Slide 3 text

今回の内容 話すこと ● EdgeFSの作られた背景、目指すもの ● Rook との連携 ● 使うために必要な知識やオペレーション ● 情報源 3 話さないこと ● データ分散等の中身のアルゴリズム、 ただしキーワードや情報のありかは触れます ● 通信の内部や実装 ● 障害復旧等

Slide 4

Slide 4 text

Who am I? @makotow CSI をウォッチしたり、Kubernetesと戯れたりしています。 本職はいわゆるソリューションアーキテクトです。 仕事とEdgeFS, Rook はほとんど関係ありません。 (完全個人の趣味です) Disclaimer 本日の話は個人の見解であり、所属する組織の公式見解ではあり ません。 4 Rookだらけの Advent Calendar 2019 EdgeFSパートを 7日分担当しました 本日は この記事の内容 をサマライズした ものです

Slide 5

Slide 5 text

5 EdgeFS とは?

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

EdgeFSの特徴 High Performance 8 標準的なストレージプロトコル( NFS,iSCSI,S3)で 高いスループット、低レイテンシ Kubernetes Integrated Geo-Scalable 1つのグローバルネームスペース として接続された、 地理的に分散したのサイト オブジェクト、ブロック、ファイルアクセスに対して スケール、リモートサイトのデータへの効率的なアクセスが可能 Rookオーケストレーションにより管理の容易性を提供 CSIによりdynamic/static provisioning,clone,snapshotを提供

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

EdgeFS現状 ● Nexenta Systems.Inc ○ 現在はDDNに ● DDNはHPCワークロード等で有名 ● CCOWやFlexHashなどは Nexenta Edgeの言葉が多い ○ Rook-EdgeFSのドキュメントでは知っている前 提でキーワードが出現 ○ EdgeFSのドキュメントを見ることで理解が深ま る 10

Slide 11

Slide 11 text

11 Rook EdgeFS とは? EdgeFSとRookの関係

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Kubernetes Integration Rook Operator 13

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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で マウント

Slide 16

Slide 16 text

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で マウント

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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 6789/TCP 3m52s service/rook-edgefs-restapi ClusterIP 10.105.115.218 8881/TCP,8080/TCP,4443/TCP 3m52s service/rook-edgefs-target ClusterIP None 3m52s service/rook-edgefs-ui ClusterIP 10.98.187.240 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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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#

Slide 22

Slide 22 text

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 リージョン相当 テナント、環境の分離 保管場所、後述するサービスと紐付けるもの

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

EdgeFS Cluster tenant bucket 24 NFS Service bucket NFS Service S3 Service Kubernetes上へエンドポイントを展開するまで EdgeFS Clusterの準備完了

Slide 25

Slide 25 text

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で マウント

Slide 26

Slide 26 text

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を適応

Slide 27

Slide 27 text

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をストレージ アクセスに使用

Slide 28

Slide 28 text

CSI NFS/iSCSI target 28

Slide 29

Slide 29 text

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 名

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

Scale-Out NFS/iSCSI targetとCSI NFS の違い 31 EdgeFS Cluster tenant bucket NFS Service PVC StorageClass PV 動的にBucketを作成 Kubernetesと シームレスに統合

Slide 32

Slide 32 text

EdgeFS ISGW 32

Slide 33

Slide 33 text

ISGW (Inter-Segment GateWay) 33 ● 地理的分散ストレージを実現する機能 ● 複数Kubernetesクラスタ間でデータを同期 ○ 双方向・片方向同期に対応 ○ NFS、S3、LUN間も可能 ● データレプリケーション方法は選択可能 ○ フルレプリケーション ○ メタデータのみレプリケーション、データを都度取得 Kubernetes/Rook EdgeFSでは、 ● ISGW CRDで複数のKubernetesクラスタでデータ同期が可能

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

情報源 35

Slide 36

Slide 36 text

情報源 ● EdgeFSとRook EdgeFSでドキュメントが別れている ○ 両方見ると理解が進む ● ストレージ部分はNexenta Edge深く知るためには Nexenta Edgeの確認も必要 36

Slide 37

Slide 37 text

情報源 ● 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

Slide 38

Slide 38 text

最近いろいろあったこと https://github.com/rook/rook/issues/5525 EdgeFSクローズドソース化により、 Nexenta からのDCMA申請により Fork含むリポジトリ削除が実施された。 RookからEdgeFS provider を消そう という動きがあったが「 Rookは関係無いよね」 ということで一旦クローズ ただ、今日紹介しようとおもった サイトがいくつか消えている … 38

Slide 39

Slide 39 text

ほかにもできること 1. Erasure Coding a. 標準ではクラスタ作成時のパラメータで指定したレプリカ数をコ ピー 2. VDEV Management、Monitoring 3. Cluster Upgrade 39

Slide 40

Slide 40 text

まとめ 40

Slide 41

Slide 41 text

まとめ ● EdgeFSの概要について ● ドキュメント不足は否めないが調べることは可能 ○ ソースみたり、Slackで聞けばすぐ教えてくる。 ○ とりあえず動かすだけであればRookのドキュメントを見るとすぐに実現 可能 ● 本日は説明してませんが‥ ○ ErasureCoding、FlexHash、VDEVManagement など 面白そうなテクノロジーがつまっています 41

Slide 42

Slide 42 text

Thanks! Any questions? 42

Slide 43

Slide 43 text

Credits Special thanks to all the people who made and released these awesome resources for free: ▷ Presentation template by SlidesCarnival ▷ Photographs by Unsplash 43