Azure Kubernetes hizmetinde (AKS) Azure diskleriyle kalıcı bir birimi dinamik olarak oluşturma ve kullanmaDynamically create and use a persistent volume with Azure disks in Azure Kubernetes Service (AKS)

Kalıcı bir birim, Kubernetes pods ile kullanılmak üzere sağlanmış bir depolama parçasını temsil eder.A persistent volume represents a piece of storage that has been provisioned for use with Kubernetes pods. Kalıcı bir birim bir veya daha fazla sayıda pods tarafından kullanılabilir ve dinamik veya statik olarak sağlanabilir.A persistent volume can be used by one or many pods, and can be dynamically or statically provisioned. Bu makalede, Azure Kubernetes Service (AKS) kümesinde tek bir pod tarafından kullanılmak üzere Azure diskleriyle kalıcı birimleri dinamik olarak oluşturma konusu gösterilmektedir.This article shows you how to dynamically create persistent volumes with Azure disks for use by a single pod in an Azure Kubernetes Service (AKS) cluster.

Not

Bir Azure diski yalnızca, AKS içinde yalnızca tek bir pod için kullanılabilir hale getiren bir Readwriteonce erişim modu türü ile bağlanabilir.An Azure disk can only be mounted with Access mode type ReadWriteOnce, which makes it available to only a single pod in AKS. Kalıcı bir birimi birden çok birimde paylaşmanız gerekiyorsa Azure dosyalarınıkullanın.If you need to share a persistent volume across multiple pods, use Azure Files.

Kubernetes birimleri hakkında daha fazla bilgi için bkz. AKS 'de uygulamalar Için depolama seçenekleri.For more information on Kubernetes volumes, see Storage options for applications in AKS.

Başlamadan önceBefore you begin

Bu makalede, mevcut bir AKS kümeniz olduğunu varsaymaktadır.This article assumes that you have an existing AKS cluster. AKS kümesine ihtiyacınız varsa bkz. Azure CLI kullanarak aks hızlı başlangıç veya Azure Portal kullanımı.If you need an AKS cluster, see the AKS quickstart using the Azure CLI or using the Azure portal.

Ayrıca Azure CLı sürüm 2.0.59 veya üzeri yüklü ve yapılandırılmış olmalıdır.You also need the Azure CLI version 2.0.59 or later installed and configured.  az --versionSürümü bulmak için ' i çalıştırın.Run az --version to find the version. Yüklemeniz veya yükseltmeniz gerekirse bkz. Azure CLI 'Yı yüklemek.If you need to install or upgrade, see Install Azure CLI.

Yerleşik depolama sınıflarıBuilt-in storage classes

Depolama sınıfı, bir depolama biriminin kalıcı bir birimle dinamik olarak nasıl oluşturulduğunu tanımlamak için kullanılır.A storage class is used to define how a unit of storage is dynamically created with a persistent volume. Kubernetes Depolama sınıfları hakkında daha fazla bilgi için bkz. Kubernetes Depolama sınıfları.For more information on Kubernetes storage classes, see Kubernetes Storage Classes.

Her bir AKS kümesi, Azure diskleriyle çalışmak üzere yapılandırılmış dört adet önceden oluşturulmuş depolama sınıfı içerir:Each AKS cluster includes four pre-created storage classes, two of them configured to work with Azure disks:

  • Varsayılan depolama sınıfı standart bir SSD Azure diski sağlar.The default storage class provisions a standard SSD Azure disk.
    • Standart depolama, standart SSD 'Ler tarafından desteklenir ve hala güvenilir performans sağlarken uygun maliyetli depolama sunar.Standard storage is backed by Standard SSDs and delivers cost-effective storage while still delivering reliable performance.
  • Yönetilen-Premium depolama sınıfı, Premium bir Azure diski sağlar.The managed-premium storage class provisions a premium Azure disk.
    • Premium diskler SSD tabanlı, yüksek performanslı ve düşük gecikme süreli disk ile desteklenir.Premium disks are backed by SSD-based high-performance, low-latency disk. Üretim iş yükü çalıştıran VM'ler için son derece uygundur.Perfect for VMs running production workload. Kümenizdeki AKS düğümleri Premium Depolama kullanıyorsa, yönetilen-Premium sınıfını seçin.If the AKS nodes in your cluster use premium storage, select the managed-premium class.

