Azure Container Instances'ta Azure dosya paylaşımı bağlama
Azure Container Instances varsayılan olarak durum bilgilerini saklamaz. Kapsayıcı yeniden başlatılır, kilitlenir veya durdurulursa, durumunun tamamı kaybolur. Durum bilgilerinin kapsayıcının ömründen bağımsız olarak kalıcı olmasını sağlamak için dış bir depodan birim bağlamanız gerekir. Bu makalede gösterildiği gibi Azure Container Instances, Azure Dosyalar ile oluşturulmuş bir Azure dosya paylaşımını bağlayabilir. Azure Dosyalar, endüstri standardı Sunucu İleti Bloğu (SMB) protokolü aracılığıyla erişilebilen, Azure Depolama'da barındırılan tam olarak yönetilen dosya paylaşımları sunar. Azure Container Instances ile Azure dosya paylaşımı kullanmak, Azure sanal makineleriyle Azure dosya paylaşımı kullanmaya benzer dosya paylaşım özellikleri sağlar.
Sınırlamalar
- Azure Depolama, yönetilen kimlik kullanılarak dosya paylaşımının SMB bağlamasını desteklemez
- Azure Dosyalar paylaşımlarını yalnızca Linux kapsayıcılarına bağlayabilirsiniz. Genel bakış bölümünde Linux ve Windows kapsayıcı grupları için özellik desteğindeki farklılıklar hakkında daha fazla bilgi edinin.
- Azure dosya paylaşımı birimi bağlama, Linux kapsayıcısının kök olarak çalıştırılmasını gerektirir.
- Azure Dosya paylaşımı birim bağlamaları CIFS desteğiyle sınırlıdır.
Not
Azure Dosyalar paylaşımını bir kapsayıcı örneğine bağlamak, Docker bağlama bağlamasına benzer. Bir paylaşımı, dosyaların veya dizinlerin bulunduğu bir kapsayıcı dizinine bağlarsanız, bağlama dosyaları veya dizinleri gizler ve kapsayıcı çalışırken bunlara erişilemez hale gelir.
Önemli
İnternet'e giden bağlantı temsilci alt asında engellenmişse, temsilci alt ağınızdaki Azure Strorage'a bir hizmet uç noktası eklemeniz gerekir.
Azure dosya paylaşımı oluşturma
Azure Container Instances ile bir Azure dosya paylaşımı kullanmak için önce bunu oluşturmanız gerekir. Dosya paylaşımını ve paylaşımın kendisini barındıracak bir depolama hesabı oluşturmak için aşağıdaki betiği çalıştırın. Depolama hesabı adının genel olarak benzersiz olması gerektiğinden, betik temel dizeye rastgele bir değer ekler.
# 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
Depolama kimlik bilgilerini alma
Bir Azure dosya paylaşımını Azure Container Instances'a birim olarak bağlamak için üç değere sahip olmanız gerekir: depolama hesabı adı, paylaşım adı ve depolama erişim anahtarı.
Depolama hesabı adı - Önceki betiği kullandıysanız, depolama hesabı adı değişkeninde
$ACI_PERS_STORAGE_ACCOUNT_NAME
depolanmıştır. Hesap adını görmek için şunu yazın:echo $ACI_PERS_STORAGE_ACCOUNT_NAME
Paylaşım adı - Bu değer zaten biliniyor (önceki betikte olarak
acishare
tanımlanır)Depolama hesabı anahtarı - Bu değer aşağıdaki komut kullanılarak bulunabilir:
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
Kapsayıcıyı dağıtma ve birimi bağlama - CLI
Azure CLI kullanarak bir Azure dosya paylaşımını bir kapsayıcıya birim olarak bağlamak için az container create ile kapsayıcıyı oluştururken paylaşım ve birim bağlama noktasını belirtin. Önceki adımları izlediyseniz, kapsayıcı oluşturmak için aşağıdaki komutu kullanarak daha önce oluşturduğunuz paylaşımı bağlayabilirsiniz:
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/
Değerin --dns-name-label
, kapsayıcı örneğini oluşturduğunuz Azure bölgesinde benzersiz olması gerekir. Komutu yürütürken bir DNS ad etiketi hata iletisi alırsanız, önceki komuttaki değeri güncelleştirin.
Bağlı birimdeki dosyaları yönetme
Kapsayıcı başlatıldıktan sonra Microsoft aci-hellofiles görüntüsü aracılığıyla dağıtılan basit web uygulamasını kullanarak belirttiğiniz bağlama yolundaki Azure dosya paylaşımında küçük metin dosyaları oluşturabilirsiniz. az container show komutuyla web uygulamasının tam etki alanı adını (FQDN) alın:
az container show --resource-group $ACI_PERS_RESOURCE_GROUP \
--name hellofiles --query ipAddress.fqdn --output tsv
Uygulamayı kullanarak metin kaydettikten sonra Azure portalını veya Microsoft Azure Depolama Gezgini gibi bir aracı kullanarak dosya paylaşımına yazılan dosyayı veya dosyaları alabilir ve inceleyebilirsiniz.
Kapsayıcıyı dağıtma ve birimi bağlama - YAML
Ayrıca bir kapsayıcı grubu dağıtabilir ve Azure CLI ve YAML şablonuyla bir kapsayıcıya birim bağlayabilirsiniz. BIRDEN çok kapsayıcıdan oluşan kapsayıcı gruplarını dağıtırken YAML şablonuyla dağıtma tercih edilen bir yöntemdir.
Aşağıdaki YAML şablonu, görüntüyle aci-hellofiles
oluşturulmuş bir kapsayıcı içeren bir kapsayıcı grubu tanımlar. Kapsayıcı, daha önce birim olarak oluşturulan Azure dosya paylaşımı acishare'i bağlar. Belirtildiği yerde, dosya paylaşımını barındıran depolama hesabının adını ve depolama anahtarını girin.
CLI örneğinde olduğu gibi, değerin dnsNameLabel
kapsayıcı örneğini oluşturduğunuz Azure bölgesinde benzersiz olması gerekir. Gerekirse YAML dosyasındaki değeri güncelleştirin.
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 şablonuyla dağıtmak için, önceki YAML'yi adlı deploy-aci.yaml
bir dosyaya kaydedin, ardından az container create komutunu parametresiyle yürütür--file
:
# Deploy with YAML template
az container create --resource-group myResourceGroup --file deploy-aci.yaml
Kapsayıcıyı dağıtma ve birimi bağlama - Resource Manager
CLI ve YAML dağıtımına ek olarak, Azure Resource Manager şablonu kullanarak bir kapsayıcı grubu dağıtabilir ve bir kapsayıcıya birim bağlayabilirsiniz.
İlk olarak, şablonun volumes
kapsayıcı grubu properties
bölümündeki diziyi doldurun.
Ardından, birimi bağlamak istediğiniz her kapsayıcı için kapsayıcı tanımının properties
bölümündeki diziyi doldurunvolumeMounts
.
Aşağıdaki Resource Manager şablonu, görüntüyle aci-hellofiles
oluşturulmuş bir kapsayıcı içeren bir kapsayıcı grubu tanımlar. Kapsayıcı, daha önce birim olarak oluşturulan Azure dosya paylaşımı acishare'i bağlar. Belirtildiği yerde, dosya paylaşımını barındıran depolama hesabının adını ve depolama anahtarını girin.
Önceki örneklerde olduğu gibi, değerin dnsNameLabel
kapsayıcı örneğini oluşturduğunuz Azure bölgesinde benzersiz olması gerekir. Gerekirse şablondaki değeri güncelleştirin.
{
"$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 şablonuyla dağıtmak için, önceki JSON dosyasını adlı deploy-aci.json
bir dosyaya kaydedin ve ardından az deployment group create komutunu parametresiyle yürütebilirsiniz--template-file
:
# Deploy with Resource Manager template
az deployment group create --resource-group myResourceGroup --template-file deploy-aci.json
Birden çok birimi bağlama
Bir kapsayıcı örneğine birden çok birim bağlamak için Azure Resource Manager şablonu, YAML dosyası veya başka bir program yöntemi kullanarak dağıtmanız gerekir. Şablon veya YAML dosyası kullanmak için paylaşım ayrıntılarını sağlayın ve dosyanın bölümündeki diziyi volumes
properties
doldurarak birimleri tanımlayın.
Örneğin, myStorageAccount depolama hesabında share1 ve share2 adlı iki Azure Dosyalar paylaşımı oluşturduysanız, volumes
Resource Manager şablonundaki dizi aşağıdakine benzer şekilde görünür:
"volumes": [{
"name": "myvolume1",
"azureFile": {
"shareName": "share1",
"storageAccountName": "myStorageAccount",
"storageAccountKey": "<storage-account-key>"
}
},
{
"name": "myvolume2",
"azureFile": {
"shareName": "share2",
"storageAccountName": "myStorageAccount",
"storageAccountKey": "<storage-account-key>"
}
}]
Ardından, birimleri bağlamak istediğiniz kapsayıcı grubundaki her kapsayıcı için kapsayıcı tanımının properties
bölümündeki diziyi doldurunvolumeMounts
. Örneğin, bu, daha önce tanımlanmış olan myvolume1 ve myvolume2 birimlerini bağlar:
"volumeMounts": [{
"name": "myvolume1",
"mountPath": "/mnt/share1/"
},
{
"name": "myvolume2",
"mountPath": "/mnt/share2/"
}]
Sonraki adımlar
Azure Container Instances'ta diğer birim türlerini bağlamayı öğrenin: