Container Network File System (CNFS) クライアントを使用すると、複数の接続、キャッシュメタデータ、およびキャッシュデータを介してデータに分散してアクセスし、読み取り速度を向上させることができます。 CNFSクライアントは、パフォーマンス監視とサービス品質 (QoS) もサポートします。 このトピックでは、CNFSクライアントの分散キャッシュ機能を有効にする方法と、CNFSクライアントの分散キャッシュ機能を使用して読み取り速度を向上させる方法について説明します。
目次
前提条件
カーネルバージョン4.19.91-23 ~ 4.19.91-26のAlibaba Cloud Linux 2が使用されています。 分散キャッシュ機能は、Alibaba Cloud Linux 2をサポートしています。
Kubernetes 1.20以降を実行するContainer Service for Kubernetes (ACK) クラスターが作成されます。 Container Storage Interface (CSI) プラグインがボリュームプラグインとして使用されます。 詳細については、「ACK管理クラスターの作成」をご参照ください。
csi-pluginとcsi-provisionerのバージョンはv1.22.11-abbb810e-aliyun以降です。 csi-pluginとcsi-provisionerを更新する方法の詳細については、「CSIプラグインのインストールと更新」をご参照ください。
storage-operatorのバージョンはv1.22.86-041b094-aliyun以降です。 storage-operatorの更新方法の詳細については、「コンポーネントの管理」をご参照ください。
kubectlクライアントがクラスターに接続されています。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
分散キャッシュ機能の主なパフォーマンス指標
インジケータ | ベンチマークシナリオ ① | 分散キャッシュ無効 | 分散キャッシュの有効化 |
メタデータの読み取りと書き込みのパフォーマンス | 百万のディレクトリを横断する期間 | 18分 | <60秒 |
サイズが4 KBのファイルを作成する期間 | 3,000マイクロ秒 | <200マイクロ秒 | |
4 KBのサイズのファイルを2回目に読み取る期間 | 400マイクロ秒 | <100マイクロ秒 | |
読み取りおよび書き込みスループット | 単一ノードの読み書きスループット ② | 500メガバイト/秒に200 | > 800メガバイト/秒 |
包括的なシナリオでの全体的なパフォーマンス | それぞれサイズが150 KBの5,000画像を抽出する期間 | 52秒 | 15秒について |
Redisプロジェクトの作成期間 | 27秒 | 21秒について |
前の表に示した値は、理論値 (基準値) のみである。 実際の値は、お客様の運用環境によって異なります。
注 ①: ベンチマークテストの実行に使用されるElastic Compute Service (ECS) インスタンスのタイプはecs.hfg6.4xlargeです。 ベンチマークデータは、環境に基づいて変化し得る。
注 ②: ECSインスタンスの帯域幅とApsara File Storage NAS (NAS) ファイルシステムのタイプは、ノードの読み取りおよび書き込みスループットに影響します。
手順1: 分散キャッシュが有効になっているNASファイルシステムをマウントする
次のコマンドを実行して、csi-pluginのConfigMapを作成してクラスターにデプロイし、CNFSクライアントをインストールします。
cat <<EOF | kubectl apply -f- apiVersion: v1 kind: ConfigMap メタデータ: 名前: csi-plugin 名前空間: kube-system データ: cnfs-client-properties: | nas-efc=true nas-efc-cache: | enable=true コンテナ番号=3 volume-type=メモリ volume-size=15Gi ノードセレクタ: | cache=true EOF
パラメーター
説明
cnfs-client-properties
分散キャッシュを有効にするかどうかを指定します。
cnfs-cache-propertiesを指定した場合。 enable=true
、分散キャッシュ機能が有効になり、読み取り速度が向上します。nfs-efc-cache。
コンテナー番号
このパラメーターは、分散キャッシュを有効にする場合に必要です。
このパラメーターは、キャッシュ機能用にDaemonSetが作成するコンテナーの数を指定します。 キャッシュ機能がパフォーマンスのボトルネックに達した場合、このパラメーターの値を増やすことができます。
nfs-efc-cache。
ボリュームタイプ
このパラメーターは、分散キャッシュを有効にする場合に必要です。
DaemonSetによって作成されたポッドのemptyDirボリュームによって使用されるメディア。 有効な値:
ディスク
メモリ
nfs-efc-cache。
volume-size
このパラメーターは、分散キャッシュを有効にする場合に必要です。 キャッシュするボリュームのサイズ。 単位:GiB。
cnfs-client-properties
キャッシュ機能の依存関係。 分散キャッシュ機能を有効にする場合は、
cnfs-client-propertiesを指定します。 enable=true
ノードセレクタ
分散キャッシュ機能用にDaemonSetによって作成されたポッドは、ラベルに基づいてスケジュールされます。 このパラメーターを指定しない場合、DaemonSetはクラスター内の各ノードにスケジュールされます。
重要メディアをディスクまたはメモリに設定すると、ノードのデータディスクまたはメモリリソースが使用されます。 これがワークロードに悪影響を及ぼさないことを確認してください。
この例では、分散キャッシュ機能のDaemonSetは、それぞれが5 GiBのサイズのtmpfsボリュームでマウントされる3つのコンテナを作成します。 コンテナーは、
cache=true
ラベルを持つノードにのみスケジュールできます。
ConfigMapが設定されると、システムはConfigMapに基づいてDaemonSetとサービスを自動的にデプロイします。
次のコマンドを実行して、インストールの依存関係を持つCSI-Pluginを再起動します。
kubectl get pod -nkube-system -owide | grep csi-plugin | awk '{print $1}' | xargs kubectl -nkube-system削除ポッド
次のコマンドを実行して、CNFSクライアントの分散キャッシュ機能を有効にします。
CNFSによって管理されるNASファイルシステムを作成します。 StatefulSetは、CNFSによって高速化されたNASボリュームを動的にプロビジョニングされたボリュームとしてマウントします。 この例では、busybox画像が使用される。 ポッドが起動した後、システムは
dd
コマンドを実行して、サイズが1 GBのファイルを/data
パスに書き込みます。 ファイルは、分散キャッシュ機能が有効かどうかを確認するために使用されます。次のコマンドを実行して、分散キャッシュが有効になっているNASボリュームがマウントされているかどうかを確認します。
kubectl exec cnfs-nas-sts-0 -- mount | grep /data
期待される出力:
xxx.cn-xxx.nas.aliyuncs.com:/nas-6b9d1397-6542-4410-816b-4dfd0633 ****:2fMaQdxU on /data type alifuse.aliyun-alinas-eac (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)
マウントターゲットが出力に表示されます。 これは、分散キャッシュが有効になっているNASボリュームがマウントされていることを示します。
次のコマンドを実行して、分散キャッシュ機能のDaemonSetが起動されているかどうかを確認します。
kubectl get ds/cnfs-cache-ds -n kube-system -owide
期待される出力:
名前決定された現在の準備ができている日付までの利用可能なノード選択者年齢コンテナは選択者を想像します cnfs-cache-ds 3 3 3 3 3 <none> 19d alinas-dadi-containe r registry-vpc.cn-shenzhen.aliyuncs.com/acs/nas-cache:20220420 app=cnfs-cache-ds
この例では、クラスタは3つのノードを含む。 DaemonSetによって作成された3つのポッドが準備完了です。 これは、分散キャッシュ機能のDaemonSetが起動されたことを示します。
次のコマンドを実行して、分散キャッシュサービスがバックエンドポッドを検出できるかどうかを確認します。
kubectl get ep cnfs-cache-ds-service -n kube-system -owide
期待される出力:
名前は年齢を終了します cnfs-cache-ds-service 10.19.1.130:6500,10.19.1.40:6500,10.19.1.66:6500 19d
出力は、サービスがバックエンドポッドを検出したことを示しています。 ポッドのエンドポイントは10.19.1.130、10.19.1.40、10.19.1.66です。 ポートは6500です。
ステップ2: キャッシュ機能を確認する
次のコマンドを実行して、
/data
パスのtmpfileファイルを/
ディレクトリにコピーし、消費時間を確認します。 ファイルのサイズは1 GBです。kubectl exec cnfs-nas-sts-0 -- time cp /data/1G.tmpfile /
期待される出力:
リアル0m 5.66s ユーザー0m 0.00s sys 0m 0.75s
出力は、分散キャッシュ機能が無効になっている場合、ファイルのコピーに必要な時間が約5秒であることを示しています。
次のコマンドを複数回実行して、ファイルのコピーに必要な時間を確認します。
kubectl exec cnfs-nas-sts-0 -- time cp /data/1G.tmpfile /
期待される出力:
リアル0m 0.79s ユーザー0m 0.00s sys 0m 0.58s
出力は、ファイルが複数回アクセスされた場合、ファイルのコピーに必要な時間が6〜7倍に短縮されることを示しています。