Azure Kubernetes Service'de (AKS) Azure Diskleri ile dinamik olarak kalıcı birim oluşturma ve kullanma

Kalıcı birim, Kubernetes podlarıyla kullanılmak üzere sağlanan bir depolama parçasını temsil eder. Kalıcı birim bir veya birden çok pod tarafından kullanılabilir ve dinamik veya statik olarak sağlanabilir. Bu makalede, bir Azure Kubernetes Service (AKS) kümesindeki tek bir pod tarafından kullanılmak üzere Azure Diskleri ile dinamik olarak kalıcı birimlerin nasıl oluşturulacağı gösterilmektedir.

Not

Azure Diskleri yalnızca ReadWriteOnceErişim modu türüyle bağlanabilir ve bu da AKS'deki bir düğümün kullanımına sunulur. Kalıcı bir birimi birden çok düğüm arasında paylaşmanız gerekiyorsa Azure Dosyalar kullanın.

Kubernetes birimleri hakkında daha fazla bilgi için bkz. AKS'deki uygulamalar için depolama seçenekleri.

Başlamadan önce

Bu makalede, 1.21 veya üzeri sürüme sahip bir AKS kümeniz olduğu varsayılır. AKS kümesine ihtiyacınız varsa Azure CLI kullanarak, Azure PowerShell kullanarak veya Azure portal kullanarak AKS hızlı başlangıcına bakın.

Ayrıca Azure CLI 2.0.59 veya sonraki bir sürümünün yüklü ve yapılandırılmış olması gerekir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.

Yerleşik depolama sınıfları

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. Kubernetes depolama sınıfları hakkında daha fazla bilgi için bkz. Kubernetes Depolama Sınıfları.

Her AKS kümesi önceden oluşturulmuş dört depolama sınıfı içerir ve ikisi Azure Disklerle çalışacak şekilde yapılandırılmıştır:

  • Varsayılan depolama sınıfı standart bir SSD Azure Disk sağlar.
    • Standart depolama, Standart SSD'ler tarafından desteklenir ve yine de güvenilir performans sunarken uygun maliyetli depolama sunar.
  • managed-csi-premium depolama sınıfı bir premium Azure Disk sağlar.
    • Premium diskler SSD tabanlı, yüksek performanslı ve düşük gecikme süreli disk ile desteklenir. Üretim iş yükü çalıştıran VM'ler için son derece uygundur. Kümenizdeki AKS düğümleri premium depolama kullanıyorsa managed-premium sınıfını seçin.

Varsayılan depolama sınıflarından birini kullanıyorsanız, depolama sınıfı oluşturulduktan sonra birim boyutunu güncelleştiremezsiniz. 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 kendi özel depolama sınıfınızı oluşturabilirsiniz. PVC boyutunu küçültmek (veri kaybını önlemek için) desteklenmez. komutunu kullanarak mevcut bir depolama sınıfını kubectl edit sc düzenleyebilirsiniz.

Örneğin, 4 TiB boyutunda bir disk kullanmak istiyorsanız, 4 TiB ve daha büyük diskler için disk önbelleğe alma desteklenmediğinden bunu tanımlayan cachingmode: None bir depolama sınıfı oluşturmanız gerekir.

Depolama sınıfları ve kendi depolama sınıfınızı oluşturma hakkında daha fazla bilgi için bkz. AKS'deki uygulamalar için depolama seçenekleri.

Önceden oluşturulmuş depolama sınıflarını görmek için kubectl get sc komutunu kullanın. Aşağıdaki örnekte, AKS kümesinde bulunan önceden oluşturulmuş depolama sınıfları gösterilmektedir:

kubectl get sc

Komutun çıkışı aşağıdaki örneğe benzer:

NAME                PROVISIONER                AGE
default (default)   disk.csi.azure.com         1h
managed-csi         disk.csi.azure.com         1h

Not

Kalıcı birim talepleri GiB'de belirtilir, ancak Azure yönetilen diskleri belirli bir boyut için SKU tarafından faturalandırılır. Bu SKU'lar S4 veya P4 diskleri için 32GiB ile S80 veya P80 diskler için 32TiB arasında değişir (önizlemede). Premium yönetilen diskin aktarım hızı ve IOPS performansı, AKS kümesindeki düğümlerin hem SKU hem de örnek boyutuna bağlıdır. Daha fazla bilgi için bkz . Yönetilen disklerin fiyatlandırması ve performansı.

Kalıcı birim talebi oluşturma

Depolama sınıfına göre depolamayı otomatik olarak sağlamak için kalıcı birim talebi (PVC) kullanılır. Bu durumda PVC, standart veya premium Azure yönetilen diski oluşturmak için önceden oluşturulmuş depolama sınıflarından birini kullanabilir.

adlı azure-pvc.yamlbir dosya oluşturun ve aşağıdaki bildirimde kopyalayın. Talep, ReadWriteOnce erişimiyle boyutu 5 GB olan adlı azure-managed-disk bir disk talep eder. Managed-csi depolama sınıfı depolama sınıfı olarak belirtilir.

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

