Opslagopties voor toepassingen in Azure Kubernetes Service (AKS)

Toepassingen die worden uitgevoerd in Azure Kubernetes Service (AKS) moeten mogelijk gegevens opslaan en ophalen. Hoewel sommige toepassingsworkloads lokale, snelle opslag kunnen gebruiken op overbodige, geleegde knooppunten, vereisen andere opslag die op meer reguliere gegevensvolumes binnen het Azure-platform behouden blijft.

Meerdere pods moeten mogelijk het volgende doen:

  • Dezelfde gegevensvolumes delen.
  • Gegevensvolumes opnieuw koppelen als de pod opnieuw is gepland op een ander knooppunt.

Ten slotte moet u mogelijk gevoelige gegevens of informatie over toepassingsconfiguratie verzamelen en opslaan in pods.

In dit artikel worden de belangrijkste concepten beschreven die opslag bieden voor uw toepassingen in AKS:

Opslagopties voor toepassingen in een AKS-cluster (Azure Kubernetes Services)

Volumes

Kubernetes behandelt afzonderlijke pods doorgaans als tijdelijke, wegwerpresources. Toepassingen hebben verschillende benaderingen voor het gebruik en persistent maken van gegevens. Een volume is een manier om gegevens op te slaan, op te halen en op te slaan in pods en gedurende de levenscyclus van de toepassing.

Traditionele volumes worden gemaakt als Kubernetes-resources die worden ondersteund door Azure Storage. U kunt handmatig gegevensvolumes maken die rechtstreeks aan pods moeten worden toegewezen, of u kunt deze automatisch door Kubernetes laten maken. Gegevensvolumes kunnen gebruikmaken van: Azure Disks, Azure Files, Azure NetApp Files of Azure Blobs.

Notitie

Afhankelijk van de VM-SKU die wordt gebruikt, heeft het CSI-stuurprogramma voor Azure Disks mogelijk een volumelimiet per knooppunt. Voor sommige krachtige VM's (bijvoorbeeld 16 kernen) is de limiet 64 volumes per knooppunt. Als u de limiet per VM-SKU wilt identificeren, raadpleegt u de kolom Maximum aantal gegevensschijven voor elke aangeboden VM-SKU. Zie Grootten van virtuele machines voor algemeen gebruik voor een lijst met aangeboden VM-SKU's en de bijbehorende gedetailleerde capaciteitslimieten.

Azure-schijven

Gebruik Azure Disks om een Kubernetes DataDisk-resource te maken. Schijftypen zijn onder andere:

  • Ultra Disks
  • Premium-SSD's
  • Standard - SSD's
  • Standard - HDD's

Tip

Gebruik Premium SSD voor de meeste productie- en ontwikkelingsworkloads.

Omdat Azure Disks zijn gekoppeld als ReadWriteOnce, zijn ze slechts beschikbaar voor één knooppunt. Gebruik Azure Files voor opslagvolumes die tegelijkertijd toegankelijk zijn voor pods op meerdere knooppunten.

Azure Files

Gebruik Azure Files om een SMB-share (Server Message Block) versie 3.1.1 of NFS-versie 4.1-share (Network File System) met ondersteuning van een Azure-opslagaccount te koppelen aan pods. Azure Files kunt u gegevens delen tussen meerdere knooppunten en pods en kunt u het volgende gebruiken:

  • Azure Premium-opslag ondersteund door ssd's met hoge prestaties
  • Azure Standard-opslag ondersteund door reguliere HDD's

Azure NetApp Files

  • Ultra Storage
  • Premium Storage
  • Standaardopslag

Azure Blob Storage

Gebruik Azure Blob Storage om een blob-opslagcontainer te maken en deze te koppelen met behulp van het NFS v3.0-protocol of BlobFuse.

  • Blok-blobs

Volumetypen

Kubernetes-volumes vertegenwoordigen meer dan alleen een traditionele schijf voor het opslaan en ophalen van informatie. Kubernetes-volumes kunnen ook worden gebruikt als een manier om gegevens in een pod te injecteren voor gebruik door de containers.

Veelvoorkomende volumetypen in Kubernetes zijn onder andere:

emptyDir

Wordt meestal gebruikt als tijdelijke ruimte voor een pod. Alle containers in een pod hebben toegang tot de gegevens op het volume. Gegevens die naar dit volumetype zijn geschreven, blijven alleen behouden voor de levensduur van de pod. Nadat u de pod hebt verwijderd, wordt het volume verwijderd. Dit volume gebruikt doorgaans de opslag van de onderliggende lokale knooppuntschijf, hoewel deze ook alleen in het geheugen van het knooppunt kan bestaan.

geheim