Varsayılan depolama sınıflarından birini kullanırsanız, depolama sınıfı oluşturulduktan sonra birim boyutunu güncelleştiremezsiniz.If you use one of the default storage classes, you can't update the volume size after the storage class is created. Bir depolama sınıfı oluşturulduktan sonra birim boyutunu güncelleştirebilmek için, satırı allowVolumeExpansion: true varsayılan depolama sınıflarından birine ekleyin veya size ait özel depolama sınıfınızı oluşturabilirsiniz.To be able to update the volume size after a storage class is created, add the line allowVolumeExpansion: true to one of the default storage classes, or you can create you own custom storage class. Bir PVC 'nin boyutunu azaltmak için (veri kaybını engellemek için) desteklenmediğini unutmayın.Note that it's not supported to reduce the size of a PVC (to prevent data loss). Var olan bir depolama sınıfını komutunu kullanarak düzenleyebilirsiniz kubectl edit sc .You can edit an existing storage class by using the kubectl edit sc command.

Örneğin, 4 TiB boyutundaki bir disk kullanmak istiyorsanız, cachingmode: None disk önbelleği 4 TİB ve daha büyük diskler için desteklenmediğindentanımlayan bir depolama sınıfı oluşturmanız gerekir.For example, if you want to use a disk of size 4 TiB, you must create a storage class that defines cachingmode: None because disk caching isn't supported for disks 4 TiB and larger.

Depolama sınıfları ve kendi depolama sınıfınızı oluşturma hakkında daha fazla bilgi için bkz. AKS 'de uygulamalar Için depolama seçenekleri.For more information about storage classes and creating your own storage class, see Storage options for applications in AKS.

Önceden oluşturulmuş depolama sınıflarını görmek için kubectl Get SC komutunu kullanın.Use the kubectl get sc command to see the pre-created storage classes. Aşağıdaki örnek, bir AKS kümesi içinde kullanılabilir olan önceden oluşturma depolama sınıflarını gösterir:The following example shows the pre-create storage classes available within an AKS cluster:

$ kubectl get sc

NAME                PROVISIONER                AGE
default (default)   kubernetes.io/azure-disk   1h
managed-premium     kubernetes.io/azure-disk   1h

Not

Kalıcı birim talepleri GiB 'de belirtilmiştir ancak Azure yönetilen diskler belirli bir boyut için SKU tarafından faturalandırılır.Persistent volume claims are specified in GiB but Azure managed disks are billed by SKU for a specific size. Bu SKU 'Lar, S4 veya P4 diskleri için 32GiB 'den S80 veya P80 diskleri için (önizlemede) 32 TİB 'ye kadar uzanır.These SKUs range from 32GiB for S4 or P4 disks to 32TiB for S80 or P80 disks (in preview). Premium yönetilen bir diskin verimlilik ve ıOPS performansı, AKS kümesindeki düğümlerin hem SKU hem de örnek boyutuna bağlıdır.The throughput and IOPS performance of a Premium managed disk depends on the both the SKU and the instance size of the nodes in the AKS cluster. Daha fazla bilgi için bkz. yönetilen disklerin fiyatlandırma ve performansı.For more information, see Pricing and Performance of Managed Disks.

Kalıcı bir birim talebi oluşturunCreate a persistent volume claim

