すべてのプロダクト
Search
ドキュメントセンター

:CNFS クライアントの分散キャッシュ機能を有効にする

最終更新日:Mar 27, 2025

Container Network File System (CNFS) クライアントを使用すると、複数の接続を介してデータにアクセスし、メタデータとデータを分散方式でキャッシュして、読み取り速度を向上させることができます。 CNFS クライアントは、パフォーマンスの監視とサービス品質 (QoS) もサポートしています。 このトピックでは、CNFS クライアントの分散キャッシュ機能を有効にする方法と、CNFS クライアントの分散キャッシュ機能を使用して読み取り速度を向上させる方法について説明します。

前提条件

分散キャッシュ機能の主要なパフォーマンス指標

指標

ベンチマークシナリオ

分散キャッシュ無効

分散キャッシュ有効

メタデータの読み取りおよび書き込みパフォーマンス

100 万個のディレクトリをトラバースする時間

18 分

< 60 秒

サイズ 4 KB のファイルを作成する時間

3,000 マイクロ秒

< 200 マイクロ秒

サイズ 4 KB のファイルを 2 回目に読み取る時間

400 マイクロ秒

< 100 マイクロ秒

読み取りおよび書き込みスループット

シングルノードの読み取りおよび書き込みスループット

200 ~ 500 MB/秒

> 800 MB/秒

包括的なシナリオでの全体的なパフォーマンス

それぞれ 150 KB のサイズの 5,000 個の画像を抽出する時間

52 秒

約 15 秒

Redis プロジェクトを作成する時間

27 秒

約 21 秒

重要

上記の表に示されている値は理論値 (参照値) のみです。 実際の値は、動作環境によって異なります。

  • 注 ①: ベンチマークテストの実行に使用される Elastic Compute Service (ECS) インスタンスタイプは ecs.hfg6.4xlarge です。 ベンチマークデータは、環境によって異なる場合があります。

  • 注 ②: ECS インスタンスの帯域幅と File Storage NAS (NAS) ファイルシステムのタイプは、ノードの読み取りおよび書き込みスループットに影響します。

手順 1: 分散キャッシュが有効になっている NAS ファイルシステムをマウントする

  1. 次のコマンドを実行して、クラスターに csi-plugin の ConfigMap を作成およびデプロイし、CNFS クライアントをインストールします。

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: csi-plugin
      namespace: kube-system
    data:
      cnfs-client-properties: |
        nas-efc=true  // 分散キャッシュを有効にする
      nas-efc-cache: |
        enable=true
        container-number=3 // DaemonSet がキャッシュ機能用に作成するコンテナーの数
        volume-type=memory // Pod の emptyDir ボリュームが使用するメディア
        volume-size=15Gi  // キャッシュするボリュームのサイズ
      node-selector: |
        cache=true // 分散キャッシュ機能の DaemonSet によって作成された Pod がスケジュールされるノードのラベル
    EOF

    パラメーター

    説明

    cnfs-client-properties

    分散キャッシュを有効にするかどうかを指定します。 nas-efc=true を指定すると、分散キャッシュ機能が有効になり、読み取り速度が向上します。

    nfs-efc-cache.

    container-number

    分散キャッシュを有効にする場合は、このパラメーターが必要です。

    このパラメーターは、DaemonSet がキャッシュ機能用に作成するコンテナーの数を指定します。 キャッシュ機能がパフォーマンスのボトルネックに達した場合は、このパラメーターの値を増やすことができます。

    nfs-efc-cache.

    volume-type

    分散キャッシュを有効にする場合は、このパラメーターが必要です。

    DaemonSet によって作成された Pod の emptyDir ボリュームによって使用されるメディア。 有効な値:

    • disk

    • memory

    nfs-efc-cache.

    volume-size

    分散キャッシュを有効にする場合は、このパラメーターが必要です。 キャッシュするボリュームのサイズ。 単位: GiB。

    node-selector

    分散キャッシュ機能の DaemonSet によって作成された Pod は、ラベルに基づいてスケジュールされます。 このパラメーターを指定しない場合、DaemonSet はクラスター内の各ノードにスケジュールされます。

    重要
    • メディアをディスクまたはメモリに設定した後、ノードのデータディスクまたはメモリリソースが使用されます。 これがワークロードに悪影響を与えないことを確認してください。

    • この例では、分散キャッシュ機能の DaemonSet は、それぞれが 5 GiB のサイズの tmpfs ボリュームにマウントされている 3 つのコンテナーを作成します。 コンテナーは、cache=true ラベルが付いているノードにのみスケジュールできます。

    ConfigMap が構成されると、システムは ConfigMap に基づいて DaemonSet と Service を自動的にデプロイします。

  2. 次のコマンドを実行して、CSI-Plugin を再起動し、依存関係をインストールします。

    kubectl get pod -nkube-system -owide | grep csi-plugin | awk '{print $1}' | xargs kubectl -nkube-system delete pod
  3. 次のコマンドを実行して、CNFS クライアントの分散キャッシュ機能を有効にします。

    CNFS によって管理される NAS ファイルシステムを作成します。 StatefulSet は、CNFS によって高速化された NAS ボリュームを動的にプロビジョニングされたボリュームとしてマウントします。 この例では、busybox イメージが使用されています。 Pod が起動されると、システムは dd コマンドを実行して、サイズ 1 GB のファイルを /data パスに書き込みます。 このファイルは、分散キャッシュ機能が有効になっているかどうかを確認するために使用されます。

    YAML コンテンツを表示:

    cat << EOF | kubectl apply -f -
    apiVersion: storage.alibabacloud.com/v1beta1
    kind: ContainerNetworkFileSystem
    metadata:
      name: cnfs-nas-filesystem
    spec:
      description: "cnfs"
      type: nas
      reclaimPolicy: Retain
      parameters:
        filesystemType: standard
        storageType: Capacity
        protocolType: NFS
        encryptType: None
        enableTrashCan: "true"
        trashCanReservedDays: "5"
        useClient: "EFCClient" # EFC クライアントを使用して、分散キャッシュが有効になっている NAS ファイルシステムをマウントします。
    ---
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alibabacloud-cnfs-nas-sc
    mountOptions:
      - g_tier_EnableClusterCache=true              // ボリュームのマウント時にキャッシュ設定を構成します。
      - g_tier_EnableClusterCachePrefetch=true      // ボリュームのマウント時にプリフェッチを構成します。
    parameters:
      volumeAs: subpath
      containerNetworkFileSystem: cnfs-nas-filesystem
      path: "/"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain
    allowVolumeExpansion: true
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: cnfs-nas-sts
      labels:
        app: busybox
    spec:
      serviceName: "busybox"
      replicas: 1
      selector:
        matchLabels:
          app: busybox
      template:
        metadata:
          labels:
            app: busybox
        spec:
          containers:
          - name: busybox
            image: busybox
            command: ["/bin/sh"]
            args: ["-c", "dd if=/dev/zero of=/data/1G.tmpfile bs=1G count=1;sleep 3600;"] // 1GB のファイルを作成
            volumeMounts:
            - mountPath: "/data"  // マウントパス
              name: www
      volumeClaimTemplates:
      - metadata:
          name: www
        spec:
          accessModes: [ "ReadWriteOnce" ]
          storageClassName: "alibabacloud-cnfs-nas-sc"
          resources:
            requests:
              storage: 50Gi
    EOF
  4. 次のコマンドを実行して、分散キャッシュが有効になっている 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 ボリュームがマウントされていることを示します。

  5. 次のコマンドを実行して、分散キャッシュ機能の DaemonSet が起動されているかどうかを確認します。

    kubectl get ds/cnfs-cache-ds -n kube-system -owide

    予期される出力:

    NAME             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   CONTAINERS              IMAGES                                                         SELECTOR
    cnfs-cache-ds   3         3         3       3            3           <none>          19d   alinas-dadi-container   registry-vpc.cn-shenzhen.aliyuncs.com/acs/nas-cache:20220420   app=cnfs-cache-ds

    この例では、クラスターには 3 つのノードが含まれています。 DaemonSet によって作成された 3 つの Pod は準備完了です。 これは、分散キャッシュ機能の DaemonSet が起動されていることを示します。

  6. 次のコマンドを実行して、分散キャッシュ Service がバックエンド Pod を検出できるかどうかを確認します。

    kubectl get ep cnfs-cache-ds-service  -n kube-system -owide

    予期される出力:

    NAME                     ENDPOINTS                                          AGE
    cnfs-cache-ds-service   10.19.1.130:6500,10.19.1.40:6500,10.19.1.66:6500   19d

    出力は、Service がバックエンド Pod を検出したことを示しています。 Pod のエンドポイントは 10.19.1.130、10.19.1.40、および 10.19.1.66 です。 ポートは 6500 です。

手順 2: キャッシュ機能を確認する

  1. 次のコマンドを実行して、tmpfile/data ディレクトリから / ディレクトリにコピーし、消費された時間を確認します。 ファイルのサイズは 1 GB です。

    kubectl exec cnfs-nas-sts-0 -- time cp /data/1G.tmpfile /

    予期される出力:

    real    0m 5.66s
    user    0m 0.00s
    sys     0m 0.75s

    出力は、分散キャッシュ機能が無効になっている場合、ファイルのコピーに必要な時間が約 5 秒であることを示しています。

  2. 次のコマンドを複数回実行して、ファイルのコピーに必要な時間を確認します。

    kubectl exec cnfs-nas-sts-0 -- time cp /data/1G.tmpfile /

    予期される出力:

    real    0m 0.79s
    user    0m 0.00s
    sys     0m 0.58s

    出力は、ファイルに複数回アクセスした場合、ファイルのコピーに必要な時間が 6 ~ 7 倍短縮されることを示しています。