U kunt geheime volumes gebruiken om gevoelige gegevens in pods, zoals wachtwoorden, te injecteren.

  1. Maak een geheim met behulp van de Kubernetes-API.
  2. Definieer uw pod of implementatie en vraag een specifiek geheim aan.
    • Geheimen worden alleen verstrekt aan knooppunten met een geplande pod waarvoor ze zijn vereist.
    • Het geheim wordt opgeslagen in tmpfs, niet naar schijf geschreven.
  3. Wanneer u de laatste pod op een knooppunt verwijdert waarvoor een geheim is vereist, wordt het geheim verwijderd uit de tmpfs van het knooppunt.
    • Geheimen worden opgeslagen in een bepaalde naamruimte en zijn alleen toegankelijk voor pods binnen dezelfde naamruimte.

configMap

U kunt configMap gebruiken om eigenschappen van sleutel-waardeparen in pods te injecteren, zoals toepassingsconfiguratiegegevens. Definieer informatie over de toepassingsconfiguratie als een Kubernetes-resource, die eenvoudig kan worden bijgewerkt en toegepast op nieuwe exemplaren van pods wanneer deze worden geïmplementeerd.

Zoals het gebruik van een geheim:

  1. Maak een ConfigMap met behulp van de Kubernetes-API.
  2. Vraag de ConfigMap aan wanneer u een pod of implementatie definieert.
    • ConfigMaps worden opgeslagen in een bepaalde naamruimte en zijn alleen toegankelijk voor pods binnen dezelfde naamruimte.

Permanente volumes

Volumes die zijn gedefinieerd en gemaakt als onderdeel van de levenscyclus van de pod, bestaan alleen totdat u de pod verwijdert. Pods verwachten vaak dat hun opslag behouden blijft als een pod opnieuw wordt gepland op een andere host tijdens een onderhoudsgebeurtenis, met name in StatefulSets. Een permanent volume (HW) is een opslagresource die wordt gemaakt en beheerd door de Kubernetes-API en die kan bestaan na de levensduur van een afzonderlijke pod.

U kunt Azure Disks of Azure Files gebruiken om het PersistentVolume op te geven. Zoals vermeld in de sectie Volumes , wordt de keuze van schijven of bestanden vaak bepaald door de behoefte aan gelijktijdige toegang tot de gegevens of de prestatielaag.

Permanente volumes in een AKS-cluster (Azure Kubernetes Services)

Een PersistentVolume kan statisch worden gemaakt door een clusterbeheerder of dynamisch worden gemaakt door de Kubernetes API-server. Als een pod is gepland en momenteel niet-beschikbare opslag aanvraagt, kan Kubernetes de onderliggende Azure Disk- of Files-opslag maken en deze koppelen aan de pod. Dynamische inrichting maakt gebruik van een StorageClass om te bepalen welk type Azure-opslag moet worden gemaakt.

Belangrijk

Permanente volumes kunnen niet worden gedeeld door Windows- en Linux-pods vanwege verschillen in bestandssysteemondersteuning tussen de twee besturingssystemen.

Opslagklassen

Als u verschillende opslaglagen wilt definiëren, zoals Premium en Standard, kunt u een StorageClass maken.

De StorageClass definieert ook de reclaimPolicy. Wanneer u het permanente volume verwijdert, bepaalt de reclaimPolicy het gedrag van de onderliggende Azure-opslagresource. De onderliggende opslagresource kan worden verwijderd of bewaard voor gebruik met een toekomstige pod.

Voor clusters die gebruikmaken van de CSI-stuurprogramma's (Container Storage Interface) worden de volgende extra's StorageClasses gemaakt:

