Rookをすぐに使い始め、クラウドネイティブのストレージオーケストレーションを始めましょう

Rookをすぐに使い始め、クラウドネイティブのストレージオーケストレーションを始めましょう

[[415352]]

この記事はWeChatの公開アカウント「Hacker Afternoon Tea」から転載したもので、著者はShaoです。この記事を転載する場合は、Hacker Afternoon Tea公式アカウントまでご連絡ください。

Rook は、クラウド ネイティブ環境とネイティブに統合するためのさまざまなストレージ ソリューションのプラットフォーム、フレームワーク、サポートを提供するオープン ソースのクラウド ネイティブ ストレージ オーケストレーターです。

Rook は、ストレージ ソフトウェアを自己管理、自己スケーリング、自己修復機能を備えたストレージ サービスに変換します。これは、展開、ブートストラップ、構成、プロビジョニング、スケーリング、アップグレード、移行、災害復旧、監視、およびリソース管理を自動化することによって実現されます。 Rook は、基盤となるクラウドネイティブのコンテナ管理、スケジューリング、オーケストレーション プラットフォームによって提供される機能を使用して、その機能を実行します。

Rook は拡張ポイントを活用してクラウド ネイティブ環境に深く統合し、スケジュール、ライフサイクル管理、リソース管理、セキュリティ、監視、ユーザー エクスペリエンスのシームレスなエクスペリエンスを提供します。

Cassandra クイックスタート

Cassandra は、超高速のパフォーマンスと調整可能な一貫性を備えた、可用性が高く、フォールト トレラントなピアツーピアの NoSQL データベースです。単一障害点のない大規模なスケーラビリティを提供します。

Scylla は、C++ で Cassandra をハードウェアに近い形で書き直したものです。シェアードナッシング アーキテクチャを採用しており、真の線形スケーラビリティと主要なハードウェア最適化を実現し、超低レイテンシと非常に高いスループットを実現します。これは Cassandra の代替品であり、同じインターフェースを使用するため、Rook でもサポートされています。

前提条件

Rook Cassandra オペレーターを実行するには、Kubernetes クラスターが必要です。 Rook 用の Kubernetes クラスターが準備されていることを確認する (Cassandra では flexvolume プラグインは必要ありません)

Cassandraオペレーターをデプロイする

まず、次のコマンドを使用して Rook Cassandra Operator をデプロイします。

  1. $ git clone --single-branch --branch v1.6.8 https://github.com/rook/rook.git  
  2. cd rook/cluster/examples/kubernetes/cassandra
  3. kubectl を適用 -f 演算子.yaml

これにより、名前空間 rook-cassandra-system にオペレーターがインストールされます。オペレーターが起動して実行中であることを確認できます。

  1. kubectl -n rook-cassandra-system ポッドを取得します

Cassandra/Scylla クラスターの作成と初期化

オペレーターが実行されているので、clusters.cassandra.rook.io リソースのインスタンスを作成して、Cassandra/Scylla クラスターのインスタンスを作成できます。このリソースの一部の値は構成可能なので、cluster.yaml を参照して、好みに合わせて設定を調整してください。

Cassandra クラスターを作成する準備ができたら、次のコマンドを実行します。

  1. kubectl作成-f クラスター.yaml

次のコマンドを使用して、新しい Cassandra クラスターを表す Kubernetes オブジェクトが作成されたかどうかを確認できます。これは、Rook が Kubernetes を正常に拡張して、Cassandra クラスターを Kubernetes クラウド ネイティブ環境の第一級オブジェクトにしたことを示しているため重要です。

  1. kubectl -n rook-cassandra で clusters.cassandra.rook.io を取得します。

必要なメンバーがすべて実行されているかどうかを確認するには、次のコマンドで、cluster.yaml に指定されたメンバー数と同じ数のエントリが表示されるはずです。

  1. kubectl -n rook-cassandra ポッドを取得します -l app=rook-cassandra

Cassandra クラスターのステータスをそのステータスから追跡することもできます。クラスターの現在のステータスを確認するには、次のコマンドを実行します。

  1. kubectl -n rook-cassandra で clusters.cassandra.rook.io rook-cassandra を記述します。

データベースへのアクセス

  • kubectl から:

新しいクラスターで cqlsh シェルを取得するには:

  1. kubectl exec -n rook-cassandra -it rook-cassandra-east-1-east-1a-0 --cqlsh  
  2. > キースペースの説明;
  • ポッド内部から:

新しいクラスターを作成すると、Rook はクライアントがクラスターにアクセスするためのサービスを自動的に作成します。サービス名は慣例に従っています-クライアント。次のコマンドを実行すると、クラスター内でこのサービスを表示できます。

  1. kubectl -n rook-cassandra でサービス rook-cassandra-client を記述します。

Kubernetes クラスターで実行されているポッドは、このサービスを使用して Cassandra に接続できます。以下は Python ドライバーを使用した例です。

  1. cassandra.clusterからClusterをインポートする
  2.  
  3. クラスター = Cluster([ 'rook-cassandra-client.rook-cassandra.svc.cluster.local' ])
  4. セッション = cluster.connect ()

スケールアップ

オペレーターはラックの拡張と新しいラックの追加をサポートします。変更するには、以下を使用できます。

  1. kubectl で clusters.cassandra.rook.io rook-cassandra を編集します。
  • ラックを拡張するには、ラックの Spec.Members フィールドを目的の値に変更します。
  • 新しいラックを追加するには、ラック リストに新しいラックを追加します。新しいラックには必ず別のラック名を選択してください。
  • yaml を編集して保存した後、クラスターのステータスとイベントをチェックして、何が起こっているかに関する情報を取得します。
  1. kubectl -n rook-cassandra で clusters.cassandra.rook.io rook-cassandra を記述します。