Kalıcı bir birim talebi (PVC), depolama sınıfına göre depolamayı otomatik olarak sağlamak için kullanılır.A persistent volume claim (PVC) is used to automatically provision storage based on a storage class. Bu durumda, bir PVC, standart veya Premium bir Azure yönetilen diski oluşturmak için önceden oluşturulmuş depolama sınıflarından birini kullanabilir.In this case, a PVC can use one of the pre-created storage classes to create a standard or premium Azure managed disk.

Adlı bir dosya oluşturun azure-premium.yaml ve aşağıdaki bildirime kopyalayın.Create a file named azure-premium.yaml, and copy in the following manifest. Talep, azure-managed-disk boyutu 5 GB olan ve readwriteonce erişimi olan adlı bir disk ister.The claim requests a disk named azure-managed-disk that is 5GB in size with ReadWriteOnce access. Yönetilen-Premium depolama sınıfı, depolama sınıfı olarak belirtilir.The managed-premium storage class is specified as the storage class.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: azure-managed-disk
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: managed-premium
  resources:
    requests:
      storage: 5Gi

İpucu

Standart depolama kullanan bir disk oluşturmak için, storageClassName: default yönetilen-Premiumyerine kullanın.To create a disk that uses standard storage, use storageClassName: default rather than managed-premium.

Kubectl Apply komutuyla kalıcı birim talebi oluşturun ve Azure-Premium. YAML dosyanızı belirtin:Create the persistent volume claim with the kubectl apply command and specify your azure-premium.yaml file:

$ kubectl apply -f azure-premium.yaml

persistentvolumeclaim/azure-managed-disk created

Kalıcı birimi kullanUse the persistent volume

Kalıcı birim talebi oluşturulduktan ve disk başarıyla sağlandıktan sonra, diske erişimi olan bir pod oluşturulabilir.Once the persistent volume claim has been created and the disk successfully provisioned, a pod can be created with access to the disk. Aşağıdaki bildirim, Azure diskini yolda bağlamak için Azure-Managed-disk adlı kalıcı birim talebini kullanan temel bir NGINX Pod oluşturur /mnt/azure .The following manifest creates a basic NGINX pod that uses the persistent volume claim named azure-managed-disk to mount the Azure disk at the path /mnt/azure. Windows Server kapsayıcıları için, Windows yol kuralını kullanarak ":" gibi bir bağlamayolu belirtin.For Windows Server containers, specify a mountPath using the Windows path convention, such as 'D:'.

Adlı bir dosya oluşturun azure-pvc-disk.yaml ve aşağıdaki bildirime kopyalayın.Create a file named azure-pvc-disk.yaml, and copy in the following manifest.

kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: nginx:1.15.5
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 250m
        memory: 256Mi
    volumeMounts:
    - mountPath: "/mnt/azure"
      name: volume
  volumes:
    - name: volume
      persistentVolumeClaim:
        claimName: azure-managed-disk

Aşağıdaki örnekte gösterildiği gibi, kubectl Apply komutuyla Pod öğesini oluşturun:Create the pod with the kubectl apply command, as shown in the following example:

$ kubectl apply -f azure-pvc-disk.yaml

pod/mypod created

Artık, Azure diskinizin dizine bağlanmış bir pod çalışır durumda /mnt/azure .You now have a running pod with your Azure disk mounted in the /mnt/azure directory. Bu yapılandırma kubectl describe pod mypod , aşağıdaki sıkıştırılmış örnekte gösterildiği gibi Pod 'niz aracılığıyla incelenirken görülebilir:This configuration can be seen when inspecting your pod via kubectl describe pod mypod, as shown in the following condensed example:

$ kubectl describe pod mypod

[...]
Volumes:
  volume:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  azure-managed-disk
    ReadOnly:   false
  default-token-smm2n:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-smm2n
    Optional:    false
[...]
Events:
  Type    Reason                 Age   From                               Message
  ----    ------                 ----  ----                               -------
  Normal  Scheduled              2m    default-scheduler                  Successfully assigned mypod to aks-nodepool1-79590246-0
  Normal  SuccessfulMountVolume  2m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "default-token-smm2n"
  Normal  SuccessfulMountVolume  1m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "pvc-faf0f176-8b8d-11e8-923b-deb28c58d242"
