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.yamlbir 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.jsonbir 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: