Azure Kubernetes Service'de (AKS) Azure Diskleri ile 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ı birimi bir veya birden çok pod ile kullanabilir ve dinamik veya statik olarak sağlayabilirsiniz. Bu makalede, bir Azure Kubernetes Service (AKS) kümesinde Azure Diskleri ile dinamik olarak kalıcı birimlerin nasıl oluşturulacağı gösterilmektedir.

Not

Azure diski yalnızca ReadWriteOnceerişim modu türüyle bağlanabilir ve bu da AKS'deki bir düğüm için kullanılabilir olmasını sağlar. Bu erişim modu, podlar aynı düğümde çalıştırıldığında birden çok pod'un birime erişmesine izin verir. Daha fazla bilgi için bkz. Kubernetes PersistentVolume erişim modları.

Bu makale, şunları nasıl yapacağınızı gösterir:

  • Kapsayıcı Depolama Arabirimi (CSI) sürücüsünü yükleyerek ve bir poda eklemek için dinamik olarak bir veya daha fazla Azure yönetilen diski oluşturarak dinamik kalıcı birim (PV) ile çalışın.
  • Bir veya daha fazla Azure yönetilen diski oluşturarak veya var olan bir diski kullanıp poda ekleyerek statik pv ile çalışın.

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

Başlamadan önce

  • Bir Azure depolama hesabına ihtiyacınız vardır.

  • Azure CLI sürüm 2.0.59 veya üzerinin yüklü ve yapılandırılmış olduğundan emin olun. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.

  • Azure Disk CSI sürücüsünün düğüm başına birim sınırı vardır. Birim sayısı düğüm/düğüm havuzunun boyutuna göre değişir. Düğüm başına ayrılabilecek birim sayısını belirlemek için kubectl get komutunu çalıştırın:

    kubectl get CSINode <nodename> -o yaml
    

Birimi dinamik olarak sağlama

Bu bölüm, bir iş yükü tarafından kullanılmak üzere Azure Disk depolama ayrıntılarını içeren bir veya daha fazla kalıcı birim sağlamak isteyen küme yöneticileri için rehberlik sağlar. Kalıcı birim talebi (PVC), bir Azure Disk depolama kapsayıcısını dinamik olarak sağlamak için depolama sınıfı nesnesini kullanır.

Dinamik sağlama parametreleri

Name Anlamı Kullanılabilir Değer Zorunlu Varsayılan değer
skuName Azure Diskleri depolama hesabı türü (diğer ad: storageAccountType) Standard_LRS, Premium_LRS, StandardSSD_LRS, PremiumV2_LRS, UltraSSD_LRS, Premium_ZRS, StandardSSD_ZRS Hayır StandardSSD_LRS
fsType Dosya Sistemi Türü ext4, ext3, ext2, xfs, Linux btrfs için, ntfs Windows için Hayır ext4 Linux için, ntfs Windows için
cachingMode Azure Veri Diski Ana Bilgisayarı Önbellek Ayarı None, ReadOnly, ReadWrite Hayır ReadOnly
resourceGroup Azure Diskleri için kaynak grubunu belirtme Mevcut kaynak grubu adı Hayır Sürücü boşsa geçerli AKS kümesiyle aynı kaynak grubu adını kullanır
DiskIOPSReadWrite UltraSSD disk IOPS Özelliği (en az: 2 IOPS/GiB) 100~160000 Hayır 500
DiskMBpsReadWrite UltraSSD disk Aktarım Hızı Özelliği(en az: 0,032/GiB) 1~2000 Hayır 100
LogicalSectorSize Ultra disk için bayt cinsinden mantıksal kesim boyutu. Desteklenen değerler 512 ad 4096'dır. Varsayılan değer 4096'dır. 512, 4096 Hayır 4096
etiketler Azure Disk etiketleri Etiket biçimi: key1=val1,key2=val2 Hayır ""
diskEncryptionSetID Bekleyen şifrelemeyi etkinleştirmek için kullanılacak disk şifreleme kümesinin ResourceId değeri Biçim: /subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name} Hayır ""
diskEncryptionType Disk şifreleme kümesinin şifreleme türü. EncryptionAtRestWithCustomerKey(varsayılan olarak), EncryptionAtRestWithPlatformAndCustomerKeys Hayır ""
writeAcceleratorEnabled Azure Disklerde Yazma Hızlandırıcısı true, false Hayır ""
networkAccessPolicy Disk veya anlık görüntü için SAS URI'sinin oluşturulmasını önlemeye yönelik NetworkAccessPolicy özelliği AllowAll, DenyAll, AllowPrivate Hayır AllowAll
diskAccessID Disklerde özel uç noktaları kullanmak için DiskAccess kaynağının Azure Kaynak Kimliği Hayır ``
enableBursting Diskin sağlanan performans hedefinin ötesinde isteğe bağlı seri yüklemeyi etkinleştirin. İsteğe bağlı ani artış yalnızca Premium diske ve disk boyutu > 512 GB olduğunda uygulanmalıdır. Ultra ve paylaşılan disk desteklenmez. Ani artış varsayılan olarak devre dışıdır. true, false Hayır false
Useragent Müşteri kullanımı ilişkilendirmesi için kullanılan kullanıcı aracısı Hayır Oluşturulan Useragent biçimlendirilmiş driverName/driverVersion compiler/version (OS-ARCH)
subscriptionID Azure Disklerinin oluşturulduğu Azure abonelik kimliğini belirtin. Azure abonelik kimliği Hayır Boş değilse sağlanmalıdır resourceGroup .
--- Aşağıdaki parametreler yalnızca v2 için geçerlidir --- --- ---
maxShares Disk için izin verilen paylaşılan disk bağlamalarının toplam sayısı. Değerin 2 veya daha fazla olarak ayarlanması ek çoğaltmalarını etkinleştirir. Desteklenen değerler disk boyutuna bağlıdır. Desteklenen değerler için bkz. Azure yönetilen diski paylaşma . Hayır 1
maxMountReplicaCount Korunacak çoğaltma eklerinin sayısı. Bu değer aralıkta olmalıdır [0..(maxShares - 1)] Hayır ise accessModeReadWriteMany, varsayılan değer şeklindedir 0. Aksi takdirde, varsayılan değer maxShares - 1

