Azure Container Apps에서 스토리지 탑재 사용

컨테이너 앱은 다양한 유형의 스토리지에 액세스할 수 있습니다. 단일 앱은 필요한 경우 둘 이상의 스토리지 유형을 활용할 수 있습니다.

저장소 유형 설명 지속성 사용 예제
컨테이너 범위 스토리지 실행 중인 컨테이너에 사용할 수 있는 임시 스토리지 컨테이너가 종료될 때까지 데이터를 사용할 수 있습니다. 로컬 앱 캐시를 작성합니다.
복제본 범위 스토리지 동일한 복제본의 컨테이너 간에 파일을 공유하기 위한 임시 스토리지 복제본이 종료될 때까지 데이터를 사용할 수 있습니다. 사이드카 컨테이너에서 처리되는 기본 앱 컨테이너 쓰기 로그 파일입니다.
Azure 파일 영구 스토리지 데이터는 Azure Files에 유지됩니다. 다른 시스템에서 데이터에 액세스할 수 있도록 파일을 파일 공유에 작성합니다.

임시 스토리지

컨테이너 앱은 임시 데이터를 읽고 임시 스토리지에 쓸 수 있습니다. 임시 스토리지의 범위는 컨테이너 또는 복제본으로 지정될 수 있습니다. 각 복제본에 사용할 수 있는 컨테이너 범위 및 복제본 범위 스토리지의 총 양은 복제본에 할당된 총 vCPU 양에 따라 달라집니다.

vCPU 총 임시 스토리지
0.25 이하 1GiB
0.5 이하 2GiB
1 이하 4GiB
1 초과 8GiB

컨테이너 범위 스토리지

컨테이너는 자체 파일 시스템에 쓸 수 있습니다.

컨테이너 파일 시스템 스토리지의 특징은 다음과 같습니다.

  • 스토리지는 임시이며, 컨테이너가 종료되거나 다시 시작되면 사라집니다.
  • 이 스토리지에 쓴 파일은 현재 컨테이너에서 실행되는 프로세스에만 표시됩니다.

복제본 범위 스토리지

Kubernetes에서 EmptyDir(빈 디렉터리)에 해당하는 임시 볼륨을 탑재할 수 있습니다. 이 스토리지의 범위는 단일 복제본으로 지정됩니다. EmptyDir 볼륨을 사용하여 동일한 복제본의 컨테이너 간에 데이터를 공유합니다.

복제본 범위 스토리지의 특징은 다음과 같습니다.

  • 파일이 복제본의 수명 동안 유지됩니다.
    • 복제본의 컨테이너가 다시 시작되면 볼륨의 파일이 그대로 유지됩니다.
  • 복제본의 모든 init 또는 앱 컨테이너에서 동일한 볼륨을 탑재할 수 있습니다.
  • 컨테이너에서 여러 EmptyDir 볼륨을 탑재할 수 있습니다.

복제본 범위 스토리지를 구성하려면 먼저 수정 버전에서 EmptyDir 볼륨을 정의합니다. 그런 다음, 수정 버전에 있는 하나 이상의 컨테이너에서 볼륨 탑재를 정의합니다.

필수 조건

요구 사항 지침
Azure 계정 계정이 없으면 무료 계정을 만듭니다.
Azure Container Apps 환경 컨테이너 앱 환경을 만듭니다.

구성

Azure CLI를 사용하여 복제본 범위 스토리지를 구성하는 경우 YAML 정의를 사용하여 컨테이너 앱을 만들거나 업데이트해야 합니다.

  1. 복제본 범위 스토리지를 사용하도록 기존 컨테이너 앱을 업데이트하려면 앱의 사양을 app.yaml이라는 YAML 파일로 내보냅니다.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  2. 컨테이너 앱 사양을 다음과 같이 변경합니다.

    • volumes 배열을 컨테이너 앱 정의의 template 섹션에 추가하고 볼륨을 정의합니다. volumes 배열이 이미 있는 경우 배열에 새 볼륨을 추가합니다.
      • name은 볼륨에 대한 식별자입니다.
      • EmptyDirstorageType으로 사용합니다.
    • 볼륨을 탑재하려는 템플릿의 각 컨테이너에 대해 컨테이너 정의의 volumeMounts 배열에 볼륨 탑재를 정의합니다.
      • volumeNamevolumes 배열에 정의된 이름입니다.
      • mountPath는 볼륨을 탑재할 컨테이너의 경로입니다.
    properties:
      managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME>
      configuration:
        activeRevisionsMode: Single
      template:
        containers:
        - image: <IMAGE_NAME1>
          name: my-container-1
          volumeMounts:
          - mountPath: /myempty
            volumeName: myempty
        - image: <IMAGE_NAME_2>
          name: my-container-2
          volumeMounts:
          - mountPath: /myempty
            volumeName: myempty
        volumes:
        - name: myempty
          storageType: EmptyDir
    
  3. YAML 파일을 사용하여 컨테이너 앱을 업데이트합니다.

    az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \
        --yaml app.yaml
    

전체 예제는 YAML 사양을 참조하세요.

복제본 범위 볼륨을 만들고 컨테이너에 탑재하려면 ARM 템플릿에서 컨테이너 앱 리소스를 다음과 같이 변경합니다.

  • volumes 배열을 컨테이너 앱 정의의 template 섹션에 추가하고 볼륨을 정의합니다. volumes 배열이 이미 있는 경우 배열에 새 볼륨을 추가합니다.
    • name은 볼륨에 대한 식별자입니다.
    • EmptyDirstorageType으로 사용합니다.
  • 볼륨을 탑재하려는 템플릿의 각 컨테이너에 대해 컨테이너 정의의 volumeMounts 배열에 볼륨 탑재를 정의합니다.
    • volumeNamevolumes 배열에 정의된 이름입니다.
    • mountPath는 볼륨을 탑재할 컨테이너의 경로입니다.

ARM 템플릿 코드 조각 예제:

{
  "apiVersion": "2022-03-01",
  "type": "Microsoft.App/containerApps",
  "name": "[parameters('containerappName')]",
  "location": "[parameters('location')]",
  "properties": {

    ...

    "template": {
      "revisionSuffix": "myrevision",
      "containers": [
        {
          "name": "main",
          "image": "[parameters('container_image')]",
          "resources": {
            "cpu": 0.5,
            "memory": "1Gi"
          },
          "volumeMounts": [
            {
              "mountPath": "/myempty",
              "volumeName": "myempty"
            }
          ]
        },
        {
          "name": "sidecar",
          "image": "[parameters('sidecar_image')]",
          "resources": {
            "cpu": 0.5,
            "memory": "1Gi"
          },
          "volumeMounts": [
            {
              "mountPath": "/myempty",
              "volumeName": "myempty"
            }
          ]
        }
      ],
      "scale": {
        "minReplicas": 1,
        "maxReplicas": 3
      },
      "volumes": [
        {
          "name": "myempty",
          "storageType": "EmptyDir"
        }
      ]
    }
  }
}

전체 예제는 ARM 템플릿 API 사양을 참조하세요.

복제본 범위 볼륨을 만들고 컨테이너에 탑재하려면 Azure Portal을 사용하여 컨테이너 앱의 새 수정 버전을 배포합니다.

  1. Azure Portal에서 컨테이너 앱으로 이동합니다.

  2. 왼쪽 메뉴에서 수정 버전 관리를 선택합니다.

  3. 새 수정 버전 만들기를 선택합니다.

  4. 볼륨을 탑재할 컨테이너를 선택합니다.

  5. 컨테이너 편집 컨텍스트 창에서 볼륨 탑재 탭을 선택합니다.

  6. 임시 스토리지 섹션에서 다음 정보를 사용하여 새 볼륨을 만듭니다.

    • 볼륨 이름: 임시 볼륨의 이름입니다.
    • 탑재 경로: 볼륨을 탑재할 컨테이너의 절대 경로입니다.
  7. 저장을 선택하여 변경 내용을 저장하고 컨텍스트 창을 종료합니다.

  8. 만들기를 선택하여 새 수정 버전을 만듭니다.

Azure Files 볼륨

Azure Files의 파일 공유를 컨테이너의 볼륨으로 탑재할 수 있습니다.

Azure Files 스토리지의 특징은 다음과 같습니다.

  • 탑재 위치 아래에 작성된 파일이 파일 공유에 유지됩니다.
  • 공유의 파일은 탑재 위치를 통해 사용할 수 있습니다.
  • 여러 컨테이너에서 다른 복제본, 수정 버전 또는 컨테이너 앱에 있는 파일 공유를 포함하여 동일한 파일 공유를 탑재할 수 있습니다.
  • 공유를 탑재하는 모든 컨테이너에서 다른 컨테이너 또는 메서드에서 작성한 파일에 액세스할 수 있습니다.
  • 둘 이상의 Azure Files 볼륨을 단일 컨테이너에 탑재할 수 있습니다.

Azure Files는 SMB 및 NFS 프로토콜을 모두 지원합니다. 두 프로토콜 중 하나를 사용하여 Azure Files 공유를 탑재할 수 있습니다. 환경에서 정의하는 파일 공유는 스토리지 계정의 파일 공유에 사용되는 것과 동일한 프로토콜로 구성되어야 합니다.

참고 항목

Azure Container Apps에서 NFS 공유 탑재에 대한 지원은 미리 보기 상태입니다.

컨테이너에서 Azure Files 스토리지를 사용하도록 설정하려면 다음과 같이 환경과 컨테이너 앱을 설정해야 합니다.

  • Container Apps 환경에서 스토리지 정의를 만듭니다.
  • NFS를 사용하는 경우 사용자 지정 VNet으로 환경을 구성해야 하며 VNet에서 액세스를 허용하도록 스토리지 계정을 구성해야 합니다. 자세한 내용은 Azure Files의 NFS 파일 공유를 참조하세요.
  • 환경이 사용자 지정 VNet으로 구성된 경우 서브넷과 연결된 NSG(네트워크 보안 그룹)에서 포트 445 및 2049를 허용해야 합니다.
  • 수정 버전에서 AzureFile(SMB) 또는 NfsAzureFile(NFS) 형식의 볼륨을 정의합니다.
  • 수정 버전에 있는 하나 이상의 컨테이너에서 볼륨 탑재를 정의합니다.
  • 사용되는 Azure Files 스토리지 계정은 컨테이너 앱의 가상 네트워크에서 액세스할 수 있어야 합니다. 자세한 내용은 가상 네트워크에서 액세스 권한 얻기를 참조하세요.
    • NFS를 사용하는 경우 보안 전송도 사용하지 않도록 설정해야 합니다. 자세한 내용은 Azure Files의 NFS 파일 공유이 자습서NFS Azure Files 공유 만들기 섹션을 참조하세요.

필수 조건

요구 사항 지침
Azure 계정 계정이 없으면 무료 계정을 만듭니다.
Azure Storage 계정 스토리지 계정 만들기
Azure Container Apps 환경 컨테이너 앱 환경을 만듭니다.

구성

Azure CLI를 사용하여 Azure Files 볼륨을 탑재하도록 컨테이너 앱을 구성하는 경우 YAML 정의를 사용하여 컨테이너 앱을 만들거나 업데이트해야 합니다.

SMB 파일 공유 탑재에 대한 단계별 자습서는 Azure Container Apps에서 Azure Files 스토리지 탑재 만들기를 참조하세요.

  1. 스토리지 정의를 Container Apps 환경에 추가합니다.

    az containerapp env storage set --name my-env --resource-group my-group \
        --storage-name mystorage \
        --storage-type AzureFile \
        --azure-file-account-name <STORAGE_ACCOUNT_NAME> \
        --azure-file-account-key <STORAGE_ACCOUNT_KEY> \
        --azure-file-share-name <STORAGE_SHARE_NAME> \
        --access-mode ReadWrite
    

    <STORAGE_ACCOUNT_NAME><STORAGE_ACCOUNT_KEY>를 스토리지 계정의 이름 및 키로 바꿉니다. <STORAGE_SHARE_NAME>을 스토리지 계정의 파일 공유 이름으로 바꿉니다.

    유효한 --access-mode 값은 ReadWriteReadOnly입니다.

  2. 파일 공유를 탑재하도록 기존 컨테이너 앱을 업데이트하려면 앱의 사양을 app.yaml이라는 YAML 파일로 내보냅니다.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  3. 컨테이너 앱 사양을 다음과 같이 변경합니다.

    • volumes 배열을 컨테이너 앱 정의의 template 섹션에 추가하고 볼륨을 정의합니다. volumes 배열이 이미 있는 경우 배열에 새 볼륨을 추가합니다.
      • name은 볼륨에 대한 식별자입니다.
      • storageType의 경우 SMB의 경우 AzureFile을 사용하고 NFS의 경우 NfsAzureFile을 사용합니다. 이 값은 환경에 정의한 스토리지 유형과 일치해야 합니다.
      • storageName의 경우 환경에서 정의한 스토리지의 이름을 사용합니다.
    • Azure Files 스토리지를 탑재하려는 템플릿의 각 컨테이너에 대해 컨테이너 정의의 volumeMounts 배열에 볼륨 탑재를 정의합니다.
      • volumeNamevolumes 배열에 정의된 이름입니다.
      • mountPath는 볼륨을 탑재할 컨테이너의 경로입니다.
    properties:
      managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME>
      configuration:
      template:
        containers:
        - image: <IMAGE_NAME>
          name: my-container
          volumeMounts:
          - volumeName: azure-files-volume
            mountPath: /my-files
        volumes:
        - name: azure-files-volume
          storageType: AzureFile
          storageName: mystorage
    
  4. YAML 파일을 사용하여 컨테이너 앱을 업데이트합니다.

    az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \
        --yaml app.yaml
    

전체 예제는 YAML 사양을 참조하세요.

다음 ARM 템플릿 조각은 Azure Files 공유를 컨테이너 앱 환경에 추가하고 컨테이너 앱에서 사용하는 방법을 보여 줍니다.

  1. storages 자식 리소스를 Container Apps 환경에 추가합니다.

    {
      "type": "Microsoft.App/managedEnvironments",
      "apiVersion": "2022-03-01",
      "name": "[parameters('environment_name')]",
      "location": "[parameters('location')]",
      "properties": {
        "daprAIInstrumentationKey": "[parameters('dapr_ai_instrumentation_key')]",
        "appLogsConfiguration": {
          "destination": "log-analytics",
          "logAnalyticsConfiguration": {
            "customerId": "[parameters('log_analytics_customer_id')]",
            "sharedKey": "[parameters('log_analytics_shared_key')]"
          }
        }
      },
      "resources": [
        {
          "type": "storages",
          "name": "myazurefiles",
          "apiVersion": "2022-03-01",
          "dependsOn": [
            "[resourceId('Microsoft.App/managedEnvironments', parameters('environment_name'))]"
          ],
          "properties": {
            "azureFile": {
              "accountName": "[parameters('storage_account_name')]",
              "accountKey": "[parameters('storage_account_key')]",
              "shareName": "[parameters('storage_share_name')]",
              "accessMode": "ReadWrite"
            }
          }
        }
      ]
    }
    
  2. 볼륨 및 볼륨 탑재를 추가하도록 컨테이너 앱 리소스를 업데이트합니다.

    {
      "apiVersion": "2023-05-01",
      "type": "Microsoft.App/containerApps",
      "name": "[parameters('containerappName')]",
      "location": "[parameters('location')]",
      "properties": {
    
        ...
    
        "template": {
          "revisionSuffix": "myrevision",
          "containers": [
            {
              "name": "main",
              "image": "[parameters('container_image')]",
              "resources": {
                "cpu": 0.5,
                "memory": "1Gi"
              },
              "volumeMounts": [
                {
                  "mountPath": "/myfiles",
                  "volumeName": "azure-files-volume"
                }
              ]
            }
          ],
          "scale": {
            "minReplicas": 1,
            "maxReplicas": 3
          },
          "volumes": [
            {
              "name": "azure-files-volume",
              "storageType": "AzureFile",
              "storageName": "myazurefiles"
            }
          ]
        }
      }
    }
    
    • volumes 배열을 컨테이너 앱 정의의 template 섹션에 추가하고 볼륨을 정의합니다. volumes 배열이 이미 있는 경우 배열에 새 볼륨을 추가합니다.
      • name은 볼륨에 대한 식별자입니다.
      • storageType의 경우 SMB의 경우 AzureFile을 사용하고 NFS의 경우 NfsAzureFile을 사용합니다. 이 값은 환경에 정의한 스토리지 유형과 일치해야 합니다.
      • storageName의 경우 환경에서 정의한 스토리지의 이름을 사용합니다.
    • Azure Files 스토리지를 탑재하려는 템플릿의 각 컨테이너에 대해 컨테이너 정의의 volumeMounts 배열에 볼륨 탑재를 정의합니다.
      • volumeNamevolumes 배열에 정의된 이름입니다.
      • mountPath는 볼륨을 탑재할 컨테이너의 경로입니다.

전체 예제는 ARM 템플릿 API 사양을 참조하세요.

Azure Portal에서 Azure Files 스토리지에 대한 볼륨 탑재를 구성하려면 Container Apps 환경에 파일 공유를 추가한 다음, 새 수정 버전을 만들어 컨테이너 앱에 볼륨 탑재를 추가합니다.

  1. Azure Portal에서 Container Apps 환경으로 이동합니다.

  2. 왼쪽 메뉴에서 Azure Files를 선택합니다.

  3. 추가를 선택합니다.

  4. 파일 공유 추가 바로 가기 메뉴에서 다음 정보를 입력합니다.

    • 이름: 파일 공유의 이름입니다.
    • Storage 계정 이름: 파일 공유를 포함하는 스토리지 계정의 이름입니다.
    • Storage 계정 키: 스토리지 계정의 액세스 키입니다.
    • 파일 공유: 파일 공유의 이름입니다.
    • 액세스 모드: 파일 공유에 대한 액세스 모드입니다. 유효한 값은 "읽기/쓰기" 및 "읽기 전용"입니다.
  5. 추가를 선택하여 컨텍스트 창을 종료합니다.

  6. 저장을 선택하여 변경 내용을 커밋합니다.

  7. 컨테이너 앱으로 이동합니다.

  8. 왼쪽 메뉴에서 수정 버전 관리를 선택합니다.

  9. 새 수정 버전 만들기를 선택합니다.

  10. 볼륨을 탑재할 컨테이너를 선택합니다.

  11. 컨테이너 편집 컨텍스트 창에서 볼륨 탑재 탭을 선택합니다.

  12. 파일 공유 섹션에서 다음 정보를 사용하여 새 볼륨을 만듭니다.

    • 파일 공유 이름: 추가한 파일 공유입니다.
    • 탑재 경로: 볼륨을 탑재할 컨테이너의 절대 경로입니다.
  13. 저장을 선택하여 변경 내용을 저장하고 컨텍스트 창을 종료합니다.

  14. 만들기를 선택하여 새 수정 버전을 만듭니다.