Rook: EdgeFS AWS S3/ Edge-X S3 やってみた

Rookだらけの Advent Calendar 2019/12/22: Rook EdgeFS S3 S3X

makotow
makotow’s blog clone
26 min readDec 22, 2019

--

この記事は「Rookだらけの Advent Calendar」 2019/12/22分です。Rook EdgeFSについて記事を投稿します。

TL;DR

  • AWSS 3/EdgeX S3 は efscli でサービス作成 →Kubernetes Object 作成ですぐ使用可能に
  • 基本的にはEdgeFSの抽象化のおかげで様々なストレージプロトコルを均一的に扱える
  • AWS S3とEdge-X S3の差はオブジェクトストレージにいくつかの機能を追加しているが使い方まではドキュメントされていない(as of 2019/12/22)
  • EdgeFSでNoSQLという記載はEdge-X S3を指しているようだ

デプロイ

これまで通り相当簡単です。大きな流れとしては以下のとおりです。

  1. EdgeFS 上でefscliを使い、クラスタ作成、テナント作成、バケット作成、サービス有効化を実施
  2. Kubernetes側でCRDを作成しKubernetes上で使えるようにする

では、早速コマンドを見ていきましょう。

今回はサンプルに習って以下の構成です。

EdgeFSの構造はトップにクラスタ、クラスタ配下にテナント、テナント内にバケットという構成です。

EdgeFSの基本構成
  • Hawaii クラスタを作成
  • Cola, Pepsi テナントをHawaiiクラスタ内に作成
  • bk1 を各テナントに作成、という構造

EdgeFSでテナント作成やバケット作成、サービスの有効化をします。

ここまでで、クラスタ、テナント、バケットを作成しました。

作成したバケットを外部に公開するためサービスを作成します。この操作はEdgeFS側の操作です。

S3サービスを公開しました。ここまででEdgeFS側のオペレーションは終了です。

サービスを作成しバケットを外部に公開するイメージ図

Kubernets上でアクセスできるようにする

2つのサービスを公開するようにCRDを作成します。今回はやってみたの性質上最小限のマニフェストで実施します。yamlのパラメータはhttps://rook.io/docs/rook/master/edgefs-s3-crd.html を参照ください。

S3 cola テナント用CRD
S3 pepsi 用テナント

上記の名前のみを変更したCRDを使いマニフェストを適応していきます。

ポッドが上記のCRDで指定したインスタンス分動起していることがわかりします。(以下のイメージです。)

外部公開するためのサービス(KubernetesのService)を確認します。

こちらもテナントごとにサービスが作成されました。ClusterIPで作られているので外部に公開するにはNodePortかLoadBalancerに変更するかIngressを使うのがいいでしょう。今回はMetalLBを導入しているのでLoadBalancerで実施しアクセスしています。

Service.Type を LoadBalancer に変更

curl でLoadBalancerの外部IP向けにアクセスし、確認しました。

少し見づらいですが、HTTP 200 status code となり、テナント名、バケットが見えているのが確認できました。

Edge-X S3 のデプロイ

EdgeFS にはオブジェクトストレージとしてもう1つEdge-X S3 というものがあります。

マニフェスト的にはAWS S3 をデプロイしたときに使ったものの kind: S3kind: S3X と変更しただけです。

AWS S3との違いとしては以下の表がまとまっています。

https://github.com/Nexenta/edge-dev/blob/master/images/EdgeVsS3.png?raw=true

APIの一覧は以下のサイトに公開されていました。

デプロイまではRookのドキュメントに乗っているのですが、それ以降の使い方としてはMediumのブログを参照すると出てきます。例えば以下の記事でEdge-X S3が書かれています。

では、デプロイしていきます。今回はS3で準備したクラスタ、テナント、バケットを共有する形とします。色々見ているとどうやらEdgeFSの中のバケット1つにたいして様々なストレージプロトコルが割り当てられることがわかりました。

Kubernetesへ戻り、以下2つのマニフェストを作成し適応します。

s3x-cola.yaml
s3x-pepsi.yaml

上記マニフェストを適応すると以下のような状態になります。Edge-X S3 の場合はAWS S3 と比べProxyコンテナが付与された形で立ち上がります。

中身を見てみます。Proxyが立ち上がっているのがわかります。

Edge-X S3 オペレーションを試す

AWS S3 との差異の部分について実施します。

EdgeX-S3のポイントを確認します。External IPを割り当ててます。

ここからは以下の通りデータをjsonに追加して、NoSQLライクに取得できるところを確認使用としましたがうまく行きませんでした。(もう少し調査して追記できたらします。)リクエストを投げると以下のエラーとなってしまいました。

エラー内容(Podのログ)がセグっているのでもしかしたらMasterブランチを使っているのが理由かもしれません。

まとめ

今回はS3・Edge-X S3を試してみました。今まで通りefscliでクラスタ、テナント、バケットを作成し、サービスを有効にすることでストレージが使えるようになるというEdgeFS自体の抽象化されたオペレーションはなれると素晴らしくわかりやすいと思うようにもなりました。

そこからCRDでKubernetesへ見せるための手順も最小限で始めるのは非常に簡単です。

もちろん、運用を見越した設定をするためには十分な設計が必要になるとも感じています。

この記事を確認当たって大体のEdgeFSのアーキテクチャがわかってきましたやはり手を動かしながら学ぶということは大事ですね。

明日はEdgeFS CSI(NFS)を記事にしていきます。

--

--

makotow
makotow’s blog clone

kubernetes/container/docker/Programming/Go/Scala/Ruby/Mac/Emacs/IntelliJ/Rust/OpenShift.