Yerleşik depolama sınıfları

Depolama sınıfları, bir depolama biriminin kalıcı bir birimle dinamik olarak nasıl oluşturulduğunu tanımlar. Kubernetes depolama sınıfları hakkında daha fazla bilgi için bkz. Kubernetes depolama sınıfları.

Her AKS kümesinde önceden oluşturulmuş dört depolama sınıfı vardır ve ikisi Azure Diskleri ile çalışacak şekilde yapılandırılmıştır:

  1. Varsayılan depolama sınıfı standart bir SSD Azure Disk sağlar.
    • Standart SSD'ler Standart depolamayı desteklemektedir ve güvenilir performans sunarken uygun maliyetli depolama sunar.
  2. managed-csi-premium depolama sınıfı bir premium Azure Disk sağlar.
    • SSD tabanlı yüksek performanslı, düşük gecikme süreli diskler Premium diskleri geri alır. Üretim iş yüklerini çalıştıran VM'ler için idealdir. AKS üzerinde Azure Disk CSI sürücüsünü kullandığınızda, Standart SSD yerel olarak yedekli depolama (LRS) tarafından yedeklenen depolama sınıfını da kullanabilirsiniz managed-csi .

PVC boyutunu küçültmek (veri kaybını önlemek için) desteklenmez. komutunu kullanarak mevcut bir depolama sınıfını kubectl edit sc düzenleyebilir veya kendi özel depolama sınıfınızı oluşturabilirsiniz. Ö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.

komutunu kullanarak önceden oluşturulmuş depolama sınıflarını kubectl get sc görebilirsiniz. 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

Kalıcı birim talebi (PVC), depolama sınıfını temel alan depolamayı otomatik olarak sağlar. Bu durumda PVC, standart veya premium Azure yönetilen diski oluşturmak için önceden oluşturulmuş depolama sınıflarından birini kullanabilir.

  1. Adlı azure-pvc.yaml bir 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.

  1. komutunu kullanarak kubectl apply 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şturduktan sonra durumunun Pendingolduğunu doğrulamanız gerekir. Durum, Pending pod tarafından kullanılmaya hazır olduğunu gösterir.

  1. komutunu kullanarak kubectl describe pvc PVC'nin durumunu doğrulayın.

    kubectl describe pvc azure-managed-disk
    

    Komutun çıkışı aşağıdaki sıkıştırılmış örneğe benzer:

    Name:            azure-managed-disk
    Namespace:       default
    StorageClass:    managed-csi
    Status:          Pending
    [...]
    
  2. Adlı azure-pvc-disk.yaml bir dosya oluşturun ve aşağıdaki bildirimde kopyalayın. Bu bildirim, yoluna /mnt/azureAzure Disk'i bağlamak için azure-managed-disk adlı kalıcı birim talebi kullanan temel bir NGINX pod oluşturur. Windows Server kapsayıcıları için, Windows yol kuralını kullanarak 'D:' gibi bir mountPath belirtin.

    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
              readOnly: false
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: azure-managed-disk
    
  3. komutunu kullanarak pod oluşturun kubectl apply .

     kubectl apply -f azure-pvc-disk.yaml
    

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

    pod/mypod created
    
  4. Artık azure diskinizin dizine bağlı olduğu çalışan bir podunuz /mnt/azure var. komutunu kullanarak kubectl describe pod yapılandırmasını denetleyin.

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

Azure ultra disklerini kullanma

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

Azure etiketlerini kullanma

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

Birimi statik olarak sağlama

Bu bölüm, bir iş yükü tarafından kullanılmak üzere Azure Disk depolama ayrıntılarını içeren bir veya daha fazla kalıcı birim oluşturmak isteyen küme yöneticileri için rehberlik sağlar.

Statik sağlama parametreleri

Name Anlamı Kullanılabilir Değer Zorunlu Varsayılan değer
volumeHandle Azure disk URI'sı /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} Yes Yok
volumeAttributes.fsType Dosya sistemi türü ext4, ext3, ext2, xfs, Linux btrfs için, ntfs Windows için Hayır ext4 Linux için, ntfs Windows için
volumeAttributes.partition Mevcut diskin bölüm numarası (yalnızca Linux'ta desteklenir) 1, 2, 3 Hayır Boş (bölüm yok)
- Bölüm biçiminin şöyle olduğundan emin olun -part1
volumeAttributes.cachingMode Disk ana bilgisayar önbelleği ayarı None, ReadOnly, ReadWrite Hayır ReadOnly

Azure diski oluşturma

AKS ile kullanmak üzere bir Azure diski oluşturduğunuzda, düğüm kaynak grubunda disk kaynağını oluşturabilirsiniz. Bu yaklaşım AKS kümesinin disk kaynağına erişmesine ve bunları yönetmesine olanak tanır. Bunun yerine diski ayrı bir kaynak grubunda oluşturursanız, kümeniz için Azure Kubernetes Service (AKS) yönetilen kimliğine Contributor rolü diskin kaynak grubuna vermelisiniz.

  1. komutunu kullanarak az aks show kaynak grubu adını belirleyin ve parametresini --query nodeResourceGroup ekleyin.

    az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
    
    # Output
    MC_myResourceGroup_myAKSCluster_eastus
    
  2. komutunu kullanarak az disk create bir disk oluşturun. Düğüm kaynak grubu adını ve disk kaynağı için myAKSDisk gibi bir ad belirtin. Aşağıdaki örnek 20GiB disk oluşturur ve oluşturulduktan sonra diskin kimliğini verir. Windows Server kapsayıcılarıyla kullanmak üzere bir disk oluşturmanız gerekiyorsa, diski doğru biçimlendirmek için parametresini ekleyin --os-type windows .

    az disk create \
      --resource-group MC_myResourceGroup_myAKSCluster_eastus \
      --name myAKSDisk \
      --size-gb 20 \
      --query id --output tsv
    

    Not

    Azure Diskleri SKU tarafından belirli bir boyut için 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ı hem SKU'ya hem de AKS kümesindeki düğümlerin örnek boyutuna bağlıdır. Bkz. Yönetilen Diskler Fiyatlandırması ve Performansı.

    Disk kaynak kimliği, aşağıdaki örnek çıktıda gösterildiği gibi komut başarıyla tamamlandıktan sonra görüntülenir. Sonraki bölümde diski bağlamak için disk kimliğini kullanacaksınız.

    /subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
    

Diski birim olarak bağlama

  1. PersistentVolume ile pv-azuredisk.yaml dosyası oluşturun. Önceki adımdaki disk kaynak kimliğiyle güncelleştirin volumeHandle .

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: disk.csi.azure.com
      name: pv-azuredisk
    spec:
      capacity:
        storage: 20Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: managed-csi
      csi:
        driver: disk.csi.azure.com
        volumeHandle: /subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
        volumeAttributes:
          fsType: ext4
    
  2. PersistentVolumeClaim ile PersistentVolume kullanan bir pvc-azuredisk.yaml dosyası oluşturun.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      volumeName: pv-azuredisk
      storageClassName: managed-csi
    
  3. komutunu kullanarak kubectl applyPersistentVolume ve PersistentVolumeClaim oluşturun ve oluşturduğunuz iki YAML dosyasına başvurun.

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. Komutunu kullanarak PersistentVolumeClaim'inizin oluşturulduğunu ve PersistentVolume'akubectl get pvc bağlı olduğunu doğrulayın.

    kubectl get pvc pvc-azuredisk
    

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

    NAME            STATUS   VOLUME         CAPACITY    ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pv-azuredisk   20Gi        RWO                           5s
    
  5. PersistentVolumeClaim'inize başvurmak için bir azure-disk-pod.yaml dosyası oluşturun.

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      containers:
      - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        name: mypod
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        volumeMounts:
          - name: azure
            mountPath: /mnt/azure
            volumeMounts
      volumes:
        - name: azure
          persistentVolumeClaim:
            claimName: pvc-azuredisk
    
  6. Komutunu kullanarak kubectl apply yapılandırmayı uygulayın ve birimi bağlayın.

    kubectl apply -f azure-disk-pod.yaml
    

Kaynakları temizleme

Bu makalede oluşturulan kaynakları tamamladığınızda komutunu kullanarak kubectl delete bunları kaldırabilirsiniz.

# Remove the pod
kubectl delete -f azure-pvc-disk.yaml

# Remove the persistent volume claim
kubectl delete -f azure-pvc.yaml

Sonraki adımlar