代替: クラウド取り込みエッジ ボリュームのキーベースの認証構成

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

この構成は、キーベースの認証方法で使用するための代替オプションです。 クラウド取り込みエッジ ボリュームの構成で、システム割り当てマネージド ID を使用する推奨構成を確認する必要があります。

前提条件

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

    Note

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

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

Kubernetes シークレットを作成する

エッジ ボリュームは、次の 3 つの認証方法をサポートしています。

  • Shared Access Signature (SAS) 認証 (推奨)
  • 接続文字列の認証
  • ストレージ キー認証

これらの方法のいずれかで認証を完了したら、「クラウド取り込み永続ボリューム要求 (PVC) を作成する」セクションに進みます。

Shared Access Signature (SAS) 認証を使用して Kubernetes シークレットを作成する

SAS 認証を構成するには、YAML と kubectl を使用するか、Azure CLI を使用します。

storageaccountsas を見つけるには、以下の手順を実行します。

  1. Azure Portal のストレージ アカウントに移動します。
  2. 左側のブレードにある [セキュリティ + ネットワーク] を展開し、[共有アクセス署名] を選択します。
  3. [使用できるリソースの種類] で、[サービス] > [コンテナー] > [オブジェクト] を選択します。
  4. [与えられているアクセス許可] で、[不変ストレージ][完全な削除] をオフにします。
  5. [開始日時と有効期限の日時] で、目的の終了日時を選択します。
  6. 一番下にある [SAS と接続文字列を生成する] を選択します。
  7. [SAS トークン] の下に表示されている値は、次のセクションの storageaccountsas 変数に使用されます。

YAML と kubectl を使用した Shared Access Signature (SAS) 認証

  1. 次の内容を含む sas.yaml という名前のファイルを作成します。 metadata::namemetadata::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
    
  2. sas.yaml を適用するには、以下を実行します。

    kubectl apply -f "sas.yaml"
    

CLI を使用した Shared Access Signature (SAS) 認証

  • SAS 認証のスコープをコンテナー レベルに設定する場合は、次のコマンドを使用します。 1 つ目のコマンドの YOUR_CONTAINER_NAME を更新し、2 つ目のコマンドの YOUR_NAMESPACEYOUR_STORAGE_ACCT_NAMEYOUR_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) を作成する

  1. 次の内容を含む 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
    
  2. cloudIngestPVC.yaml を適用するには、以下を実行します。

    kubectl apply -f "cloudIngestPVC.yaml"
    

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

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

    kubectl get edgevolumes
    
  2. edgeSubvolume.yaml という名前のファイルを作成し、次の内容をコピーします。 変数を実際の情報に更新します。

    Note

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

    • metadata::name: サブボリュームの名前を作成します。
    • spec::edgevolume: この名前は、前の手順で kubectl get edgevolumes を使って取得しました。
    • spec::path: マウント パスの下に独自のサブディレクトリ名を作成します。 次の例には、例の名前 (exampleSubDir) が既に含まれていることに注意してください。 このパス名を変更する場合は、deploymentExample.yaml の 33 行目を新しいパス名に更新する必要があります。 パスの名前を変更する場合は、前にスラッシュを付けないでください。
    • spec::auth::authType: 前の手順で使用した認証方法によって変わります。 使用できる入力には、sasconnection_stringkey などがあります。
    • 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
    
  3. edgeSubvolume.yaml を適用するには、以下を実行します。

    kubectl apply -f "edgeSubvolume.yaml"
    

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

  1. 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>
    
  2. myedgeingest-policy.yaml を適用するには、以下を実行します。

    kubectl apply -f "myedgeingest-policy.yaml"
    

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

  1. 永続ボリューム要求 (PVC) に対して一般的な単一ポッド (Kubernetes ネイティブ アプリケーション) を構成するには、次の内容を含む deploymentExample.yaml という名前のファイルを作成します。 containers::namevolumes::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>
    
  2. deploymentExample.yaml を適用するには、以下を実行します。

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

    Note

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

  4. 次のコマンドを実行し、POD_NAME_HERE を先ほどの手順でコピーした値に置き換えます。

    kubectl exec -it pod_name_here -- sh
    
  5. ディレクトリ (cd) を、deploymentExample.yaml で指定したように /data マウント パスに変更します。

  6. サブボリュームをエッジ ボリュームにアタッチする」セクションの手順 2 で path として指定した名前でディレクトリが表示されるはずです。 次に cd/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 を使用してサードパーティの監視を開始します。

デプロイを監視する