[...]

Ultra diskler kullanmaUse Ultra Disks

Ultra disk 'ten yararlanmak için bkz. Azure Kubernetes Service (AKS) üzerinde Ultra diskler kullanma.To leverage ultra disk see Use Ultra Disks on Azure Kubernetes Service (AKS).

Kalıcı bir birimi yedeklemeBack up a persistent volume

Kalıcı biriminizdeki verileri yedeklemek için birim için yönetilen diskin anlık görüntüsünü alın.To back up the data in your persistent volume, take a snapshot of the managed disk for the volume. Daha sonra bu anlık görüntüyü kullanarak geri yüklenen bir disk oluşturabilir ve verileri geri yükleme yöntemi olarak Pod 'ye iliştirebilirsiniz.You can then use this snapshot to create a restored disk and attach to pods as a means of restoring the data.

İlk kubectl get pvc olarak, Azure-Managed-DISKadlı PVC için gibi, komutuyla birim adını alın:First, get the volume name with the kubectl get pvc command, such as for the PVC named azure-managed-disk:

$ kubectl get pvc azure-managed-disk

NAME                 STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
azure-managed-disk   Bound     pvc-faf0f176-8b8d-11e8-923b-deb28c58d242   5Gi        RWO            managed-premium   3m

Bu birim adı, temel alınan Azure disk adını oluşturur.This volume name forms the underlying Azure disk name. Disk KIMLIĞI ' ni az disk List ile sorgulayın ve aşağıdaki örnekte gösterildiği gıbı, PVC birimi adınızı sağlayın:Query for the disk ID with az disk list and provide your PVC volume name, as shown in the following example:

$ az disk list --query '[].id | [?contains(@,`pvc-faf0f176-8b8d-11e8-923b-deb28c58d242`)]' -o tsv

/subscriptions/<guid>/resourceGroups/MC_MYRESOURCEGROUP_MYAKSCLUSTER_EASTUS/providers/MicrosoftCompute/disks/kubernetes-dynamic-pvc-faf0f176-8b8d-11e8-923b-deb28c58d242

Az Snapshot Createkomutuyla bir anlık görüntü diski oluşturmak IÇIN disk kimliğini kullanın.Use the disk ID to create a snapshot disk with az snapshot create. Aşağıdaki örnek, AKS kümesiyle aynı kaynak grubunda Pvcsnapshot adlı bir anlık görüntü oluşturur (MC_myResourceGroup_myAKSCluster_eastus).The following example creates a snapshot named pvcSnapshot in the same resource group as the AKS cluster (MC_myResourceGroup_myAKSCluster_eastus). AKS kümesinin erişimi olmayan kaynak gruplarında anlık görüntü ve geri yükleme diskleri oluşturursanız, izin sorunlarıyla karşılaşabilirsiniz.You may encounter permission issues if you create snapshots and restore disks in resource groups that the AKS cluster does not have access to.

$ az snapshot create \
    --resource-group MC_myResourceGroup_myAKSCluster_eastus \
    --name pvcSnapshot \
    --source /subscriptions/<guid>/resourceGroups/MC_myResourceGroup_myAKSCluster_eastus/providers/MicrosoftCompute/disks/kubernetes-dynamic-pvc-faf0f176-8b8d-11e8-923b-deb28c58d242

Diskinizdeki veri miktarına bağlı olarak, anlık görüntünün oluşturulması birkaç dakika sürebilir.Depending on the amount of data on your disk, it may take a few minutes to create the snapshot.

Anlık görüntüyü geri yükleme ve kullanmaRestore and use a snapshot

Diski geri yüklemek ve Kubernetes Pod ile kullanmak için az disk Createkomutunu kullanarak bir disk oluşturduğunuzda anlık görüntüyü kaynak olarak kullanın.To restore the disk and use it with a Kubernetes pod, use the snapshot as a source when you create a disk with az disk create. Özgün veri anlık görüntüsüne erişmeniz gerekiyorsa, bu işlem özgün kaynağı korur.This operation preserves the original resource if you then need to access the original data snapshot. Aşağıdaki örnek Pvcsnapshotadlı anlık görüntüden pvcgeri yüklendi adlı bir disk oluşturur:The following example creates a disk named pvcRestored from the snapshot named pvcSnapshot:

az disk create --resource-group MC_myResourceGroup_myAKSCluster_eastus --name pvcRestored --source pvcSnapshot

Geri yüklenen diski Pod ile birlikte kullanmak için, bildirimdeki diskin KIMLIĞINI belirtin.To use the restored disk with a pod, specify the ID of the disk in the manifest. Disk KIMLIĞINI az disk Show komutuyla alın.Get the disk ID with the az disk show command. Aşağıdaki örnek, önceki adımda oluşturulan Pvcgeri yüklenen IÇIN disk kimliğini alır:The following example gets the disk ID for pvcRestored created in the previous step:

az disk show --resource-group MC_myResourceGroup_myAKSCluster_eastus --name pvcRestored --query id -o tsv

Adlı bir pod bildirimi oluşturun azure-restored.yaml ve önceki adımda elde edilen DISK URI 'sini belirtin.Create a pod manifest named azure-restored.yaml and specify the disk URI obtained in the previous step. Aşağıdaki örnek, /mnt/Azure' da bir birim olarak bağlanmış geri yüklenen disk ile temel bir NGINX web sunucusu oluşturur:The following example creates a basic NGINX web server, with the restored disk mounted as a volume at /mnt/azure:

kind: Pod
apiVersion: v1
metadata:
  name: mypodrestored
spec:
  containers:
  - name: mypodrestored
    image: nginx:1.15.5
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 250m
        memory: 256Mi
    volumeMounts:
    - mountPath: "/mnt/azure"
      name: volume
  volumes:
    - name: volume
      azureDisk:
        kind: Managed
        diskName: pvcRestored
        diskURI: /subscriptions/<guid>/resourceGroups/MC_myResourceGroupAKS_myAKSCluster_eastus/providers/Microsoft.Compute/disks/pvcRestored

Aşağıdaki örnekte gösterildiği gibi, kubectl Apply komutuyla Pod öğesini oluşturun:Create the pod with the kubectl apply command, as shown in the following example:

$ kubectl apply -f azure-restored.yaml

pod/mypodrestored created

kubectl describe pod mypodrestoredBölüm bilgilerini gösteren aşağıdaki sıkıştırılmış örnek gibi Pod 'un ayrıntılarını görüntülemek için kullanabilirsiniz:You can use kubectl describe pod mypodrestored to view details of the pod, such as the following condensed example that shows the volume information:

$ kubectl describe pod mypodrestored

[...]
Volumes:
  volume:
    Type:         AzureDisk (an Azure Data Disk mount on the host and bind mount to the pod)
    DiskName:     pvcRestored
    DiskURI:      /subscriptions/19da35d3-9a1a-4f3b-9b9c-3c56ef409565/resourceGroups/MC_myResourceGroupAKS_myAKSCluster_eastus/providers/Microsoft.Compute/disks/pvcRestored
    Kind:         Managed
    FSType:       ext4
    CachingMode:  ReadWrite
    ReadOnly:     false
[...]

Sonraki adımlarNext steps

İlişkili en iyi uygulamalar için bkz. AKS 'de depolama ve yedeklemeler Için en iyi uygulamalar.For associated best practices, see Best practices for storage and backups in AKS.

Azure disklerini kullanarak Kubernetes kalıcı birimleri hakkında daha fazla bilgi edinin.Learn more about Kubernetes persistent volumes using Azure disks.