Azure Kubernetes hizmetinde (AKS) Azure diskleriyle kalıcı bir birimi dinamik olarak oluşturma ve kullanma

Kalıcı bir birim, Kubernetes pods ile kullanılmak üzere sağlanmış bir depolama parçasını temsil eder. Kalıcı bir birim bir veya daha fazla sayıda pods tarafından kullanılabilir ve dinamik veya statik olarak sağlanabilir. 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.

Not

Azure diski yalnızca erişim modu türü readwriteonce ile bağlanabilir ve bu, aks 'deki bir düğüm için kullanılabilir hale gelir. Kalıcı bir birimi birden çok düğüm arasında paylaşmanız gerekiyorsa Azure dosyalarınıkullanın.

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

Başlamadan önce

Bu makalede, mevcut bir AKS kümeniz olduğunu varsaymaktadır. AKS kümesine ihtiyacınız varsa bkz. Azure CLI kullanarak aks hızlı başlangıç veya Azure Portal kullanımı.

Ayrıca Azure CLı sürüm 2.0.59 veya üzeri yüklü ve yapılandırılmış olmalıdır. 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 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:

  • Varsayılan depolama sınıfı standart bir SSD Azure diski sağlar.
    • Standart depolama, standart SSD 'Ler tarafından desteklenir ve hala güvenilir performans sağlarken uygun maliyetli depolama sunar.
  • Yönetilen-Premium depolama sınıfı, Premium bir Azure diski 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, yönetilen-Premium sınıfını seçin.

Varsayılan depolama sınıflarından birini kullanırsanız, depolama sınıfı oluşturulduktan sonra birim boyutunu güncelleştiremezsiniz. 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. Bir PVC 'nin boyutunu azaltmak için (veri kaybını engellemek için) desteklenmediğini unutmayın. Var olan bir depolama sınıfını komutunu kullanarak düzenleyebilirsiniz kubectl edit sc .

Ö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.

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.

Önceden oluşturulmuş depolama sınıflarını görmek için kubectl Get SC komutunu kullanın. Aşağıdaki örnek, bir AKS kümesi içinde kullanılabilir olan önceden oluşturma depolama sınıflarını gösterir:

$ 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. 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. Premium yönetilen bir diskin verimlilik ve ıOPS 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ırma ve performansı.

Kalıcı bir birim talebi oluşturun

Kalıcı bir birim talebi (PVC), depolama sınıfına göre depolamayı otomatik olarak sağlamak için kullanılır. 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.

Adlı bir dosya oluşturun azure-premium.yaml ve aşağıdaki bildirime kopyalayın. Talep, azure-managed-disk boyutu 5 GB olan ve readwriteonce erişimi olan adlı bir disk ister. Yönetilen-Premium depolama sınıfı, depolama sınıfı olarak belirtilir.

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-Premium yerine kullanın.

Kubectl Apply komutuyla kalıcı birim talebi oluşturun ve Azure-Premium. YAML dosyanızı belirtin:

$ kubectl apply -f azure-premium.yaml

persistentvolumeclaim/azure-managed-disk created

Kalıcı birimi kullan

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 diskini yolda bağlamak için Azure-Managed-disk adlı kalıcı birim talebini kullanan temel bir NGINX Pod oluşturur /mnt/azure . Windows Server kapsayıcıları için, Windows yol kuralını kullanarak ":" gibi bir bağlamayolu belirtin.

Adlı bir dosya oluşturun azure-pvc-disk.yaml ve aşağıdaki bildirime 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 öğesini oluşturun:

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

pod/mypod created

Artık, Azure diskinizin dizine bağlanmış bir pod çalışır durumda /mnt/azure . 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:

$ 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 kullanma

Ultra disk 'ten yararlanmak için bkz. Azure Kubernetes Service (AKS) üzerinde Ultra diskler kullanma.

Kalıcı bir birimi yedekleme

Kalıcı biriminizdeki verileri yedeklemek için birim için yönetilen diskin anlık görüntüsünü alın. 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.

İlk kubectl get pvc olarak, Azure-Managed-DISK adlı PVC için gibi, komutuyla birim adını alın:

$ 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. 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:

$ 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. 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ü ve geri yükleme diskleri oluşturursanız, 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

Diskinizdeki 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 ile kullanmak için az disk Createkomutunu kullanarak bir disk oluşturduğunuzda anlık görüntüyü kaynak olarak kullanın. Özgün veri anlık görüntüsüne erişmeniz gerekiyorsa, bu işlem özgün kaynağı korur. Aşağıdaki örnek Pvcsnapshot adlı anlık görüntüden pvcgeri yüklendi adlı bir disk oluşturur:

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. Disk KIMLIĞINI az disk Show komutuyla alın. Aşağıdaki örnek, önceki adımda oluşturulan Pvcgeri yüklenen IÇIN disk kimliğini alır:

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. Aşağıdaki örnek, /mnt/Azure' da bir birim olarak bağlanmış geri yüklenen disk ile 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 öğesini oluşturun:

$ 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:

$ 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ımlar

İlişkili en iyi uygulamalar için bkz. AKS 'de depolama ve yedeklemeler Için en iyi uygulamalar.

Azure disklerini kullanarak Kubernetes kalıcı birimleri hakkında daha fazla bilgi edinin.