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

Rook EdgeFS

Rook EdgeFS

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

Makoto Watanabe

July 03, 2020
Tweet

More Decks by Makoto Watanabe

Other Decks in Technology

Transcript

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

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

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

    (完全個人の趣味です) Disclaimer 本日の話は個人の見解であり、所属する組織の公式見解ではあり ません。 4 Rookだらけの Advent Calendar 2019 EdgeFSパートを 7日分担当しました 本日は この記事の内容 をサマライズした ものです
  4. EdgeFSの特徴 High Performance 8 標準的なストレージプロトコル( NFS,iSCSI,S3)で 高いスループット、低レイテンシ Kubernetes Integrated Geo-Scalable

    1つのグローバルネームスペース として接続された、 地理的に分散したのサイト オブジェクト、ブロック、ファイルアクセスに対して スケール、リモートサイトのデータへの効率的なアクセスが可能 Rookオーケストレーションにより管理の容易性を提供 CSIによりdynamic/static provisioning,clone,snapshotを提供
  5. 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
  6. EdgeFS現状 • Nexenta Systems.Inc ◦ 現在はDDNに • DDNはHPCワークロード等で有名 • CCOWやFlexHashなどは

    Nexenta Edgeの言葉が多い ◦ Rook-EdgeFSのドキュメントでは知っている前 提でキーワードが出現 ◦ EdgeFSのドキュメントを見ることで理解が深ま る 10
  7. 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
  8. 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で マウント
  9. 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で マウント
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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#
  15. 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 リージョン相当 テナント、環境の分離 保管場所、後述するサービスと紐付けるもの
  16. 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
  17. EdgeFS Cluster tenant bucket 24 NFS Service bucket NFS Service

    S3 Service Kubernetes上へエンドポイントを展開するまで EdgeFS Clusterの準備完了
  18. 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で マウント
  19. 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を適応
  20. 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をストレージ アクセスに使用
  21. 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 名
  22. 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
  23. Scale-Out NFS/iSCSI targetとCSI NFS の違い 31 EdgeFS Cluster tenant bucket

    NFS Service PVC StorageClass PV 動的にBucketを作成 Kubernetesと シームレスに統合
  24. ISGW (Inter-Segment GateWay) 33 • 地理的分散ストレージを実現する機能 • 複数Kubernetesクラスタ間でデータを同期 ◦ 双方向・片方向同期に対応

    ◦ NFS、S3、LUN間も可能 • データレプリケーション方法は選択可能 ◦ フルレプリケーション ◦ メタデータのみレプリケーション、データを都度取得 Kubernetes/Rook EdgeFSでは、 • ISGW CRDで複数のKubernetesクラスタでデータ同期が可能
  25. 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
  26. 情報源 • 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
  27. Credits Special thanks to all the people who made and

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