TECHSTEPスマートフォン用の表示で見るTECHSTEPITインフラ関連の記事を公開してます。Kubernetesはじめに本投稿では、先日入門したEdgeFSについて、その概要をまとめたので紹介します。以前概要をまとめたCephとは異なり、EdgeFSはまだ利用例も少なく、情報がそれほど多くない状況です。公式ドキュメントには内部構成などの情報が欠けており、都度別の記事から情報を引っ張ってきています。記載内容に誤りがあったときは、ご連絡いただければ幸いです。※Rook公式ドキュメントよりEdgeFSはGeo-Transparentなデータアクセスを実現する、マルチクラウド時代の分散ストレージシステムとして紹介されます。Kubernetes上であればオンプレ・クラウドいずれの環境でも構築可能であり、EdgeFSノードがコンテナーとしてデプロイされ、分散オブジェクトストレージを提供します。Geo-Transparentとは、データが常にオンラインであり、地理的に離れたサイト間で、利用者がいつでもアクセスできることを指しています。EdgeFSでは一つのグローバルな名前空間を作成し、各サイトから接続することで、地理的な分散サイトに無制限に拡張することができます。EdgeFSはスタンダードなストレージプロトコル(NFS/S3/iSCSI)に対応しており、各ローカルサイト内では、ファイル・ブロック・オブジェクトストレージ全てで等しい拡張性を提供します。リモートサイトにあるデータへの効率的なアクセスも実現し、ステートフルアプリケーション向けに高スループット・低レイテンシのデータアクセスを提供します。EdgeFSはKubernetes・Rookとの統合を行い、機能拡張を進めています。Kubernetesの機能を利用することでフェイルオーバーへの動的対応などを実現します。Kubernetes上であればどこでもデプロイ可能であり、マルチクラウドへの対応も可能です。CSI、Rookと統合することで、クラスター管理の簡便化などをもたらします。EdgeFSの特徴EdgeFSの持つ特徴を記載します。Object:ファイル・ブロック・オブジェクトストレージのプロトコルを利用可能です。deployment:AWS/GCP/Azureなどのパブリッククラウドから、オンプレミス・IoT/Edgeデバイスまで導入可能で、Kubernetes/Rook(あるいはDocker)が導入済みの環境であれば数分でデプロイが完了します。protection:データを複製し、複数の場所に保存します。Codeも提供します。加えてデータの自己修復機能とスナップショット機能により、耐障害性も備えます。Reduction:地理的サイト間でのデータ重複排除と急速な圧縮を提供します。サイト間での通信を減らし、リモートサイトにあるデータへのアクセスを高速化します。encryption:サーバーサイドでのデータ暗号化を行います。256/512-bitで暗号化されます。controls:地理的情報を考慮したマルチテナントに対応し、ファイル・LUN・オブジェクトの粒度でのQoS機能を備えます。Failure)がありません。メタデータ専用サーバーが不要です。Highly-Available:マイクロ秒単位でI/Oフェイルオーバーを解決するような構成を組んでおり、ロケーションに依存しないデータの配置・検索技術を保証します。APIEdgeFSの登場した背景(ユースケース)そもそもEdgeFSがどのような理由で開発されたのか、様々な記事上でいくつかのユースケースが紹介されていますが、その中でも一番しっくり来たこちらの記事の内容を紹介します。Computingの問題点これまでのレガシーなシステムは、中央集権的なデザインをベースに作られており、このシステムでは、データ容量的には数GB、あるいは数百万レコードを扱う場合、ネットワーク的にはクラウドと接続するネットワークが「適度に早く」、数ギガバイトのデータを数秒でアップロードできる間は機能します。一方で、ここ20年程で転送速度が10-100倍になっているにもかかわらず、WANのレイテンシはそれほど改善されておらず、いまだ物理的な距離に依存します。Connectを利用した場合でも、東海岸から西海岸までの速度が40ms-100msを上回ることはありません。※こちらの記事よりまた、ネットワークレイテンシの問題だけではなく、データ量が増加する問題もあります。全てのデータがデジタル化され、あらゆるデバイスで生成されるデータが収集されることを考えると、特にEdgeのデータ量は急速に増加することが予測されます。データ増加予測のグラフ※こちらの記事よりこれらの問題点をまとめると、以下のようになります。problem:Edgeデータが集めるためにTB・PB級のデータを保存する必要があり、それを実現するうえで問題が発生し始める。センサー・5Gの技術が生み出す何億ものレコードを扱うことが難しくなる。problem:ネットワーク技術の向上にもかかわらず、地理的距離に応じてレイテンシは増加する。アプリケーション側でマルチスレッドなどの技術を利用すれば多少改善はするかもしれないが、その分構成が複雑になり、また結果整合性を扱う必要も生じる。problem:データをコピーしたら、解析などの目的のためにどこかに保存する必要がある。一時的であれ、クラウドストレージ上に数百テラバイトものデータを保存することは、他のリソースと比較するまでもなくコスト増につながる。problem:コピーされたデータは重複排除や効率的な圧縮ができないだけでなく、増え続けるデータを管理するコストも発生する。problem:規則等の理由で保存が義務付けられたデータを、ビジネス上の理由で複数サイトで所有した場合、制御不能のデータの集まりが「サイロ」を生み出す。サイロは通常管理が難しく、移動やバックアップも容易にできない。problem:異なるクラウドを利用することで、異なる技術・プロトコル・プロセスを扱う必要がある。マルチクラウドにデータが散らばりサイロが発生した場合、その管理は困難になり、結果的にはマルチクラウドの利点を損なうことになる。するメカニズムが必要となります。EdgeFSはまさにそのような機能を提供するストレージソフトウェアになります。EdgeFSを利用することで、上記問題に対して以下のような解決策を提供します。I/OI/Oがローカルサイトで発生した場合は、すべての処理がスムーズに実行され、またローカルストレージのI/O速度は今ではローカルネットワークI/Oとほぼ同等でレイテンシもほとんど発生しません。そのため、EdgeFSでは、可能な限りローカルのI/O処理を多くする戦略をとります。EdgeFSではすべての構成物はimmutableであり、Gitと同様に、すべての変更点・変更履歴がグローバルに保存される一方で、ローカルのIOPSパフォーマンスを実現します。EdgeFSではデータ書き込みは常にローカルで行い、バージョンのアップデートはトランザクションの一貫性とともに実行されます。データ読みこみの大部分はローカルで行い、その動作は動的な損失データチャンクの読み込み・geo-transparentなキャッシュ機能によって実現します。グローバルなデータのバージョン管理・メタデータのimmutabilityを担保することで、データ読み込みの一貫性などを保証し、ローカルのI/Oに近いパフォーマンスをもたらします。Cost余分なデータコピーがある場合、データそのものを保存するコストに加え、データを管理するためのコストが発生します。EdgeFSではこれまでローカルサイトで提供されてきた重複排除・キャッシュ・スナップショットの取得といった機能をグローバルサイトに拡大し、データ保存量や管理コストを削減することができます。EdgeFSではあるデータが重複していると検出した場合、そのデータは送信しません。グローバル名前空間の管理は自動的に行われます。EdgeFSは、隣接するサイトから損失したブロックを読み込むことで自己修復することも可能なため、DRや可用性の担保を容易に実現することができます。その他ユースケース上記のような、Edge・IoT環境でのデータ送信・保存・管理にあたって発生するストレージ・ネットワークの問題を解決するだけでなく、以下のようなユースケースでの利用も提案されています。DevelopersコンポーネントここからEdgeFSのコンポーネントについて紹介します。以下のコンポーネントの中には、実際にKubernetes上で動作するコンテナも含まれているため、RookとEdgeFSのコンポーネントとを明確に分離できていない部分があります。pluginからのリクエストをバランシング・委任する機能を提供します。efscliコマンドを実行できるtoolboxとしても機能します。Pod内では以下の3つのコンテナが起動しています。gRPC-EFSProxyが動作します。Dashboardを提供します。EdgeFSにおけるデータノードであり、HDD/SSDを扱います。Pod内では以下の3つのコンテナが起動しています。内部ではCCoWなどのプロセスが動作します。Corosyncはアプリケーション内にHAを実装するためのOSSであり、クラスター内でノード間の死活監視を行います。NFSサービスを提供します。Ganeshaのほか、gRPCプロセスも起動します。S3サービスを提供し、Pod内ではgRPCプロセスも起動します。S3Xサービスを提供します。s3-proxyの2つのコンテナが起動します。iSCSIサービスを提供し、Pod内ではgRPCプロセスも起動します。pluginを利用できます。別クラスターとの接続や各機能を提供します。Pod上で動作するdaemonコンテナ内部ではCCoWというプロセスが起動しています。このCCoWについて、こちらの記事を元に紹介します。Writeの略称で、バージョン管理されたオブジェクトデータへのアクセスを提供する、オブジェクトストレージシステムです。チャンクベースの分散重複排除機能を備えており、ベアメタルやVMなどにデプロイすることができます。クライアントに従来のオブジェクトストレージへのアクセス方法を提供します。Serverへ転送します。S3/SWIFTの互換性も持ちます。chunk向けのローカルストレージを提供します。以下のような機能を持ちます。IDを付与して保存します。IDは各chunkに付与し、配置するために必要です。payloadの暗号化ハッシュ値によって識別されます。Putトランザクションを完了します。serverにchunkを複製します。各バージョンのオブジェクトに関するメタデータ情報を保持します。Directoryという、オブジェクトストレージのバケットのようなものに統合されます。以下のような機能を提供します。identifier)で特定されます。Serverで生成されます。Manifestは異なるオーダーで飛んでくることが前提です。Manifestを獲得することが想定されます。Manifestが更新されると、ストレージへの要求が発生します。Server上のchunkリファレンスを更新します。ServerにManifest情報を複製します。manifestを保持する必要がなくなります。Server(Target)間は、Replicastと呼ばれる高パフォーマンス・低レイテンシのUDPベースのプロトコルで接続されます。各オブジェクトの配置場所の決定には、FlexHashというハッシュテーブルを利用します。※こちらの記事よりFlexHashはオブジェクト名をハッシュ化(SHA-256)した値を、オブジェクトの保存場所を決定するために利用します。オブジェクトの保存場所・及び検索にはハッシュ値を利用します。Groupと呼ばれるサーバーのグループをを決定する際に利用します。Groupがデータ転送をスケジューリングします。FlexHashはローカルサイトで構築され、サーバーメモリに常駐し、EdgeFSにおけるI/Oルーティングを担う重要なコンポーネントです。Domainポリシーに基づくサーバー間・ラック間をまたいだサーバーグループです。Groupがchunkを受け入れるか、メンバー間でnegotiateして決定します。決定することができます。Groupに送ればよくなります。Groupは別ストレージサーバへのデータ転送を行います。Serverがオブジェクトを受け取ると、まずオブジェクトを複数のchunkに分割し、各送信先に転送します。転送の際、複数のUDPデータグラムに分割して送信し、送信先で再集積し、chunkのSHA-256のハッシュ値とそれを比較します。chunk全体のハッシュ値を利用することでデータの正確性を担保し、データ転送が成功したかを確認するために必要な転送パケットが大きく削減できます。オブジェクトを変更した場合も、変更した分は、該当のchunkのみを転送すればよくなります。データの転送が失敗し、再送が必要な場合は、chunk全体を再送する必要があります。ネットワーク輻輳によりすべてドロップされることに比べれば、転送の失敗・再送は許容できる範囲であると考えられているようです。Serverからデータを一度転送すれば、複数のストレージサーバーにデータを転送することができます。これにより、ストレージサーバーへデータ転送を行う際のネットワーク利用帯域を抑制し、高パフォーマンス・低レイテンシを実現します。Gateway)は、EdgeFSにおけるセグメント間・クラウド間のグローバル名前空間同期機能に利用します。dataを分散し、シームレスでGeo-Transparentなデータアクセスを実現します。ISGWは、以下のような機能を提供します。ISGWがリンクされているデータのソースサイトでファイル・オブジェクトに修正が走ると、ISGWエンドポイントリンクが検知し、拡散します。これにより転送データ量を削減することができます。ファイル変更が走っても、そのハッシュ値がグローバルに一意でなければ(他にマッチするものがあれば)転送されません。そのため、グローバル空間で重複排除され、転送データの重複排除を実現できます。双方向通信により、グローバル名前空間全体で同じファイル/オブジェクトの変更を可能にします。不要なサイト間の通信や通信方向を制御することもできます。Geo-Transparentなデータ同期を実現するため、グローバル名前空間全体でデータ変更が確認できます。メタデータの変更のみを転送することも可能です。これを有効にすると、ユーザーはオンデマンドでデータの変更を読み込めるような効率的なアクセスエンドポイントを構築できます。最後にここまででEdgeFSの概要を眺めてきましたが、個人的には以下のような感想を持ちました。EdgeFSは地理的スケールでデータを扱うときに生じる問題を解決するために開発された。ネットワーク帯域逼迫・パフォーマンス低下の問題に対しては、不要な通信をしないことで利用帯域を抑えるよう制御し、データ保存によるコスト増に対しては、データの重複排除や管理の自動化により対応する。EdgeFSはCephとは異なり、完全にコンテナ/Kubernetesに対応したストレージソフトウェアである。Kubernetes上であればクラウド・オンプレ等の環境にデプロイできる。Inc.の開発したプロトコルを多く含んでおり、それらがEdgeFSの構成や機能を形作る大きな要因となっている。EdgeFSを複数サイトで利用する際はISGWを使うことが前提である。v1.2が公開されました。先日個人的な興味でKubevirtを少し触っておりました。読者になる検索リンクはてなブログブログをはじめる週刊はてなブログはてなブログPro最新記事Rook-Cephのコンフィグ設定方法と設定例EdgeFS概要まとめRook-EdgeFSに入門するCeph概要まとめAzureのIaaS検証環境をTerraformで用意する月別アーカイブはてなブログをはじめよう!FY0323さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。