クラウド取り込みエッジ ボリュームの構成
この記事では、"クラウド取り込みエッジ ボリューム" (ローカル消去を使用した BLOB アップロード) の構成について説明します。
クラウド取り込みエッジ ボリュームとは
"クラウド取り込みエッジ ボリューム" を使うと、エッジから ADLSgen2 などの BLOB への無制限のデータ インジェストが容易になります。 このストレージの種類に書き込まれたファイルは、Blob Storage にシームレスに転送され、アップロードが確認された後、ローカル環境から消去されます。 この削除により、新しいデータのための空き領域が確保されます。 さらに、このストレージ オプションでは切断された環境でのデータ整合性がサポートされており、ネットワークに再接続された時点でローカル ストレージと同期が有効になります。
たとえば、クラウド取り込み PVC にファイルを書き込み、プロセスで 1 分ごとにスキャンを実行して新しいファイルをチェックできます。 識別されたファイルは、ユーザーが指定した BLOB の宛先にアップロードするために送信されます。 アップロード成功の確認の後、クラウド取り込みエッジ ボリュームは 5 分間待機してから、ファイルのローカル バージョンを削除します。
前提条件
こちらの手順に従ってストレージ アカウントを作成します。
Note
ストレージ アカウントを作成するときは、Kubernetes クラスターと同じリソース グループおよびリージョンや場所に、それを作成することをお勧めします。
こちらの手順に従って、前に作成したストレージ アカウントにコンテナーを作成します。
拡張機能 ID を構成する
エッジ ボリュームを使うと、システム割り当て拡張機能 ID を使って BLOB ストレージにアクセスできます。 このセクションでは、システム割り当て拡張機能 ID を使ってストレージ アカウントへのアクセスを許可し、クラウド取り込みボリュームをこれらのストレージ システムにアップロードできるようにする方法について説明します。
拡張機能 ID を使うことをお勧めします。 最終的な宛先が BLOB ストレージまたは ADLSgen2 の場合は、以下の手順を参照してください。 最終的な宛先が OneLake の場合は、「拡張機能 ID 用に OneLake を構成する」の手順に従います。
お勧めしませんが、キーベースの認証を使いたい場合は、キーベースの認証に関する記事の手順に従ってください。
拡張機能 ID を取得する
Azure portal
- Arc に接続されたクラスターに移動します。
- 拡張子を選択します。
- Azure Arc 拡張機能で有効にされた Azure コンテナー ストレージを選びます。
- [クラスター拡張機能の詳細] でプリンシパル ID を記録しておきます。
拡張機能 ID 用の BLOB ストレージ アカウントを構成する
ストレージ アカウントに拡張機能 ID のアクセス許可を追加する
- Azure portal でストレージ アカウントに移動します。
- [アクセス制御 (IAM)] を選択します。
- [追加 +] > [ロールの割り当ての追加] を選びます。
- [ストレージ BLOB データ所有者] を選んでから、[次へ] を選びます。
- [+ メンバーの選択] を選びます。
- プリンシパル ID を [選択したメンバー:] の一覧に追加するには、ID を貼り付けてから、ID の横にある [+] を選びます。
- [選択] をクリックします。
- アクセス許可を確認して割り当てるには、[次へ] を選んでから、[レビューと割り当て] を選びます。
クラウド取り込み永続ボリューム要求 (PVC) を作成する
次の内容を含む
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
cloudIngestPVC.yaml
を適用するには、以下を実行します。kubectl apply -f "cloudIngestPVC.yaml"
サブボリュームをエッジ ボリュームにアタッチする
拡張機能 ID を使用してサブボリュームを作成し、ストレージ アカウント コンテナーに接続するには、以下のプロセスを使用します。
次のコマンドを使って、取り込みエッジ ボリュームの名前を取得します。
kubectl get edgevolumes
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
edgeSubvolume.yaml
を適用するには、以下を実行します。kubectl apply -f "edgeSubvolume.yaml"
省略可能: ingestPolicy
を既定値から変更する
ingestPolicy
を既定のedgeingestpolicy-default
から変更する場合は、次のような内容でmyedgeingest-policy.yaml
という名前のファイルを作成します。 次の変数は、ユーザー設定で更新する必要があります。Note
使用できるのは小文字とダッシュだけです。 詳細については、Kubernetes オブジェクトの名前付けに関するドキュメントを参照してください。
metadata.name
: ingestPolicy の名前を作成します。 この名前を更新し、edgeSubvolume.yaml
のspec.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>
これらの仕様の詳細については、「取り込みポリシーの設定」を参照してください。
myedgeingest-policy.yaml
を適用するには、以下を実行します。kubectl apply -f "myedgeingest-policy.yaml"
アプリをアタッチする (Kubernetes ネイティブ アプリケーション)
永続ボリューム要求 (PVC) に対して汎用単一ポッド (Kubernetes ネイティブ アプリケーション) を構成するには、次のような内容で
deploymentExample.yaml
という名前のファイルを作成します。containers.name
とvolumes.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>
deploymentExample.yaml
を適用するには、以下を実行します。kubectl apply -f "deploymentExample.yaml"
kubectl get pods
を使用して、ポッドの名前を検索します。 この名前をコピーして、次のステップで使います。Note
deploymentExample.yaml
ではspec.replicas
が2
と指定されていたため、kubectl get pods
を使うと 2 つのポッドが表示されます。 次のステップで使うポッド名を選択できます。次のコマンドを実行し、
POD_NAME_HERE
を前のステップでコピーした値に置き換えます。kubectl exec -it POD_NAME_HERE -- sh
deploymentExample.yaml
から指定された/data
マウント パスにディレクトリを変更します。「サブボリュームをエッジ ボリュームにアタッチする」セクションの手順 2 で
path
として指定した名前でディレクトリが表示されるはずです。 ディレクトリを/YOUR_PATH_NAME_HERE
に変更し、YOUR_PATH_NAME_HERE
の値を実際の詳細に置き換えます。例として、
file1.txt
という名前のファイルを作成し、echo "Hello World" > file1.txt
を使用して書き込みます。Azure portal で、ストレージ アカウントに移動し、「サブボリュームをエッジ ボリュームにアタッチする」の手順 2 で指定したコンテナーを見つけます。 コンテナーを選ぶと、コンテナー内に
file1.txt
が設定されていることがわかります。 ファイルがまだ表示されない場合は、1 分程度待ちます。エッジ ボリュームはアップロードに 1 分を要します。
次のステップ
以上の手順を完了した後、Azure Monitor と Kubernetes の監視、またはサード パーティの監視と Prometheus および Grafana を使って、デプロイの監視を始めることができます。