スケールダウン

オペレーターはラックのスケールダウンをサポートします。変更するには、以下を使用できます。

  1. kubectl で clusters.cassandra.rook.io rook-cassandra を編集します。
  • ラックを縮小するには、ラックの Spec.Members フィールドを目的の値に変更します。
  • yaml を編集して保存した後、クラスターのステータスとイベントをチェックして、何が起こっているかに関する情報を取得します。
  1. kubectl -n rook-cassandra で clusters.cassandra.rook.io rook-cassandra を記述します。

掃除

このチュートリアルに関連するすべてのリソースをクリーンアップするには、次のコマンドを実行します。

注意: これにより、データベースが破壊され、関連するすべてのデータが削除されます。

  1. kubectl削除-f クラスター.yaml
  2.  
  3. kubectl削除-f 演算子.yaml

トラブルシューティング

クラスターが起動しない場合は、まずオペレーターのログを確認します。

  1. kubectl -n rook-cassandra-system ログ -l app=rook-cassandra-operator

オペレーター ログですべてが正常に見える場合は、Cassandra インスタンスの 1 つのログを確認することもできます。

  1. kubectl -n rook-cassandra ログ rook-cassandra-0

Cassandra モニタリング

Cassandra ラックに対して jmx_exporter を有効にするには、CassandraCluster CRD でラックに対して jmxExporterConfigMapName オプションを指定する必要があります。

例えば:

  1. APIバージョン: cassandra.rook.io/v1alpha1
  2. 種類: クラスター
  3. メタデータ:
  4. 名前: my-cassandra
  5. 名前空間: rook-cassandra
  6. 仕様:
  7. ...
  8. データセンター:
  9. 名前: my-datacenter
  10. ラック:
  11. -名前: my-rack
  12. メンバー: 3
  13. jmxExporterConfigMapName: jmx-exporter-settings
  14. ストレージ:
  15. ボリュームクレームテンプレート:
  16. - メタデータ:
  17. 名前: rook-cassandra-data
  18. 仕様:
  19. ストレージクラス名: 私のストレージクラス
  20. リソース:
  21. リクエスト:
  22. ストレージ: 200Gi

すべてのメトリックを取得するための簡単な構成マップの例:

  1. APIバージョン: v1
  2. 種類: ConfigMap
  3. メタデータ:
  4. 名前: jmx-exporter-settings
  5. 名前空間: rook-cassandra
  6. データ:
  7. jmx_exporter_config.yaml: |
  8. 小文字出力ラベル名: true  
  9. 小文字出力名: true  
  10. ホワイトリストオブジェクト名: [ "org.apache.cassandra.metrics:*" ]

ConfigMap のデータ フィールドには、jmx エクスポーター設定を含む jmx_exporter_config.yaml キーが含まれている必要があります。

構成マップが更新されても、Pod の自動リロード メカニズムは存在しません。 configmap を変更した後は、すべてのラック ポッドを手動で再起動する必要があります。

  1. NAMESPACE=<名前空間>
  2. CLUSTER=<クラスター名>
  3. ラック = $(kubectl get sts -n ${NAMESPACE} -l "cassandra.rook.io/cluster=${CLUSTER}" )
  4. ${RAKS} をエコーし​​ます | xargs -n1 kubectl ロールアウト 再起動 -n ${NAMESPACE}

Ceph ストレージ クイックスタート

このガイドでは、Ceph クラスターの基本的なセットアップについて説明し、クラスター内で実行されている他のポッドからブロック、オブジェクト、およびファイル ストレージを使用できるようにします。

最小バージョン

Rook は Kubernetes v1.11 以降をサポートしています。

重要: K8s 1.15 以前を使用している場合は、Rook CRD の別のバージョンを作成する必要があります。サンプル マニフェストの pre-k8s-1.16 サブフォルダーにある crds.yaml を作成します。

前提条件

Rook で使用できる Kubernetes クラスターがあることを確認します。

Ceph ストレージ クラスターを構成するには、次のローカル ストレージ オプションの少なくとも 1 つが必要です。

  • RAWデバイス(パーティションやフォーマットされたファイルシステムがない)
    • これには、ホストに lvm2 がインストールされている必要があります。この依存関係を回避するには、ディスク上に完全なディスクパーティションを作成します(以下を参照)。
  • 未フォーマットのパーティション(フォーマットされたファイルシステムなし)
  • ブロックモードストレージクラスで利用可能な永続ボリューム

次のコマンドを使用して、パーティションまたはデバイスがファイル システムでフォーマットされているかどうかを確認できます。

  1. lsblk -f
  1. 名前FSTYPE ラベル UUID マウントポイント
  2. ビデオ
  3. └─vda1 LVM2_メンバー >eSO50t-GkUV-YKTH-WsGq-hNJY-eKNf-3i07IB
  4. ├─ubuntu --vg-root ext4 c2366f76-6e21-4f10-a8f3-6776212e2fe4 /  
  5. └─ubuntu --vg-swap_1 スワップ 9492a3dc-ad75-47cd-9596-678e8cf17ff9 [スワップ]  
  6. 仮想データベース

FSTYPE フィールドが空でない場合、対応するデバイスの上にファイル システムが存在します。この場合、Ceph で vdb を使用できますが、vda とそのパーティションは使用できません。