Machtiging Reden
managed-csi Gebruikt Azure StandardSSD lokaal redundante opslag (LRS) om een beheerde schijf te maken. Het beleid voor vrijmaken zorgt ervoor dat de onderliggende Azure-schijf wordt verwijderd wanneer het permanente volume dat deze heeft gebruikt, wordt verwijderd. De opslagklasse configureert ook de permanente volumes om uitbreidbaar te zijn. U hoeft alleen de permanente volumeclaim te bewerken met de nieuwe grootte.
managed-csi-premium Maakt gebruik van lokaal redundante opslag (LRS) van Azure Premium om een beheerde schijf te maken. Het beleid voor vrijmaken zorgt er opnieuw voor dat de onderliggende Azure-schijf wordt verwijderd wanneer het permanente volume dat deze heeft gebruikt, wordt verwijderd. Op dezelfde manier kunnen met deze opslagklasse permanente volumes worden uitgebreid.
azurefile-csi Maakt gebruik van Azure Standard Storage om een Azure-bestandsshare te maken. Het beleid voor vrijmaken zorgt ervoor dat de onderliggende Azure-bestandsshare wordt verwijderd wanneer het permanente volume dat het heeft gebruikt, wordt verwijderd.
azurefile-csi-premium Maakt gebruik van Azure Premium Storage om een Azure-bestandsshare te maken. Het beleid voor vrijmaken zorgt ervoor dat de onderliggende Azure-bestandsshare wordt verwijderd wanneer het permanente volume dat het heeft gebruikt, wordt verwijderd.
azureblob-nfs-premium Maakt gebruik van Azure Premium Storage om een Azure Blob Storage-container te maken en verbinding te maken met behulp van het NFS v3-protocol. Het beleid voor vrijmaken zorgt ervoor dat de onderliggende Azure Blob Storage-container wordt verwijderd wanneer het permanente volume dat deze heeft gebruikt, wordt verwijderd.
azureblob-fuse-premium Maakt gebruik van Azure Premium Storage om een Azure Blob Storage-container te maken en verbinding te maken met behulp van BlobFuse. Het beleid voor vrijmaken zorgt ervoor dat de onderliggende Azure Blob Storage-container wordt verwijderd wanneer het permanente volume dat deze heeft gebruikt, wordt verwijderd.

Tenzij u een StorageClass opgeeft voor een permanent volume, wordt de standaardOpslagklasse gebruikt. Zorg ervoor dat volumes de juiste opslag gebruiken die u nodig hebt bij het aanvragen van permanente volumes.

Belangrijk

Vanaf Kubernetes versie 1.21 gebruikt AKS standaard alleen CSI-stuurprogramma's en is CSI-migratie ingeschakeld. Hoewel bestaande permanente volumes in de structuur blijven werken, biedt AKS vanaf versie 1.26 geen ondersteuning meer voor volumes die zijn gemaakt met behulp van een in-tree stuurprogramma en opslag die zijn ingericht voor bestanden en schijven.

De default klasse is hetzelfde als managed-csi.

U kunt een StorageClass maken voor aanvullende behoeften met behulp van kubectl. In het volgende voorbeeld wordt Premium Managed Disks gebruikt en wordt aangegeven dat de onderliggende Azure-schijf moet worden bewaard wanneer u de pod verwijdert:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-premium-retain
provisioner: disk.csi.azure.com
parameters:
  skuName: Premium_LRS
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

Notitie

AKS stemt de standaardopslagklassen af en overschrijft alle wijzigingen die u aanbrengt in deze opslagklassen.

Zie StorageClass in Kubernetes voor meer informatie over opslagklassen.

Claims voor permanente volumes

Een PersistentVolumeClaim vraagt om opslag van een bepaalde StorageClass, toegangsmodus en grootte. De Kubernetes API-server kan de onderliggende Azure-opslagresource dynamisch inrichten als er geen bestaande resource kan voldoen aan de claim op basis van de gedefinieerde StorageClass.

De poddefinitie bevat de volumekoppeling zodra het volume is verbonden met de pod.

Permanente volumeclaims in een AKS-cluster (Azure Kubernetes Services)

Zodra een beschikbare opslagresource is toegewezen aan de pod die opslag aanvraagt, is PersistentVolume gebonden aan een PersistentVolumeClaim. Permanente volumes zijn 1:1 toegewezen aan claims.

Het volgende YAML-manifest toont een permanente volumeclaim die gebruikmaakt van managed-premium StorageClass en een schijf van 5Gi in grootte aanvraagt:

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

Wanneer u een poddefinitie maakt, geeft u ook het volgende op:

  • De permanente volumeclaim om de gewenste opslag aan te vragen.
  • De volumeMount voor uw toepassingen om gegevens te lezen en te schrijven.

Het volgende YAML-manifest laat zien hoe de vorige permanente volumeclaim kan worden gebruikt om een volume te koppelen op /mnt/azure:

kind: Pod
apiVersion: v1
metadata:
  name: nginx
spec:
  containers:
    - name: myfrontend
      image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
      volumeMounts:
      - mountPath: "/mnt/azure"
        name: volume
  volumes:
    - name: volume
      persistentVolumeClaim:
        claimName: azure-managed-disk

Als u een volume in een Windows-container wilt koppelen, geeft u de stationsletter en het pad op. Bijvoorbeeld:

...      
       volumeMounts:
        - mountPath: "d:"
          name: volume
        - mountPath: "c:\k"
          name: k-dir
...

Volgende stappen

Zie Best practices voor opslag en back-ups in AKS voor de bijbehorende best practices.

Als u wilt zien hoe u CSI-stuurprogramma's gebruikt, raadpleegt u de volgende artikelen met instructies:

Zie de volgende artikelen voor meer informatie over kernconcepten van Kubernetes en AKS: