1月29日、Kubernetes、Prometheus、およびコンテナとクラウドネイティブの世界のその他のオープンソース製品の背後にあるCNCF(Cloud Native Computing Foundation)の技術委員会は、 Rookプロジェクトの承認を発表しました。 この「Kubernetes分散ストレージシステムオーケストレーター」について詳しく知る絶好の機会です。
どのようなルークですか?
Rookは、データウェアハウスに自己管理、自己スケーリング、および自己修復を行う自動機能を提供するように設計されたGoで作成されたソフトウェア(無料のApache License 2.0で配布 )です。 これを行うために、Rookは(Kubernetes環境で使用されるデータストレージの)自動化を行います:展開、ブートストラップ、構成、プロビジョニング、スケーリング、更新、移行、クラッシュリカバリ、監視、およびリソース管理。
このプロジェクトはアルファ段階にあり、KubernetesクラスターでのCeph分散ストレージの調整を専門としています。 著者は、他のストレージシステムをサポートする計画も宣言していますが、これは次のリリースでは発生しません。
コンポーネントと技術デバイス
Kubernetes内のRookの作業の中心にあるのは、ストレージ構成を自動化し、その監視を実装する特別なオペレーターです( この記事で Kubernetesオペレーターについて詳しく説明しました ) 。
そのため、Rookオペレーターは、ストレージの展開とその後の保守に必要なすべてを含むコンテナーのように見えます。 オペレーターの責任の中で:
- 単純なRADOSクラスターを使用して、Cephストレージデーモン( ceph - osd)用のDaemonSetを作成します。
- Ceph監視ポッドの作成(クラスターの状態を確認する ceph -monを使用します。クォーラムでは、ほとんどの場合、3つのインスタンスがデプロイされ、それらのいずれかが落ちると新しいインスタンスが立ち上がります) 。
- クラスタ自体、 ストレージプール 、 オブジェクトストア ( オブジェクトの PUT / GETを実行するHTTPリクエストを処理するためのリソースとサービスのセット-それらはS3およびSwift APIと互換性があります)および ファイルシステムのCRD( カスタムリソース定義 )の管理。
- 必要なすべてのサービスを開始するための炉床の初期化。
- ルークエージェントの作成。
ルークエージェントは 、各Kubernetesホストに展開される個別のポッドで表されます。 エージェントの目的は、Kubernetesのストレージボリュームのサポートを提供するFlexVolumeプラグインを構成することです 。 エージェントはストレージ操作を実装します。ネットワークストレージデバイスの接続、ボリュームのマウント、ファイルシステムのフォーマットなど。
一般的なKubernetesクラスタ図でのルークコンポーネントの場所と役割
ルークは3種類のストレージを提供しています。
- block ( Block 、
StorageClass
)-ストレージを単一の炉床にマウントします。 - オブジェクト ( Object 、
ObjectStore
)-Kubernetesクラスターの内外で利用可能(S3 API経由); - 共有ファイルシステム( Shared File System 、
Filesystem
)-多くの炉床からの読み取りおよび書き込み用にマウントできるファイルシステム。
ルークの内部デバイスには次のものが含まれます。
- Mons -Cephを監視するためのポッド(前述のceph-monを使用);
- OSD -ceph-osdデーモン(オブジェクトストレージデーモン)を備えた囲炉裏;
- MGR -ceph -mgrデーモン(Ceph Manager)を備えたポッド。追加の監視機能と外部システム用のインターフェイス(監視/制御)を提供します。
- RGW (オプション) -オブジェクトストレージを備えた囲炉裏;
- MDS (オプション) -共有FSの囲炉裏。
すべてのRookデーモン(Mons、OSD、MGR、RGW、MDS)は、コンテナで起動される単一のバイナリ(
rook
)にコンパイルされます。
Rookプロジェクトの簡単な紹介として、Bassam Tabbara(Quantum CorpのCTO)によるこの短い(12枚のスライド) プレゼンテーションも役立ちます。
ルーク操作
Rookオペレーターは、Kubernetesバージョン1.6以降を完全にサポートしています(一部、古いK8sリリースは1.5.2です) 。 最も単純なシナリオでのインストールは次のようになります。
cd cluster/examples/kubernetes kubectl create -f rook-operator.yaml kubectl create -f rook-cluster.yaml
さらに、ルークオペレーター用にヘルムチャートが準備されたため、次のようにインストールを実行できます。
helm repo add rook-alpha https://charts.rook.io/alpha helm install rook-alpha/rook
少数の構成オプションがあり (たとえば、クラスターでこの機能を使用しない場合はRBACサポートを無効にできます)、これらは
--set key=value[,key=value]
パラメーターを介して
helm install
渡されます(または別のYAMLファイルに保存されます) 、および
-f values.yaml
をパススルーし
-f values.yaml
)。
Rookオペレーターをインストールし、そのエージェントで囲炉裏を実行した後、Rookクラスター自体を作成します。最も簡単な構成は次のとおりです(
rook-cluster.yaml
)。
apiVersion: v1 kind: Namespace metadata: name: rook --- apiVersion: rook.io/v1alpha1 kind: Cluster metadata: name: rook namespace: rook spec: dataDirHostPath: /var/lib/rook storage: useAllNodes: true useAllDevices: false storeConfig: storeType: bluestore databaseSizeMB: 1024 journalSizeMB: 1024
注 :
dataDirHostPath
属性には特別な注意を払う必要があります。この属性の正しい値は、再起動後にクラスターを保存するために必要です。 KubernetesホストにRookデータを保存する永続的な場所として使用する場合、著者はこのディレクトリに少なくとも5 GBの空きディスク容量を確保することをお勧めします。
構成からクラスター自体を作成し、ポッドがクラスター(
rook
名前空間内)に作成されていることを確認します。
kubectl create -f rook-cluster.yaml kubectl -n rook get pod NAME READY STATUS RESTARTS AGE rook-api-1511082791-7qs0m 1/1 Running 0 5m rook-ceph-mgr0-1279756402-wc4vt 1/1 Running 0 5m rook-ceph-mon0-jflt5 1/1 Running 0 6m rook-ceph-mon1-wkc8p 1/1 Running 0 6m rook-ceph-mon2-p31dj 1/1 Running 0 6m rook-ceph-osd-0h6nb 1/1 Running 0 5m
Rookクラスターの(新しいバージョンへの) アップグレードは、この段階で特定の順序ですべてのコンポーネントの代替更新を必要とする手順であり、Rookインストールが完全に「正常」な状態にあることを確認した後にのみ開始できます。 Rookバージョン0.5.0を0.5.1に更新する例に関する詳細な手順は、 プロジェクトのドキュメントに記載されています 。
昨年11月、RookはブログでEBSとのパフォーマンス比較を投稿しました 。 その結果は注目に値するものであり、非常に簡単な場合は次のとおりです。
見込み
Rookの現在のステータスはアルファであり、これまでの最新のメジャーリリースは2017年11月にリリースされたバージョン0.6です (現在の修正v0.6.2は12月14日にリリースされました)。 すでに2018年前半には、より成熟したバージョンのリリースが予定されています:ベータ版と安定版(正式に運用環境で使用可能)。
プロジェクトのロードマップによると、開発者は少なくとも次の2つのリリースでのRookの開発に関する詳細なビジョンを持っています:0.7(GitHubトラッカーでの準備は60% と推定されます)と0.8。 予想される変更には、Ceph BlockおよびCeph Objectサポートのベータステータスへの移行、CephFSのボリュームの動的プロビジョニング、高度なログシステム、自動クラスター更新、ボリュームのスナップショットのサポートがあります。
RookをCNCFプロジェクトとして承認したことは(非常に初期の段階- リンカリングおよびCoreDNSとともに「インセプションレベル」)、製品に対する関心の高まりを保証するものです。 クラウドアプリケーションの世界で足場を獲得する方法は、安定したバージョンのリリース後に明らかになります。これはもちろん、Rookの新しい「テスター」とユーザーをもたらします。
PS
ブログもご覧ください。