İpucu

Premium depolama kullanan bir disk oluşturmak için managed-csi yerine kullanınstorageClassName: managed-csi-premium.

kubectl apply komutuyla kalıcı birim talebi oluşturun ve azure-pvc.yaml dosyanızı belirtin:

kubectl apply -f azure-pvc.yaml

Komutun çıkışı aşağıdaki örneğe benzer:

persistentvolumeclaim/azure-managed-disk created

Kalıcı birimi kullanma

Kalıcı birim talebi oluşturulduktan ve disk başarıyla sağlandıktan sonra, diske erişimi olan bir pod oluşturulabilir. Aşağıdaki bildirim, Azure Disk'i yoluna /mnt/azurebağlamak için azure-managed-disk adlı kalıcı birim talebi kullanan temel bir NGINX podunu oluşturur. Windows Server kapsayıcıları için, Windows yol kuralını kullanarak 'D:' gibi bir mountPath belirtin.

adlı azure-pvc-disk.yamlbir dosya oluşturun ve aşağıdaki bildirimde kopyalayın.

kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
    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 oluşturun:

kubectl apply -f azure-pvc-disk.yaml

pod/mypod created

Artık azure diskinizin dizine bağlı olduğu çalışan bir podunuz /mnt/azure var. Bu yapılandırma, aşağıdaki daraltılmış örnekte gösterildiği gibi aracılığıyla kubectl describe pod mypodpodunuzu incelerken görülebilir:

kubectl describe pod mypod

Komutun çıkışı aşağıdaki örneğe benzer:

[...]
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 Diskleri kullanma

Ultra disk kullanmak için bkz. Azure Kubernetes Service'de (AKS) Ultra Diskleri kullanma.

Kalıcı birimi yedekleme

Kalıcı biriminizdeki verileri yedeklemek için birimin yönetilen diskin anlık görüntüsünü alın. Ardından bu anlık görüntüyü kullanarak geri yüklenmiş bir disk oluşturabilir ve verileri geri yükleme aracı olarak podlara ekleyebilirsiniz.

İlk olarak, komutuyla kubectl get pvc birim adını alın, örneğin azure-managed-disk adlı PVC için:

$ 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. Aşağıdaki örnekte gösterildiği gibi az disk list ile disk kimliğini sorgulayıp PVC birim adınızı girin:

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 create ile bir anlık görüntü diski oluşturmak için disk kimliğini kullanın. Aşağıdaki örnek, AKS kümesiyle aynı kaynak grubunda pvcSnapshot adlı bir anlık görüntü oluşturur (MC_myResourceGroup_myAKSCluster_eastus). AKS kümesinin erişimi olmayan kaynak gruplarında anlık görüntüler oluşturur ve diskleri geri yüklerseniz izin sorunlarıyla karşılaşabilirsiniz.

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

Diskinizin veri miktarına bağlı olarak anlık görüntünün oluşturulması birkaç dakika sürebilir.

Anlık görüntüyü geri yükleme ve kullanma

Diski geri yüklemek ve Kubernetes pod'u ile kullanmak için , az disk create ile bir disk oluştururken anlık görüntüyü kaynak olarak kullanın. Bu işlem, özgün veri anlık görüntüsüne erişmenizin gerekmesi durumları için özgün kaynağı korur. Aşağıdaki örnek, pvcSnapshot adlı anlık görüntüden pvcRestored adlı bir disk oluşturur:

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

Geri yüklenen diski bir pod ile kullanmak için bildirimde diskin kimliğini belirtin. az disk show komutuyla disk kimliğini alın. Aşağıdaki örnek, önceki adımda oluşturulan pvcRestored için disk kimliğini alır:

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

adlı azure-restored.yaml bir pod bildirimi oluşturun ve önceki adımda alınan disk URI'sini belirtin. Aşağıdaki örnek, geri yüklenen disk /mnt/azure konumunda bir birim olarak bağlanmış olarak temel bir NGINX web sunucusu oluşturur:

kind: Pod
apiVersion: v1
metadata:
  name: mypodrestored
spec:
  containers:
  - name: mypodrestored
    image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
    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 oluşturun:

$ kubectl apply -f azure-restored.yaml

Komutun çıkışı aşağıdaki örneğe benzer:

pod/mypodrestored created

Birim bilgilerini gösteren aşağıdaki sıkıştırılmış örnek gibi podun ayrıntılarını görüntülemek için kullanabilirsiniz kubectl describe pod mypodrestored :

kubectl describe pod mypodrestored

Komutun çıkışı aşağıdaki örneğe benzer:

[...]
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
[...]

Azure etiketlerini kullanma

Azure etiketlerini kullanma hakkında daha fazla bilgi için bkz. Azure Kubernetes Service'de (AKS) Azure etiketlerini kullanma.

Sonraki adımlar

İlgili en iyi yöntemler için bkz. AKS'de depolama ve yedekleme için en iyi yöntemler.

Azure Diskleri'nin kullanıldığı Kubernetes kalıcı birimleri hakkında daha fazla bilgi edinin.