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ırsa, kilitlenirse veya durdurulduğunda, tüm durumu kaybedilir. 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ından bağlanabilir. Azure dosyaları, Azure depolama 'da barındırılan, sektör standart sunucu Ileti bloğu (SMB) protokolü aracılığıyla erişilebilen, tam olarak yönetilen dosya paylaşımları sunar. Azure Container Instances ile bir Azure dosya paylaşımının kullanılması, Azure sanal makinelerle Azure dosya paylaşımı kullanmaya benzer dosya paylaşımı özellikleri sağlar.

Sınırlamalar

  • Azure dosya paylaşımlarını yalnızca Linux kapsayıcılarına bağlayabilirsiniz. Genel bakıştaLinux ve Windows kapsayıcı grupları için özellik desteğinin farkları hakkında daha fazla bilgi için bkz..
  • Azure dosya paylaşma birimi bağlama, Linux kapsayıcısı 'nın kök olarak çalıştırılmasını gerektirir.
  • Azure dosya paylaşma birimi bağlama, CIFS desteğiyle sınırlıdır.

Not

Bir Azure dosya paylaşımının bir kapsayıcı örneğine bağlanması, Docker bind bağlamaile benzerdir. Dosya veya dizinlerin bulunduğu bir kapsayıcı dizinine bir paylaşılan dizin bağlarsanız, bağlama dosya ve dizinleri gizler, bu da kapsayıcı çalışırken erişilemez hale gelir.

Önemli

Kapsayıcı gruplarını bir Azure sanal ağına dağıtıyorsanız, Azure depolama hesabınıza 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ın ve paylaşımın kendisini barındırmak üzere 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şkende depolanmıştı $ACI_PERS_STORAGE_ACCOUNT_NAME . Hesap adını görmek için şunu yazın:

    echo $ACI_PERS_STORAGE_ACCOUNT_NAME
    
  • Paylaşma adı -bu değer zaten biliniyor ( acishare önceki betikte olarak 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ı dağıtma ve bağlama birimi-CLı

Azure CLı kullanarak bir Azure dosya paylaşımının bir kapsayıcıya birim olarak bağlanması için az Container Createile kapsayıcıyı oluştururken Share ve Volume bağlama noktasını belirtin. Önceki adımları izlediyseniz, bir kapsayıcı oluşturmak için aşağıdaki komutu kullanarak daha önce oluşturduğunuz paylaşımdan bağlama yapabilirsiniz:

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-labelDeğer, kapsayıcı örneğini oluşturduğunuz Azure bölgesi içinde benzersiz olmalıdır. Komutu çalıştırdığınızda bir DNS adı etiketi alırsanız, Yukarıdaki komutta değeri güncelleştirin.

Bağlı birimdeki dosyaları yönetme

Kapsayıcı başlatıldıktan sonra, belirttiğiniz bağlama yolundaki Azure dosya paylaşımında küçük metin dosyaları oluşturmak için Microsoft aci-hellofshare Image aracılığıyla dağıtılan basit Web uygulamasını kullanabilirsiniz. Web uygulamasının tam etki alanı adını (FQDN) az Container Show komutuyla edinin:

az container show --resource-group $ACI_PERS_RESOURCE_GROUP \
  --name hellofiles --query ipAddress.fqdn --output tsv

Uygulamayı kullanarak metin kaydettikten sonra, dosyayı veya dosya paylaşımında yazılmış dosyaları almak ve denetlemek için Microsoft Azure Depolama Gezgini gibi bir aracı Azure Portal kullanabilirsiniz.

Kapsayıcı dağıtma ve bağlama birimi-YAML

Ayrıca, bir kapsayıcı grubu dağıtabilir ve bir birimi Azure CLı ve YAML şablonuylabir kapsayıcıya bağlayabilirsiniz. YAML şablonuna göre dağıtmak, birden çok kapsayıcıdan oluşan kapsayıcı gruplarını dağıtmada tercih edilen bir yöntemdir.

Aşağıdaki YAML şablonu, görüntüyle oluşturulmuş bir kapsayıcı grubunu tanımlar aci-hellofiles . Azure dosya paylaşımının bulunduğu kapsayıcı, daha önce bir birim olarak oluşturulur. Burada, dosya paylaşımının barındırmasını barındıran depolama hesabı için ad ve depolama anahtarı ' nı girin.

CLı örneğinde olduğu gibi, dnsNameLabel değer kapsayıcı örneğini oluşturduğunuz Azure bölgesi içinde benzersiz olmalıdır. 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ı bir dosyaya kaydedin deploy-aci.yaml ve ardından parametresiyle az Container Create komutunu yürütün --file :

# Deploy with YAML template
az container create --resource-group myResourceGroup --file deploy-aci.yaml

Kapsayıcı dağıtma ve birim bağlama-Kaynak Yöneticisi

CLı ve YAML dağıtımına ek olarak, bir kapsayıcı grubu dağıtabilir ve bir Azure Kaynak Yöneticisi şablonukullanarak bir kapsayıcıya bir birim bağlayabilirsiniz.

Önce, volumes diziyi şablonun kapsayıcı grubu properties bölümünde doldurun.

Ardından, birimi bağlamak istediğiniz her bir kapsayıcı için, volumeMounts diziyi properties kapsayıcı tanımının bölümünde doldurun.

Aşağıdaki Kaynak Yöneticisi şablonu, görüntüyle oluşturulmuş bir kapsayıcı grubunu tanımlar aci-hellofiles . Azure dosya paylaşımının bulunduğu kapsayıcı, daha önce bir birim olarak oluşturulur. Burada, dosya paylaşımının barındırmasını barındıran depolama hesabı için ad ve depolama anahtarı ' nı girin.

Önceki örneklerde olduğu gibi, dnsNameLabel değerin kapsayıcı örneğini oluşturduğunuz Azure bölgesi içinde 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>"
            }
          }
        ]
      }
    }
  ]
}

Kaynak Yöneticisi şablonuyla dağıtmak için, önceki JSON 'ı adlı bir dosyaya kaydedin deploy-aci.json , ardından şu parametreyle az Deployment Group Create komutunu yürütün --template-file :

# Deploy with Resource Manager template
az deployment group create --resource-group myResourceGroup --template-file deploy-aci.json

Birden çok birim bağlama

Bir kapsayıcı örneğinde birden fazla birimi bağlamak için, bir Azure Resource Manager şablonu, YAML dosyası veya başka bir programlama yöntemi kullanarak dağıtmanız gerekir. Bir şablon veya YAML dosyası kullanmak için, volumes dosyanın bölümündeki diziyi doldurarak paylaşma ayrıntılarını sağlayın ve birimleri tanımlayın properties .

Örneğin, depolama hesabı Mystorageaccount içinde Share1 ve Share2 adlı iki Azure dosya paylaşımı oluşturduysanız, volumes Kaynak Yöneticisi şablondaki 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>"
  }
}]

Sonra, kapsayıcı grubundaki birimleri bağlamak istediğiniz her bir kapsayıcı için, volumeMounts diziyi properties kapsayıcı tanımının bölümünde doldurun. Örneğin, bu iki birimi bağlar, daha önce tanımlanan myvolume1 ve myvolume2.

"volumeMounts": [{
  "name": "myvolume1",
  "mountPath": "/mnt/share1/"
},
{
  "name": "myvolume2",
  "mountPath": "/mnt/share2/"
}]

Sonraki adımlar

Azure Container Instances diğer birim türlerini nasıl bağlayacağınızı öğrenin: