Azure Container Instances에서 Azure 파일 공유 탑재
기본적으로 Azure Container Instances는 비저장 상태입니다. 컨테이너가 다시 시작되거나, 충돌하거나 또는 중지되면 모든 상태가 손실됩니다. 컨테이너 수명이 지난 후에도 상태를 유지하려면 외부 저장소의 볼륨을 탑재해야 합니다. 이 문서에 표시된 대로 Azure Container Instances는 Azure Files로 만든 Azure 파일 공유를 탑재할 수 있습니다. Azure Files는 업계 표준 SMB(서버 메시지 블록) 프로토콜을 통해 액세스 할 수 있는 Azure Storage에서 호스팅되는 완전 관리형 파일 공유를 제공합니다. Azure Container Instances에서 Azure 파일 공유를 사용하면 Azure Virtual Machines에서 Azure 파일 공유를 사용하는 것과 유사한 파일 공유 기능을 제공합니다.
제한 사항
- Azure Storage는 관리 ID를 사용한 파일 공유의 SMB 탑재를 지원하지 않습니다.
- Azure Files 공유는 Linux 컨테이너에만 탑재할 수 있습니다. 개요에서 Linux 및 Windows 컨테이너 그룹에 대한 기능 지원의 차이점에 대해 자세히 검토합니다.
- Azure 파일 공유 볼륨을 탑재하려면 Linux 컨테이너를 루트로 실행해야 합니다.
- Azure 파일 공유 볼륨 탑재는 CIFS 지원으로 제한됩니다.
참고 항목
Azure Files 공유를 컨테이너 인스턴스에 탑재하는 것은 Docker의 바인드 탑재와 유사합니다. 파일 또는 디렉터리가 있는 컨테이너 디렉터리에 공유를 탑재하는 경우 탑재가 파일 또는 디렉터리를 가려 컨테이너가 실행되는 동안 액세스할 수 없도록 합니다.
Important
위임된 서브넷에서 인터넷에 대한 아웃바운드 연결이 차단된 경우 위임된 서브넷의 Azure Strorage에 서비스 엔드포인트를 추가해야 합니다.
Azure 파일 공유 만들기
Azure Container Instances에서 Azure 파일 공유를 사용하려면 먼저 파일 공유를 만들어야 합니다. 다음 스크립트를 실행하여 파일 공유를 호스팅할 스토리지 계정과 파일 공유 자체를 만듭니다. 스토리지 계정 이름은 전역적으로 고유해야 하므로 이 스크립트는 기준 문자열에 임의 값을 추가합니다.
# Change these four parameters as needed
ACI_PERS_RESOURCE_GROUP=myResourceGroup
ACI_PERS_STORAGE_ACCOUNT_NAME=mystorageaccount$RANDOM
ACI_PERS_LOCATION=eastus
ACI_PERS_SHARE_NAME=acishare
# Create the storage account with the parameters
az storage account create \
--resource-group $ACI_PERS_RESOURCE_GROUP \
--name $ACI_PERS_STORAGE_ACCOUNT_NAME \
--location $ACI_PERS_LOCATION \
--sku Standard_LRS
# Create the file share
az storage share create \
--name $ACI_PERS_SHARE_NAME \
--account-name $ACI_PERS_STORAGE_ACCOUNT_NAME
스토리지 자격 증명 가져오기
Azure Container Instances의 볼륨으로 Azure 파일 공유를 탑재하려면 스토리지 계정 이름, 공유 이름, 스토리지 액세스 키의 세 가지 값이 필요합니다.
스토리지 계정 이름 - 이전 스크립트를 사용한 경우 스토리지 계정 이름이
$ACI_PERS_STORAGE_ACCOUNT_NAME
변수에 저장되었습니다. 계정 이름을 확인하려면 다음을 입력하세요.echo $ACI_PERS_STORAGE_ACCOUNT_NAME
공유 이름 - 이 값은 이미 알려져 있음(이전 스크립트에서
acishare
으로 정의됨)스토리지 계정 키 - 이 값은 다음 명령을 사용하여 확인할 수 있음:
STORAGE_KEY=$(az storage account keys list --resource-group $ACI_PERS_RESOURCE_GROUP --account-name $ACI_PERS_STORAGE_ACCOUNT_NAME --query "[0].value" --output tsv) echo $STORAGE_KEY
컨테이너 및 탑재 볼륨 배포 - CLI
Azure CLI를 사용하여 Azure 파일 공유를 컨테이너의 볼륨으로 탑재하려면 az container create를 사용하여 컨테이너를 만들 때 공유 및 볼륨 탑재 지점을 지정합니다. 이전 단계를 수행한 경우 다음 명령으로 이전에 만든 공유를 탑재하여 컨테이너를 만들 수 있습니다:
az container create \
--resource-group $ACI_PERS_RESOURCE_GROUP \
--name hellofiles \
--image mcr.microsoft.com/azuredocs/aci-hellofiles \
--dns-name-label aci-demo \
--ports 80 \
--azure-file-volume-account-name $ACI_PERS_STORAGE_ACCOUNT_NAME \
--azure-file-volume-account-key $STORAGE_KEY \
--azure-file-volume-share-name $ACI_PERS_SHARE_NAME \
--azure-file-volume-mount-path /aci/logs/
--dns-name-label
값은 컨테이너 인스턴스를 만드는 Azure 지역 내에서 고유해야 합니다. 명령을 실행한 결과 DNS 이름 레이블 오류 메시지가 표시되는 경우에는 이전 명령의 값을 업데이트합니다.
탑재된 볼륨의 파일 관리
컨테이너가 시작되면 Microsoft aci-hellofiles 이미지를 통해 배포된 웹앱을 사용하여 지정한 탑재 경로의 Azure 파일 공유에 작은 텍스트 파일을 만들 수 있습니다. 아래와 같이 az container show 명령을 사용하여 웹앱의 FQDN(정규화된 도메인 이름)을 확인합니다.
az container show --resource-group $ACI_PERS_RESOURCE_GROUP \
--name hellofiles --query ipAddress.fqdn --output tsv
앱을 사용하여 텍스트를 저장한 후 Azure Portal 또는 Microsoft Azure Storage Explorer와 같은 도구를 사용하여 파일 공유에 기록된 파일을 검색하고 검사할 수 있습니다.
컨테이너 및 탑재 볼륨 배포 - YAML
Azure CLI 및 YAML 템플릿을 사용하여 컨테이너 그룹을 배포하고 컨테이너에 볼륨을 탑재할 수도 있습니다. 여러 컨테이너로 구성된 컨테이너 그룹을 배포할 때에는 YAML 템플릿을 사용하여 배포하는 것이 좋습니다.
다음 YAML 템플릿은 aci-hellofiles
이미지로 생성된 하나의 컨테이너로 컨테이너 그룹을 정의합니다. 컨테이너는 이전에 생성된 Azure 파일 공유 acishare를 볼륨으로 탑재합니다. 표시된 곳에 파일 공유를 호스팅하는 스토리지 계정의 이름과 스토리지 키를 입력합니다.
CLI 예제에서와 같이 dnsNameLabel
값은 컨테이너 인스턴스를 만드는 Azure 지역에서 고유해야 합니다. 필요한 경우 YAML 파일 값을 업데이트합니다.
apiVersion: '2019-12-01'
location: eastus
name: file-share-demo
properties:
containers:
- name: hellofiles
properties:
environmentVariables: []
image: mcr.microsoft.com/azuredocs/aci-hellofiles
ports:
- port: 80
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
volumeMounts:
- mountPath: /aci/logs/
name: filesharevolume
osType: Linux
restartPolicy: Always
ipAddress:
type: Public
ports:
- port: 80
dnsNameLabel: aci-demo
volumes:
- name: filesharevolume
azureFile:
sharename: acishare
storageAccountName: <Storage account name>
storageAccountKey: <Storage account key>
tags: {}
type: Microsoft.ContainerInstance/containerGroups
YAML 템플릿을 사용하여 배포하려면 위의 YAML을 deploy-aci.yaml
파일에 저장한 다음, --file
매개 변수를 사용하여 az container create 명령을 실행해야 합니다.
# Deploy with YAML template
az container create --resource-group myResourceGroup --file deploy-aci.yaml
컨테이너 및 탑재 볼륨 배포 - 리소스 관리자
CLI 및 YAML 배포 외에도 Azure Resource Manager 템플릿을 사용하여 컨테이너 그룹을 배포하고 컨테이너에 볼륨을 탑재할 수 있습니다.
먼저 템플릿의 volumes
컨테이너 그룹의 배열properties
섹션을 채웁니다.
그런 다음 볼륨을 탑재하려는 각 컨테이너에 대해 컨테이너 정의의 properties
섹션에 volumeMounts
배열을 채웁니다.
다음 Resource Manager 템플릿은 aci-hellofiles
이미지로 만든 하나의 컨테이너로 컨테이너 그룹을 정의합니다. 컨테이너는 이전에 생성된 Azure 파일 공유 acishare를 볼륨으로 탑재합니다. 표시된 곳에 파일 공유를 호스팅하는 스토리지 계정의 이름과 스토리지 키를 입력합니다.
이전 예제에서와 같이 dnsNameLabel
값은 컨테이너 인스턴스를 만드는 Azure 지역에서 고유해야 합니다. 필요한 경우 템플릿의 값을 업데이트합니다.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"container1name": "hellofiles",
"container1image": "mcr.microsoft.com/azuredocs/aci-hellofiles"
},
"resources": [
{
"name": "file-share-demo",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
}
],
"volumeMounts": [
{
"name": "filesharevolume",
"mountPath": "/aci/logs"
}
]
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
}
],
"dnsNameLabel": "aci-demo"
},
"volumes": [
{
"name": "filesharevolume",
"azureFile": {
"shareName": "acishare",
"storageAccountName": "<Storage account name>",
"storageAccountKey": "<Storage account key>"
}
}
]
}
}
]
}
Resource Manager 템플릿을 사용하여 배포하려면 위의 JSON을 deploy-aci.json
파일에 저장한 다음, --template-file
매개 변수를 사용하여 az deployment group create 명령을 실행합니다:
# Deploy with Resource Manager template
az deployment group create --resource-group myResourceGroup --template-file deploy-aci.json
여러 볼륨 탑재
컨테이너 인스턴스에 여러 볼륨을 탑재하려면 Azure Resource Manager 템플릿, YAML 파일 또는 다른 프로그래밍 방식을 사용하여 배포해야 합니다. 템플릿 또는 YAML 파일을 사용하려면 먼저 공유 세부 정보를 제공하고 파일의 properties
섹션에서 volumes
배열을 채워서 볼륨을 정의합니다.
예를 들어 스토리지 계정 myStorageAccount에서 share1과 share2라는 두 개의 Azure Files 공유를 만든 경우 Resource Manager 템플릿의 volumes
배열은 다음 예제와 유사하게 표시됩니다.
"volumes": [{
"name": "myvolume1",
"azureFile": {
"shareName": "share1",
"storageAccountName": "myStorageAccount",
"storageAccountKey": "<storage-account-key>"
}
},
{
"name": "myvolume2",
"azureFile": {
"shareName": "share2",
"storageAccountName": "myStorageAccount",
"storageAccountKey": "<storage-account-key>"
}
}]
다음으로 볼륨을 탑재하려는 컨테이너 그룹에 있는 각 컨테이너의 경우 컨테이너 정의의 properties
섹션에서 volumeMounts
배열을 채웁니다. 예를 들어 다음은 이전에 정의한 myvolume1 및 myvolume2라는 두 개의 볼륨을 탑재합니다.
"volumeMounts": [{
"name": "myvolume1",
"mountPath": "/mnt/share1/"
},
{
"name": "myvolume2",
"mountPath": "/mnt/share2/"
}]
다음 단계
Azure Container Instances에서 다른 볼륨 유형을 탑재하는 방법을 알아봅니다.