クラウド取り込みエッジ ボリュームの構成

この記事では、"クラウド取り込みエッジ ボリューム" (ローカル消去を使用した BLOB アップロード) の構成について説明します。

クラウド取り込みエッジ ボリュームとは

"クラウド取り込みエッジ ボリューム" を使うと、エッジから ADLSgen2 などの BLOB への無制限のデータ インジェストが容易になります。 このストレージの種類に書き込まれたファイルは、Blob Storage にシームレスに転送され、アップロードが確認された後、ローカル環境から消去されます。 この削除により、新しいデータのための空き領域が確保されます。 さらに、このストレージ オプションでは切断された環境でのデータ整合性がサポートされており、ネットワークに再接続された時点でローカル ストレージと同期が有効になります。

たとえば、クラウド取り込み PVC にファイルを書き込み、プロセスで 1 分ごとにスキャンを実行して新しいファイルをチェックできます。 識別されたファイルは、ユーザーが指定した BLOB の宛先にアップロードするために送信されます。 アップロード成功の確認の後、クラウド取り込みエッジ ボリュームは 5 分間待機してから、ファイルのローカル バージョンを削除します。

前提条件

  1. こちらの手順に従ってストレージ アカウントを作成します。

    Note

    ストレージ アカウントを作成するときは、Kubernetes クラスターと同じリソース グループおよびリージョンや場所に、それを作成することをお勧めします。

  2. こちらの手順に従って、前に作成したストレージ アカウントにコンテナーを作成します。

拡張機能 ID を構成する

エッジ ボリュームを使うと、システム割り当て拡張機能 ID を使って BLOB ストレージにアクセスできます。 このセクションでは、システム割り当て拡張機能 ID を使ってストレージ アカウントへのアクセスを許可し、クラウド取り込みボリュームをこれらのストレージ システムにアップロードできるようにする方法について説明します。

拡張機能 ID を使うことをお勧めします。 最終的な宛先が BLOB ストレージまたは ADLSgen2 の場合は、以下の手順を参照してください。 最終的な宛先が OneLake の場合は、「拡張機能 ID 用に OneLake を構成する」の手順に従います。

お勧めしませんが、キーベースの認証を使いたい場合は、キーベースの認証に関する記事の手順に従ってください。

拡張機能 ID を取得する

Azure portal

  1. Arc に接続されたクラスターに移動します。
  2. 拡張子を選択します。
  3. Azure Arc 拡張機能で有効にされた Azure コンテナー ストレージを選びます。
  4. [クラスター拡張機能の詳細] でプリンシパル ID を記録しておきます。

拡張機能 ID 用の BLOB ストレージ アカウントを構成する

ストレージ アカウントに拡張機能 ID のアクセス許可を追加する

  1. Azure portal でストレージ アカウントに移動します。
  2. [アクセス制御 (IAM)] を選択します。
  3. [追加 +] > [ロールの割り当ての追加] を選びます。
  4. [ストレージ BLOB データ所有者] を選んでから、[次へ] を選びます。
  5. [+ メンバーの選択] を選びます。
  6. プリンシパル ID を [選択したメンバー:] の一覧に追加するには、ID を貼り付けてから、ID の横にある [+] を選びます。
  7. [選択] をクリックします。
  8. アクセス許可を確認して割り当てるには、[次へ] を選んでから、[レビューと割り当て] を選びます。

クラウド取り込み永続ボリューム要求 (PVC) を作成する

  1. 次の内容を含む cloudIngestPVC.yaml という名前のファイルを作成します。 metadata.name の行を編集して、永続ボリューム要求の名前を作成します。 この名前は、次のステップの deploymentExample.yaml の最後の行で参照します。 また、metadata.namespace の値を、使用する目的のポッドで更新します。 使用する目的のポッドがない場合、metadata.namespace の値は default です。 spec.resources.requests.storage パラメーターは、永続ボリュームのサイズを決定します。 この例ではこれは 2 GB ですが、以下のようにニーズに合わせて変更できます。

    Note

    使用できるのは小文字とダッシュだけです。 詳細については、Kubernetes オブジェクトの名前付けに関するドキュメントを参照してください

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      ### Create a name for your PVC ###
      name: <create-persistent-volume-claim-name-here>
      ### Use a namespace that matched your intended consuming pod, or "default" ###
      namespace: <intended-consuming-pod-or-default-here>
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 2Gi
      storageClassName: cloud-backed-sc
    
  2. cloudIngestPVC.yaml を適用するには、以下を実行します。

    kubectl apply -f "cloudIngestPVC.yaml"
    

サブボリュームをエッジ ボリュームにアタッチする

拡張機能 ID を使用してサブボリュームを作成し、ストレージ アカウント コンテナーに接続するには、以下のプロセスを使用します。

  1. 次のコマンドを使って、取り込みエッジ ボリュームの名前を取得します。

    kubectl get edgevolumes
    
  2. edgeSubvolume.yaml という名前のファイルを作成し、次の内容をコピーします。 これらの変数は、実際の情報で更新する必要があります。

    Note

    使用できるのは小文字とダッシュだけです。 詳細については、Kubernetes オブジェクトの名前付けに関するドキュメントを参照してください

    • metadata.name: サブボリュームの名前を作成します。
    • spec.edgevolume: この名前は、前の手順で kubectl get edgevolumes を使って取得しました。
    • spec.path: マウント パスの下に独自のサブディレクトリ名を作成します。 以下の例には、例の名前 (exampleSubDir) が既に含まれています。 このパス名を変更する場合は、deploymentExample.yaml の 33 行目を新しいパス名に更新する必要があります。 パスの名前を変更する場合は、前にスラッシュを付けないでください。
    • spec.container: ストレージ アカウント内のコンテナー名。
    • spec.storageaccountendpoint: Azure portal でストレージ アカウントに移動します。 [概要] ページで、画面の右上近くにある [JSON ビュー] を選択します。 storageaccountendpoint リンクは、properties.primaryEndpoints.blob の下にあります。 リンク全体 (例: https://mytest.blob.core.windows.net/) をコピーします。
    apiVersion: "arccontainerstorage.azure.net/v1"
    kind: EdgeSubvolume
    metadata:
      name: <create-a-subvolume-name-here>
    spec:
      edgevolume: <your-edge-volume-name-here>
      path: exampleSubDir # If you change this path, line 33 in deploymentExample.yaml must be updated. Don't use a preceding slash.
      auth:
        authType: MANAGED_IDENTITY
      storageaccountendpoint: "https://<STORAGE ACCOUNT NAME>.blob.core.windows.net/"
      container: <your-blob-storage-account-container-name>
      ingestPolicy: edgeingestpolicy-default # Optional: See the following instructions if you want to update the ingestPolicy with your own configuration
    
  3. edgeSubvolume.yaml を適用するには、以下を実行します。

    kubectl apply -f "edgeSubvolume.yaml"
    

省略可能: ingestPolicy を既定値から変更する

  1. ingestPolicy を既定の edgeingestpolicy-default から変更する場合は、次のような内容で myedgeingest-policy.yaml という名前のファイルを作成します。 次の変数は、ユーザー設定で更新する必要があります。

    Note

    使用できるのは小文字とダッシュだけです。 詳細については、Kubernetes オブジェクトの名前付けに関するドキュメントを参照してください

    • metadata.name: ingestPolicy の名前を作成します。 この名前を更新し、edgeSubvolume.yamlspec.ingestPolicy セクションで参照する必要があります。
    • spec.ingest.order: ダーティ ファイルがアップロードされる順序。 これはベスト エフォートであり、保証ではありません (既定値は oldest-first)。 順序のオプションは、oldest-first または newest-first です。
    • spec.ingest.minDelaySec: ダーティ ファイルが取り込みの対象になるまでの最小秒数 (既定値は 60)。 この数値の範囲は 0 から 31536000 です。
    • spec.eviction.order: ファイルの削除方法 (既定値は unordered)。 削除順序のオプションは、unordered または never です。
    • spec.eviction.minDelaySec: クリーン ファイルが削除対象になるまでの秒数 (既定値は 300)。 この数値の範囲は 0 から 31536000 です。
    apiVersion: arccontainerstorage.azure.net/v1
    kind: EdgeIngestPolicy
    metadata:
      name: <create-a-policy-name-here> # This must be updated and referenced in the spec.ingestPolicy section of the edgeSubvolume.yaml
    spec:
      ingest:
        order: <your-ingest-order>
        minDelaySec: <your-min-delay-sec>
      eviction:
        order: <your-eviction-order>
        minDelaySec: <your-min-delay-sec>
    

    これらの仕様の詳細については、「取り込みポリシーの設定」を参照してください。

  2. myedgeingest-policy.yaml を適用するには、以下を実行します。

    kubectl apply -f "myedgeingest-policy.yaml"
    

アプリをアタッチする (Kubernetes ネイティブ アプリケーション)

  1. 永続ボリューム要求 (PVC) に対して汎用単一ポッド (Kubernetes ネイティブ アプリケーション) を構成するには、次のような内容で deploymentExample.yaml という名前のファイルを作成します。 containers.namevolumes.persistentVolumeClaim.claimName の値を変更します。 パス名を edgeSubvolume.yaml から更新した場合は、33 行目の exampleSubDir を新しいパス名で更新する必要があります。 spec.replicas パラメーターは、作成するレプリカ ポッドの数を決定します。 この例ではこれは 2 ですが、以下のようにニーズに合わせて変更できます。

    Note

    使用できるのは小文字とダッシュだけです。 詳細については、Kubernetes オブジェクトの名前付けに関するドキュメントを参照してください

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cloudingestedgevol-deployment ### This must be unique for each deployment you choose to create.
    spec:
      replicas: 2
      selector:
        matchLabels:
          name: wyvern-testclientdeployment
      template:
        metadata:
          name: wyvern-testclientdeployment
          labels:
            name: wyvern-testclientdeployment
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
              - labelSelector:
                  matchExpressions:
                  - key: app
                    operator: In
                    values:
                    - wyvern-testclientdeployment
                topologyKey: kubernetes.io/hostname
          containers:
            ### Specify the container in which to launch the busy box. ###
            - name: <create-a-container-name-here>
              image: mcr.microsoft.com/azure-cli:2.57.0@sha256:c7c8a97f2dec87539983f9ded34cd40397986dcbed23ddbb5964a18edae9cd09
              command:
                - "/bin/sh"
                - "-c"
                - "dd if=/dev/urandom of=/data/exampleSubDir/acsaingesttestfile count=16 bs=1M && while true; do ls /data &>/dev/null || break; sleep 1; done"
              volumeMounts:
                ### This name must match the volumes.name attribute below ###
                - name: wyvern-volume
                  ### This mountPath is where the PVC is attached to the pod's filesystem ###
                  mountPath: "/data"
          volumes:
             ### User-defined 'name' that's used to link the volumeMounts. This name must match volumeMounts.name as previously specified. ###
            - name: wyvern-volume
              persistentVolumeClaim:
                ### This claimName must refer to your PVC metadata.name (Line 5)
                claimName: <your-pvc-metadata-name-from-line-5-of-pvc-yaml>
    
  2. deploymentExample.yaml を適用するには、以下を実行します。

    kubectl apply -f "deploymentExample.yaml"
    
  3. kubectl get pods を使用して、ポッドの名前を検索します。 この名前をコピーして、次のステップで使います。

    Note

    deploymentExample.yaml では spec.replicas2 と指定されていたため、kubectl get pods を使うと 2 つのポッドが表示されます。 次のステップで使うポッド名を選択できます。

  4. 次のコマンドを実行し、POD_NAME_HERE を前のステップでコピーした値に置き換えます。

    kubectl exec -it POD_NAME_HERE -- sh
    
  5. deploymentExample.yaml から指定された /data マウント パスにディレクトリを変更します。

  6. サブボリュームをエッジ ボリュームにアタッチする」セクションの手順 2 で path として指定した名前でディレクトリが表示されるはずです。 ディレクトリを /YOUR_PATH_NAME_HERE に変更し、YOUR_PATH_NAME_HERE の値を実際の詳細に置き換えます。

  7. 例として、file1.txt という名前のファイルを作成し、echo "Hello World" > file1.txt を使用して書き込みます。

  8. Azure portal で、ストレージ アカウントに移動し、「サブボリュームをエッジ ボリュームにアタッチする」の手順 2 で指定したコンテナーを見つけます。 コンテナーを選ぶと、コンテナー内に file1.txt が設定されていることがわかります。 ファイルがまだ表示されない場合は、1 分程度待ちます。エッジ ボリュームはアップロードに 1 分を要します。

次のステップ

以上の手順を完了した後、Azure Monitor と Kubernetes の監視、またはサード パーティの監視と Prometheus および Grafana を使って、デプロイの監視を始めることができます。

デプロイを監視する