代替: クラウド取り込みエッジ ボリュームのキーベースの認証構成
この記事では、キーベースの認証を使用したクラウド取り込みエッジ ボリューム (ローカル消去を使用した BLOB アップロード) の代替構成について説明します。
この構成は、キーベースの認証方法で使用するための代替オプションです。 クラウド取り込みエッジ ボリュームの構成で、システム割り当てマネージド ID を使用する推奨構成を確認する必要があります。
前提条件
こちらの手順に従ってストレージ アカウントを作成します。
Note
ストレージ アカウントを作成するときは、Kubernetes クラスターと同じリソース グループとリージョンまたは場所の下に作成することをお勧めします。
こちらの手順に従って、前の手順で作成したストレージ アカウントにコンテナーを作成します。
Kubernetes シークレットを作成する
エッジ ボリュームは、次の 3 つの認証方法をサポートしています。
- Shared Access Signature (SAS) 認証 (推奨)
- 接続文字列の認証
- ストレージ キー認証
これらの方法のいずれかで認証を完了したら、「クラウド取り込み永続ボリューム要求 (PVC) を作成する」セクションに進みます。
Shared Access Signature (SAS) 認証を使用して Kubernetes シークレットを作成する
SAS 認証を構成するには、YAML と kubectl
を使用するか、Azure CLI を使用します。
storageaccountsas
を見つけるには、以下の手順を実行します。
- Azure Portal のストレージ アカウントに移動します。
- 左側のブレードにある [セキュリティ + ネットワーク] を展開し、[共有アクセス署名] を選択します。
- [使用できるリソースの種類] で、[サービス] > [コンテナー] > [オブジェクト] を選択します。
- [与えられているアクセス許可] で、[不変ストレージ] と [完全な削除] をオフにします。
- [開始日時と有効期限の日時] で、目的の終了日時を選択します。
- 一番下にある [SAS と接続文字列を生成する] を選択します。
- [SAS トークン] の下に表示されている値は、次のセクションの
storageaccountsas
変数に使用されます。
YAML と kubectl
を使用した Shared Access Signature (SAS) 認証
次の内容を含む
sas.yaml
という名前のファイルを作成します。metadata::name
、metadata::namespace
、およびstorageaccountconnectionstring
を独自の値に置き換えます。Note
使用できるのは小文字とダッシュだけです。 詳細については、Kubernetes オブジェクトの名前付けに関するドキュメントを参照してください。
apiVersion: v1 kind: Secret metadata: ### This name should look similar to "kharrisStorageAccount-secret" where "kharrisStorageAccount" is replaced with your storage account name name: <your-storage-acct-name-secret> # Use a namespace that matches your intended consuming pod, or "default" namespace: <your-intended-consuming-pod-or-default> stringData: authType: SAS # Container level SAS (must have ? prefixed) storageaccountsas: "?..." type: Opaque
sas.yaml
を適用するには、以下を実行します。kubectl apply -f "sas.yaml"
CLI を使用した Shared Access Signature (SAS) 認証
SAS 認証のスコープをコンテナー レベルに設定する場合は、次のコマンドを使用します。 1 つ目のコマンドの
YOUR_CONTAINER_NAME
を更新し、2 つ目のコマンドのYOUR_NAMESPACE
、YOUR_STORAGE_ACCT_NAME
、YOUR_SECRET
を更新する必要があります。az storage container generate-sas [OPTIONAL auth via --connection-string "..."] --name YOUR_CONTAINER_NAME --permissions acdrw --expiry '2025-02-02T01:01:01Z' kubectl create secret generic -n "YOUR_NAMESPACE" "YOUR_STORAGE_ACCT_NAME"-secret --from-literal=storageaccountsas="YOUR_SAS"
クラウド取り込み永続ボリューム要求 (PVC) を作成する
次の内容を含む
cloudIngestPVC.yaml
という名前のファイルを作成します。metadata::name
値を編集し、永続ボリューム要求の名前を追加する必要があります。 この名前は、次の手順のdeploymentExample.yaml
の最後の行で参照します。 また、metadata::namespace
値は、使用する予定のポッドに更新する必要があります。 使用する予定のポッドがない場合、metadata::namespace
の値はdefault
です。Note
使用できるのは小文字とダッシュだけです。 詳細については、Kubernetes オブジェクトの名前付けに関するドキュメントを参照してください。
kind: PersistentVolumeClaim apiVersion: v1 metadata: ### Create a name for the PVC ### name: <your-storage-acct-name-secret> ### Use a namespace that matches your intended consuming pod, or "default" ### namespace: <your-intended-consuming-pod-or-default> spec: accessModes: - ReadWriteMany resources: requests: storage: 2Gi storageClassName: cloud-backed-sc
cloudIngestPVC.yaml
を適用するには、以下を実行します。kubectl apply -f "cloudIngestPVC.yaml"
サブボリュームをエッジ ボリュームにアタッチする
次のコマンドを使用して、エッジ ボリュームの名前を取得します。
kubectl get edgevolumes
edgeSubvolume.yaml
という名前のファイルを作成し、次の内容をコピーします。 変数を実際の情報に更新します。Note
使用できるのは小文字とダッシュだけです。 詳細については、Kubernetes オブジェクトの名前付けに関するドキュメントを参照してください。
metadata::name
: サブボリュームの名前を作成します。spec::edgevolume
: この名前は、前の手順でkubectl get edgevolumes
を使って取得しました。spec::path
: マウント パスの下に独自のサブディレクトリ名を作成します。 次の例には、例の名前 (exampleSubDir
) が既に含まれていることに注意してください。 このパス名を変更する場合は、deploymentExample.yaml
の 33 行目を新しいパス名に更新する必要があります。 パスの名前を変更する場合は、前にスラッシュを付けないでください。spec::auth::authType
: 前の手順で使用した認証方法によって変わります。 使用できる入力には、sas
、connection_string
、key
などがあります。spec::auth::secretName
: ストレージ キー認証を使用した場合、secretName
は{your_storage_account_name}-secret
です。 接続文字列または SAS 認証を使用した場合、secretName
はユーザーが指定したものです。spec::auth::secretNamespace
: 使用する予定のポッド、またはdefault
に一致します。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 secretName: <your-secret-name> secretNamespace: <your_namespace> storageaccountendpoint: <your_storage_account_endpoint> 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 will need to 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
を新しいパス名に更新する必要があります。Note
使用できるのは小文字とダッシュだけです。 詳細については、Kubernetes オブジェクトの名前付けに関するドキュメントを参照してください。
apiVersion: apps/v1 kind: Deployment metadata: name: cloudingestedgevol-deployment ### This will need to be unique for every volume 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/esaingesttestfile count=16 bs=1M && while true; do ls /data &>/dev/null || break; sleep 1; done" volumeMounts: ### This name must match the following volumes::name attribute ### - name: wyvern-volume ### This mountPath is where the PVC will be attached to the pod's filesystem ### mountPath: "/data" volumes: ### User-defined 'name' that is 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 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
ディレクトリ (
cd
) を、deploymentExample.yaml
で指定したように/data
マウント パスに変更します。「サブボリュームをエッジ ボリュームにアタッチする」セクションの手順 2 で
path
として指定した名前でディレクトリが表示されるはずです。 次にcd
を/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 を使用してサードパーティの監視を開始します。