要約

運が良ければ、次の kubectl コマンドとサンプル yaml ファイルを使用して、シンプルな Rook クラスターを作成できます。

  1. $ git clone --single-branch --branch v1.6.8 https://github.com/rook/rook.git  
  2. cd rook/cluster/examples/kubernetes/ceph
  3. kubectl create -f crds.yaml -f common.yaml -f operator.yaml
  4. kubectl作成-f クラスター.yaml

クラスター環境

Rook のドキュメントは、実稼働環境で Rook を起動することに重点を置いています。テスト環境の一部の設定を緩和するための例もいくつか提供されています。このガイドの後半でクラスターを作成するときは、次のクラスター マニフェストの例を検討してください。

  • cluster.yaml: ベアメタル上で実行されている本番クラスターのクラスター設定。少なくとも 3 つのワーカー ノードが必要です。
  • cluster-on-pvc.yaml: 動的クラウド環境で実行される本番クラスターのクラスター設定。
  • cluster-test.yaml: minikube などのテスト環境のクラスター設定。

Rookオペレーターを展開する

最初のステップは、Rook オペレーターを展開することです。使用している Rook のバージョンに対応するサンプル yaml ファイルを使用していることを確認します。

  1. クラスター/examples/kubernetes/ceph を CD します。
  2. kubectl create -f crds.yaml -f common.yaml -f operator.yaml
  3.  
  4. # rook-ceph-operator 続行する前に「実行中」状態にする
  5. kubectl -n rook-ceph ポッドを取得する

Operator を本番環境で起動する前に、いくつかの設定を検討することをお勧めします。

  1. kubernetes v1.15 以前を使用している場合は、/cluster/examples/kubernetes/ceph/pre-k8s-1.16/crd.yaml に CRD を作成する必要があります。 CustomResourceDefinition の apiextension v1beta1 バージョンは、Kubernetes v1.16 では非推奨になりました。
  2. デフォルトで無効になっている特定の Rook 機能を有効にするかどうかを検討します。これらおよびその他の高度な設定については、operator.yaml を参照してください。
  • デバイスの検出: ROOK_ENABLE_DISCOVERY_DAEMON 設定が有効になっている場合、Rook は、ベアメタル クラスターで一般的に使用される、構成される新しいデバイスを監視します。
  • Flex ドライバー: Flex ドライバーは CSI ドライバーに置き換えられて非推奨になりましたが、ROOK_ENABLE_FLEX_DRIVER 設定によって引き続き有効にすることができます。
  • ノードのアフィニティと許容範囲: デフォルトでは、CSI ドライバーはクラスター内の任意のノードで実行されます。 CSI ドライバーのアフィニティを構成するには、さまざまな設定を使用できます。

Rook Ceph クラスターを作成する

Rook オペレーターが実行されているので、Ceph クラスターを作成できます。クラスターが再起動後も存続できるようにするには、dataDirHostPath プロパティがホストに対して有効になるように設定してください。

クラスターを作成します。

  1. kubectl作成-f クラスター.yaml

kubectl を使用して、rook-ceph 名前空間内のポッドを一覧表示します。すべて実行されると、次のポッドが表示されるはずです。 osd ポッドの数は、クラスター内のノードの数と構成されているデバイスの数によって異なります。上記の cluster.yaml を変更しない場合は、ノードごとに 1 つの OSD が作成されると考えられます。 CSI、rook-ceph-agent (flex ドライバー)、rook-discover ポッドも、設定に応じてオプションになります。

  1. kubectl -n rook-ceph ポッドを取得する
  1. 名前準備完了 ステータス 再起動 年齢
  2. csi-cephfsplugin-provisioner-d77bb49c6-n5tgs 5/5 実行中 0 140 秒
  3. csi-cephfsplugin-provisioner-d77bb49c6-v9rvn 5/5 実行中 0 140 秒
  4. csi-cephfsplugin-rthrp 3/3 実行中 0 140秒
  5. csi-rbdplugin-hbsm7 3/3 実行中 0 140秒
  6. csi-rbdplugin-provisioner-5b5cd64fd-nvk6c 6/6 実行中 0 140 秒
  7. csi-rbdplugin-provisioner-5b5cd64fd-q7bxl 6/6 実行中 0 140 秒
  8. rook-ceph-crashcollector-minikube-5b57b7c5d4-hfldl 1/1 実行中 0 105 秒
  9. rook-ceph-mgr-a-64cd7cdf54-j8b5p 1/1 実行中 0 77秒
  10. rook-ceph-mon-a-694bb7987d-fp9w7 1/1 実行中 0 105秒
  11. rook-ceph-mon-b-856fdd5cb9-5h2qk 1/1 実行中 0 94秒
  12. rook-ceph-mon-c-57545897fc-j576h 1/1 実行中 0 85秒
  13. rook-ceph-operator-85f5b946bd-s8grz 1/1 実行中 0 92分
  14. rook-ceph-osd-0-6bb747b6c5-lnvb6 1/1 実行中 0 23秒
  15. rook-ceph-osd-1-7f67f9646d-44p7v 1/1 実行中 0 24秒
  16. rook-ceph-osd-2-6cd4b776ff-v4d68 1/1 実行中 0 25秒
  17. rook-ceph-osd- prepare -node1-vx2rz 0/2 完了 0 60秒
  18. rook-ceph-osd- prepare -node2-ab3fd 0/2 完了 0 60秒
  19. rook-ceph-osd- prepare -node3-w4xyz 0/2 完了 0 60秒

クラスターが正常であることを確認するには、Rook ツールボックスに接続し、ceph status コマンドを実行します。

  • すべてのモンスが定足数に出席する必要がある
  • mgr はアクティブである必要があります
  • 少なくとも1つのOSDがアクティブです
  • ヘルスがHEALTH_OKでない場合は、警告またはエラーを調査する必要があります。
  1. セファロステータス
  1. クラスタ:
  2. 識別子: a0452c76-30d9-4c1a-a948-5d8405f19a7c
  3. 健康状態: HEALTH_OK
  4.  
  5. サービス:
  6. mon: 3 つのデーモン、定足数 a、b、c (年齢 3 メートル)
  7. mgr: a (アクティブ、2分前から)
  8. osds: 3 osds: 3 アップ (1 分以降)、3イン(1 分以降)
  9. ..

ストレージ

Rook によって公開される 3 つのストレージ タイプの詳細については、次のガイドを参照してください。

  • ブロック: ポッドが使用するブロックストレージを作成します
  • オブジェクト: Kubernetes クラスターの内外からアクセスできるオブジェクト ストレージを作成します。
  • 共有ファイルシステム: 複数のポッド間で共有するファイルシステムを作成する

Cephダッシュボード

Ceph には、クラスターのステータスを表示できるダッシュボードがあります。

道具

Rook クラスターのデバッグとトラブルシューティング用の Ceph クライアントのフルセットを含むツールボックス コンテナーを作成しました。

モニター

各 Rook クラスターには、Prometheus で監視するためのメトリック コレクター/エクスポーターがいくつか組み込まれています。

破壊する

クラスターのテストが完了したら、次の手順に従ってクラスターをクリーンアップしてください。

ネットワーク ファイル システム (NFS)

NFS を使用すると、リモート ホストはネットワーク経由でファイル システムをマウントし、ローカルにマウントされているかのようにそれらのファイル システムと対話できます。これにより、システム管理者はネットワーク上の中央サーバーにリソースを統合できるようになります。

  1. 前提条件
  2. Rook NFS オペレーターを実行するには、Kubernetes クラスターが必要です。

ボリュームを公開するには、PVC 経由で NFS サーバー ポッドに接続する必要があります。

ホストパス、AWS Elastic Block Store、GCP Persistent Disk、CephFS、Ceph RBD など、あらゆるタイプの PVC に接続およびエクスポートできます。これらのボリュームの制限は、NFS 経由で共有される場合にも適用されます。これらのボリュームの詳細と制限については、Kubernetes のドキュメントで詳しく知ることができます。 3. NFS をマウントするポッドを実行する可能性のあるすべての Kubernetes ノードに NFS クライアント パッケージをインストールする必要があります。 CentOS ノードに nfs-utils をインストールするか、Ubuntu ノードに nfs-common をインストールします。

NFSオペレーターの導入

まず、次のコマンドを使用して Rook NFS オペレーターをデプロイします。

  1. $ git clone --single-branch --branch v1.6.8 https://github.com/rook/rook.git  
  2. cd rook/cluster/examples/kubernetes/nfs
  3. kubectl作成-f common.yaml
  4. kubectl作成-f 演算子.yaml

オペレーターが起動して実行中であることを確認できます。

  1. kubectl -n rook-nfs-system ポッドを取得する

名前 準備完了 ステータス 再起動 年齢

  1. 名前準備完了 ステータス 再起動 年齢
  2. rook-nfs-operator-879f5bf8b-gnwht 1/1 実行中 0 29m

NFS Admission Webhook をデプロイする (オプション)

アドミッション Webhook は、API サーバーへのアドミッション要求を受信する HTTP コールバックです。アドミッション Webhook には、検証アドミッション Webhook と変更アドミッション Webhook の 2 種類があります。 NFS Operator は、API サーバーに送信された NFSServer オブジェクトを etcd (永続性) に保存する前に検証する検証アドミッション Webhook をサポートしています。

NFS でアドミッション Webhook を有効にするには (たとえば、アドミッション Webhook を検証する)、次の手順を実行する必要があります。

まず、cert-manager がインストールされていることを確認します。まだインストールされていない場合は、cert-manager インストール ドキュメントの手順に従ってインストールできます。あるいは、次の単一のコマンドを実行することもできます。

  1. kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.1/cert-manager.yaml  

これにより、cert-manager の最新バージョン (v0.15.1) が簡単にインストールされます。完了したら、cert-manager コンポーネントが正しくデプロイされ、実行状態になっていることを確認します。

  1. kubectl get -n cert-manager ポッド
  1. 名前準備完了 ステータス 再起動 年齢
  2. cert-manager-7747db9d88-jmw2f 1/1 実行中 0 2分1秒
  3. cert-manager-cainjector-87c85c6ff-dhtl8 1/1 実行中 0 2分1秒
  4. cert-manager-webhook-64dc9fff44-5g565 1/1 実行中 0 2分1秒

cert-manager が実行されると、NFS Webhook をデプロイできるようになります。

  1. kubectl作成-f webhook.yaml

Webhook が稼働していることを確認します。

  1. kubectl -n rook-nfs-system ポッドを取得する
  1. 名前準備完了 ステータス 再起動 年齢
  2. rook-nfs-operator-78d86bf969-k7lqp 1/1 実行中 0 102秒
  3. rook-nfs-webhook-74749cbd46-6jw2w 1/1 実行中 0 102秒

OpenShift セキュリティ コンテキスト制約を作成する (オプション)

OpenShift クラスターでは、追加のセキュリティ コンテキスト制約をいくつか作成する必要があります。 OpenShift で実行していない場合は、このセクションをスキップして次のセクションに進むことができます。

nfs-server ポッドのセキュリティ コンテキスト制約を作成するには、次の yaml を使用できます。これは、/cluster/examples/kubernetes/nfs の下の scc.yaml にもあります。

注意: OpenShift の古いバージョンでは apiVersion: v1 が必要になる場合があります

  1. 種類: SecurityContextConstraints
  2. APIバージョン: security.openshift.io/v1
  3. メタデータ:
  4. 名前: rook-nfs
  5. ホストディレクトリボリュームプラグインを許可: true  
  6. ホストIPCを許可:無効 
  7. allowHostNetwork: 
  8. 許可ホストPID: false  
  9. allowHostPorts: 
  10. 特権コンテナを許可: false  
  11. 許可される機能:
  12. -SYS_ADMIN
  13. - DAC_READ_SEARCH
  14. デフォルトの追加機能: null  
  15. グループ:
  16. タイプ: MustRunAs
  17. 優先度: null  
  18. readOnlyRootFilesystem: false  
  19. 必要なドロップ機能:
  20. -殺す
  21. -MKNOD
  22. -SYS_CHROOT
  23. 実行ユーザー:
  24. タイプ: RunAsAny
  25. seLinuxコンテキスト:
  26. タイプ: MustRunAs
  27. 補足グループ:
  28. タイプ: RunAsAny
  29. ボリューム:
  30. -configマップ
  31. - 下向きAPI
  32. -空のディレクトリ
  33. -永続ボリュームクレーム
  34. - 秘密
  35. ユーザー:
  36. - システム:サービスアカウント:rook-nfs:rook-nfs-server

次のコマンドで scc を作成できます。

  1. oc作成-f scc.yaml

ポッド セキュリティ ポリシーを作成する (推奨)

ポッドセキュリティポリシーも作成することをお勧めします

  1. APIバージョン: ポリシー/v1beta1
  2. 種類: PodSecurityPolicy
  3. メタデータ:
  4. 名前: rook-nfs-policy
  5. 仕様:
  6. 特権: true  
  7. グループ:
  8. ルール: RunAsAny
  9. 許可される機能:
  10. - DAC_READ_SEARCH
  11. -SYS_リソース
  12. 実行ユーザー:
  13. ルール: RunAsAny
  14. カーネル:
  15. ルール: RunAsAny
  16. 補足グループ:
  17. ルール: RunAsAny
  18. ボリューム:
  19. -configマップ
  20. - 下向きAPI
  21. -空のディレクトリ
  22. -永続ボリュームクレーム
  23. - 秘密
  24. -ホストパス

このファイルを psp.yaml という名前で保存し、次のコマンドで作成します。

  1. kubectl作成-f psp.yaml

NFS サーバーの作成と初期化

オペレーターが実行されているので、nfsservers.nfs.rook.io リソースのインスタンスを作成して、NFS サーバーのインスタンスを作成できます。 NFS サーバー リソースのさまざまなフィールドとオプションを使用して、サーバーとそのボリュームをエクスポート用に構成できます。

NFSサーバーを作成する前に、ServiceAccountとRBACルールを作成する必要があります。

  1. ---  
  2. APIバージョン: v1
  3. 種類: 名前空間
  4. メタデータ:
  5. 名前: rook-nfs
  6. ---  
  7. APIバージョン: v1
  8. 種類: サービスアカウント
  9. メタデータ:
  10. 名前: rook-nfs-server
  11. 名前空間: rook-nfs
  12. ---  
  13. 種類: ClusterRole
  14. apiバージョン: rbac。認証.k8s.io/v1
  15. メタデータ:
  16. 名前: rook-nfs-provisioner-runner
  17. ルール:
  18. -apiグループ: [ "" ]
  19. リソース: [ "persistentvolumes" ]
  20. 動詞: [ 「取得」 「一覧表示」 「監視」 「作成」 「削除」 ]
  21. -apiグループ: [ "" ]
  22. リソース: [ "persistentvolumeclaims" ]
  23. 動詞: [ "get" "list" "watch" "update" ]
  24. - apiグループ: [ "storage.k8s.io" ]
  25. リソース: [ "ストレージクラス" ]
  26. 動詞: [ 「取得する」 「一覧表示する」 「見る」 ]
  27. -apiグループ: [ "" ]
  28. リソース: [ "イベント" ]
  29. 動詞: [ 「作成」 「更新」 「パッチ」 ]
  30. -apiグループ: [ "" ]
  31. リソース: [ "サービス" "エンドポイント" ]
  32. 動詞: [ "得る" ]
  33. -apiGroups: [ "ポリシー" ]
  34. リソース: [ "podsecuritypolicies" ]
  35. リソース名: [ "rook-nfs-policy" ]
  36. 動詞: [ "使用する" ]
  37. -apiグループ: [ "" ]
  38. リソース: [ "エンドポイント" ]
  39. 動詞: [ "get" "list" "watch" "create" "update" "patch" ]
  40. -apiグループ:
  41. 翻訳元
  42. リソース:
  43. - 「*」  
  44. 動詞:
  45. - 「*」  
  46. ---  
  47. 種類: ClusterRoleBinding
  48. apiバージョン: rbac。認証.k8s.io/v1
  49. メタデータ:
  50. 名前: rook-nfs-provisioner-runner
  51. 科目:
  52. - 種類: サービスアカウント
  53. 名前: rook-nfs-server
  54. 交換する プロビジョナーデプロイされている名前空間
  55. 名前空間: rook-nfs
  56. ロールリファレンス:
  57. 種類: ClusterRole
  58. 名前: rook-nfs-provisioner-runner
  59. apiGroup : rbac.authorization.k8s.io

このファイルを rbac.yaml という名前で保存し、次のコマンドを使用して作成します。

  1. kubectl作成-f rbac.yaml

このガイドには、NFS サーバーを使用してボリュームをエクスポートする主な例が 3 つあります。

  • デフォルトのストレージクラスの例
  • XFS ストレージクラスの例
  • Rook Ceph ボリュームの例

デフォルトのストレージクラスの例

最初の例では、実行している環境のデフォルトの StorageClass によってサポートされるストレージをエクスポートする NFS サーバー インスタンスを作成する手順を説明します。環境によっては、これがホスト パスになる場合もあれば、クラウド プロバイダーの仮想ディスクになる場合もあります。いずれにしても、この例ではデフォルトの StorageClass が存在している必要があります。

まず、次の NFS CRD インスタンス定義を nfs.yaml という名前のファイルに保存します。

  1. ---  
  2. #デフォルトのストレージクラスが存在する必要があります
  3. APIバージョン: v1
  4. 種類: PersistentVolumeClaim
  5. メタデータ:
  6. 名前: nfs-デフォルト-クレーム
  7. 名前空間: rook-nfs
  8. 仕様:
  9. アクセスモード:
  10. -読み書き多数
  11. リソース:
  12. リクエスト:
  13. ストレージ: 1Gi
  14. ---  
  15. APIバージョン: nfs.rook.io/v1alpha1
  16. 種類: NFSサーバー
  17. メタデータ:
  18. 名前: rook-nfs
  19. 名前空間: rook-nfs
  20. 仕様:
  21. レプリカ: 1
  22. 輸出:
  23. -名前: シェア1
  24. サーバ:
  25. アクセスモード: 読み取り書き込み
  26. スカッシュ: 「なし」  
  27. # NFS CRD インスタンスを作成する前に、永続ボリューム要求を作成する必要があります。
  28. 永続ボリュームクレーム:
  29. クレーム名: nfs-デフォルト-クレーム
  30. #注釈キー/値リスト
  31. 注釈:
  32. ルーク: nfs

nfs.yaml ファイルを保存したら、次のように NFS サーバーを作成します。

  1. kubectl作成-f nfs.yaml

XFS ストレージクラスの例

Rook NFS は xfs_quota を介してディスク クォータをサポートします。したがって、ボリュームのディスク クォータを指定する必要がある場合は、次の例に従ってください。

この例では、prjquota オプションを使用して xfs としてマウントされた基礎ボリュームを使用します。基礎となるボリュームを作成する前に、xfs ファイルシステムと prjquota mountOptions を使用して StorageClass を作成する必要があります。 Kubernetes の多くの分散ストレージ プロバイダーは xfs ファイル システムをサポートしています。通常、storageClass パラメータの fsType: xfs または fs: xfs によって定義されます。ただし、ストレージ クラスのファイル システム タイプを実際に指定する方法は、そのストレージ プロバイダーによって異なります。詳細については、https://kubernetes.io/docs/concepts/storage/storage-classes/ を参照してください。

GCE PDとAWS EBSのStorageClassの例を以下に示します。

  • GCE PD
  1. APIバージョン: storage.k8s.io/v1
  2. 種類: ストレージクラス
  3. メタデータ:
  4. 名前: 標準-xfs
  5. パラメータ:
  6. タイプ: pd-標準
  7. ファイルタイプ: xfs
  8. マウントオプション:
  9. -prjquota
  10. プロビジョナー: kubernetes.io/gce-pd
  11. 回収ポリシー:削除 
  12. ボリュームバインディングモード: 即時
  13. ボリューム拡張を許可する: true  
  • AWS の EBS
  1. APIバージョン: storage.k8s.io/v1
  2. 種類: ストレージクラス
  3. メタデータ:
  4. 名前: 標準-xfs
  5. プロビジョナー: kubernetes.io/aws-ebs
  6. パラメータ:
  7. タイプ: io1
  8. iops/GB: "10"  
  9. ファイルタイプ: xfs
  10. マウントオプション:
  11. -prjquota
  12. 回収ポリシー:削除 
  13. ボリュームバインディングモード: 即時

xfs ファイルシステムと prjquota mountOptions を持つ StorageClass を作成したら、次の例を使用して NFS サーバー インスタンスを作成できます。

  1. ---  
  2. # ストレージクラス 名前standard-xfs が存在する必要があります。
  3. # ストレージ クラスには、xfs ファイルシステム タイプprjquota マウント オプションが必要です。
  4. APIバージョン: v1
  5. 種類: PersistentVolumeClaim
  6. メタデータ:
  7. 名前: nfs-xfs-claim
  8. 名前空間: rook-nfs
  9. 仕様:
  10. ストレージクラス名: "standard-xfs"  
  11. アクセスモード:
  12. -一度だけ読み書き可能
  13. リソース:
  14. リクエスト:
  15. ストレージ: 1Gi
  16. ---  
  17. APIバージョン: nfs.rook.io/v1alpha1
  18. 種類: NFSサーバー
  19. メタデータ:
  20. 名前: rook-nfs
  21. 名前空間: rook-nfs
  22. 仕様:
  23. レプリカ: 1
  24. 輸出:
  25. -名前: シェア1
  26. サーバ:
  27. アクセスモード: 読み取り書き込み
  28. スカッシュ: 「なし」  
  29. # NFS CRD インスタンスを作成する前に、永続ボリューム要求を作成する必要があります。
  30. 永続ボリュームクレーム:
  31. クレーム名: nfs-xfs-claim
  32. #注釈キー/値リスト
  33. 注釈:
  34. ルーク: nfs

この PVC および NFS サーバー インスタンスを nfs-xfs.yaml として保存し、次のコマンドを使用して作成します。

  1. kubectl作成-f nfs-xfs.yaml

Rook Ceph ボリュームの例

この代替例では、NFS サーバーのエクスポートとして別の基礎ボリュームを使用します。これらの手順では、クライアントがネットワーク経由でアクセスできるように Ceph RBD ブロック ボリュームをエクスポートする方法について説明します。

Rook Ceph クラスターが起動したら、NFS サーバーの作成に進むことができます。

この PVC および NFS サーバー インスタンスを nfs-ceph.yaml として保存します。

  1. ---  
  2. # rook ceph クラスターが実行中である必要があります
  3. # rook/cluster/examples/kubernetes/ceph例を使用して rook ceph クラスターを作成します
  4. #簡単なrookクラスターのセットアップについては、 https://rook.io/docs/rook/master/ceph-quickstart.html参照してください。
  5. APIバージョン: v1
  6. 種類: PersistentVolumeClaim
  7. メタデータ:
  8. 名前: nfs-ceph-claim
  9. 名前空間: rook-nfs
  10. 仕様:
  11. ストレージクラス名: rook-ceph-block
  12. アクセスモード:
  13. -読み書き多数
  14. リソース:
  15. リクエスト:
  16. ストレージ: 2Gi
  17. ---  
  18. APIバージョン: nfs.rook.io/v1alpha1
  19. 種類: NFSサーバー
  20. メタデータ:
  21. 名前: rook-nfs
  22. 名前空間: rook-nfs
  23. 仕様:
  24. レプリカ: 1
  25. 輸出:
  26. -名前: シェア1
  27. サーバ:
  28. アクセスモード: 読み取り書き込み
  29. スカッシュ: 「なし」  
  30. # NFS CRD インスタンスを作成する前に、永続ボリューム要求を作成する必要があります。
  31. #この例を使用するためにCeph クラスターを作成します
  32. # ceph-pvc.yaml を使用して rook ceph クラスターを作成した後、 ceph PVCを作成します。
  33. 永続ボリュームクレーム:
  34. クレーム名: nfs-ceph-claim
  35. #注釈キー/値リスト
  36. 注釈:
  37. ルーク: nfs

nfs-ceph.yaml に保存した NFS サーバー インスタンスを作成します。

  1. kubectl作成-f nfs-ceph.yaml

NFSサーバーの検証

次のコマンドを使用して、新しい NFS サーバーとそのエクスポートを表す Kubernetes オブジェクトが作成されたかどうかを確認できます。

  1. kubectl -n rook-nfs で nfsservers.nfs.rook.io を取得します。
  1. 名前年齢 州
  2. rook-nfs 32s 実行中

NFS サーバー ポッドが起動して実行されていることを確認します。

  1. kubectl -n rook-nfs ポッドを取得します -l app=rook-nfs
  1. 名前準備完了 ステータス 再起動 年齢
  2. rook-nfs-0 1/1 ランニング 0 2m

NFS サーバー ポッドが実行状態の場合、公開された NFS 共有が正常に作成され、クライアントはネットワーク経由でアクセスを開始できます。

エクスポートを訪問

Rook バージョン v1.0 以降、Rook は NFS の動的プロビジョニングをサポートします。この例では、nfs で動的構成機能を使用する方法を示します。

NFS Operator および NFSServer インスタンスをデプロイした後。ボリュームを動的にプロビジョニングするには、次の例のようなストレージクラスを作成する必要があります。

  1. APIバージョン: storage.k8s.io/v1
  2. 種類: ストレージクラス
  3. メタデータ:
  4. ラベル:
  5. アプリ: rook-nfs
  6. 名前: rook-nfs-share1
  7. パラメータ:
  8. エクスポート名: share1
  9. nfsサーバー名: rook-nfs
  10. nfsServer名前空間: rook-nfs
  11. プロビジョナー: nfs.rook.io/rook-nfs-provisioner
  12. 回収ポリシー:削除 
  13. ボリュームバインディングモード: 即時

これを sc.yaml などのファイルとして保存し、次のコマンドを使用してストレージクラスを作成できます。

  1. kubectl作成-f sc.yaml

注: StorageClass は次の 3 つのパラメータを渡す必要があります。

  • exportName: ボリュームのプロビジョニングに使用するエクスポートをプロビジョナーに指示します。
  • nfsServerName: NFSServer インスタンスの名前です。
  • nfsServerNamespace: NFSServer インスタンスが実行される名前空間。

上記のストレージクラスを作成した後、次の例に示すように、ストレージクラスを参照する PV クレームを作成できます。

  1. APIバージョン: v1
  2. 種類: PersistentVolumeClaim
  3. メタデータ:
  4. 名前: rook-nfs-pv-claim
  5. 仕様:
  6. ストレージクラス名: "rook-nfs-share1"  
  7. アクセスモード:
  8. -読み書き多数
  9. リソース:
  10. リクエスト:
  11. ストレージ: 1Mi

また、たとえば pvc.yaml という名前のファイルとして保存し、次のコマンドを使用して PV クレームを作成することもできます。

  1. kubectl作成-f pvc.yaml

消費 輸出

これで、上記の PersistentVolumeClaim クレームを使用してエクスポートされたボリュームを使用するサンプル Web サーバー アプリを作成することで、作成した PV を使用できるようになります。この例を構成するポッドは 2 つあります。

NFS共有の内容を読み取り、表示するWebサーバーポッド

ウェブサイトが常に更新されるように、NFS共有にランダムデータを書き込むライターポッド

cluster/examples/kubernetes/nfs フォルダから busybox ポッド (ライター) と Web サーバーを起動します。

  1. kubectl create -f busybox-rc.yaml
  2. kubectl作成-f web-rc.yaml

期待される busybox ライター ポッドと Web サーバー ポッドの両方が起動して実行されていることを確認しましょう。

  1. kubectl get pod -l app=nfs-demo

Web サーバーをネットワーク経由でアクセスできるようにするには、そのためのサービスを作成しましょう。

  1. kubectl作成-f web-service.yaml

次に、先ほど起動した busybox ライター ポッドを使用して、nginx がデータを正しく提供していることを確認できます。次の 1 行コードでは、kubectl exec を使用して、busybox ライター ポッドで wget を使用して Web サーバー ポッドによってホストされている Web ページを取得するコマンドを実行します。 busybox ライター ポッドが新しいタイムスタンプを書き込み続けると、返される出力も約 10 秒ごとに更新されることがわかります。

  1. $ エコー; kubectl exec $(kubectl get pod -l app=nfs-demo,role=busybox -o jsonpath= '{.items[0].metadata.name}' ) -- wget -qO- http://$(kubectl get services nfs-web -o jsonpath='{.spec.clusterIP}');エコー 
  1. 2015年10月22日木曜日 19:28:55 UTC
  2. nfs-ビジーボックス-w3s4t

掃除して破壊する

このチュートリアルに関連するすべてのリソースをクリーンアップするには、次のコマンドを実行します。

  1. kubectl削除-f web-service.yaml
  2. kubectl削除-f web-rc.yaml
  3. kubectl削除-f busybox-rc.yaml
  4. kubectl削除-f pvc.yaml
  5. kubectl削除-f pv.yaml
  6. kubectl削除-f nfs.yaml
  7. kubectl削除-f nfs-xfs.yaml
  8. kubectl削除-f nfs-ceph.yaml
  9. kubectl削除-f rbac.yaml
  10. kubectl削除-f psp.yaml
  11. kubectl delete -f scc.yaml # デプロイされている場合
  12. kubectl削除-f 演算子.yaml
  13. kubectl delete -f webhook.yaml # デプロイされている場合
  14. kubectl削除-f common.yaml

トラブルシューティング

NFS サーバー ポッドが表示されない場合、最初の手順は NFS オペレーター ログを確認することです。

  1. kubectl -n rook-nfs-system ログ -l app=rook-nfs-operator

<<:  ノーコードプラットフォームがSaaSを介してスタートアップの成長を促進する方法

>>:  レポート: 2021 年第 2 四半期のクラウド市場の総支出は 400 億ドルを超える

推薦する

ウェブマスターは SEO にいくら支払うのでしょうか?

もっと多くを得たいと思ったとき、私たちは必ず、得るものよりはるかに多くを与えることになります。私を例...

CDN からエッジ コンピューティングまで、どちらが水に近いでしょうか?

CDN が誕生して以来、従来の CDN、クラウド CDN、共有 CDN の 3 世代が存在しましたが...

Hostga「Unspeakable」 - メモリアルデーに年 2 日間 50% オフ プロモーション

Hostga「Indescribable」は、今週の金曜日から来週の月曜日まで、アメリカの戦没者追悼...

ニュース: OVH のシンガポールとオーストラリアの VPS が再入荷

シンガポールとオーストラリアにあるOVHの2つのデータセンターのVPSが、長い間在庫切れだったが、再...

SEOがキーワードをどのように定義するかについての私の理解

私は1年以上SEO業務に携わっています。以前はウェブサイトを作っただけで、ウェブサイトのSEOキーワ...

重要な情報: OpenStack と DRaaS の一般的なアーキテクチャと設計

新しい時代の IT インフラストラクチャの発展に伴い、従来のインフラストラクチャに代わってクラウド ...

raksmart Japan CN2回線クラウドサーバーの簡単なレビュー

raksmart Japanはどうですか? raksmart Japanのクラウドサーバーはいかがで...

hiformance - 年間 8 ドル / 512 MB のメモリ / 60 GB のハード ドライブ / 2 T のトラフィック / オプションのコンピューター ルーム 4 室

Hiformance は、私が間違っていなければ、今年設立された企業です。同社は米国に登録されていま...

Dianping、百度による共同創業者の20億ドル買収を否定:すべて噂だ

10月24日のフェニックステクノロジーニュースによると、メディアは今朝、DianpingがすでにBa...

恵州 SEO ブログ ウェブサイト SEO 最適化計画

以下は、Huizhou SEO Blog のために Ye Jianhui が書いたウェブサイト SE...

オンラインマーケティングを行う際は、「ジャンクトラフィック」を避けてください

Changsha Internet Marketing は、インターネット マーケティング担当者とし...

外国貿易のマーケティングとプロモーションでよくある6つの間違いの分析

対外貿易マーケティングとは、「広告」、「マスプロモーション」、「バイラルマーケティング」、「テレマー...

インターネット マーケティングの 6 つのマーケティング武器

オンラインマーケティングの実施方法、オンラインマーケティングの実施方法、この記事では、一般的に使用さ...