Lagringsalternativ för program i Azure Kubernetes Service (AKS)

Program som körs i Azure Kubernetes Service (AKS) kan behöva lagra och hämta data. Vissa programarbetsbelastningar kan använda lokal, snabb lagring på onödiga, tömda noder, medan andra kräver lagring som bevaras på mer vanliga datavolymer på Azure-plattformen.

Flera poddar kan behöva:

  • Dela samma datavolymer.
  • Koppla om datavolymer om podden schemaläggs om på en annan nod.

Slutligen kan du behöva samla in och lagra känslig data eller programkonfigurationsinformation i poddar.

Den här artikeln beskriver de grundläggande begreppen som tillhandahåller lagring till dina program i AKS:

Lagringsalternativ för program i ett AKS-kluster (Azure Kubernetes Services)

Volymer

Kubernetes behandlar vanligtvis enskilda poddar som tillfälliga, disponibla resurser. Program har olika metoder som är tillgängliga för att använda och bevara data. En volym representerar ett sätt att lagra, hämta och bevara data mellan poddar och genom programmets livscykel.

Traditionella volymer skapas som Kubernetes-resurser som backas upp av Azure Storage. Du kan manuellt skapa datavolymer som ska tilldelas poddar direkt eller låta Kubernetes skapa dem automatiskt. Datavolymer kan använda: Azure Disks, Azure Files, Azure NetApp Files eller Azure Blobs.

Anteckning

CSI-drivrutinen för Azure Disks har en gräns på 32 volymer per nod. Andra Azure Storage-tjänster har ingen motsvarande gräns.

Azure-diskar

Använd Azure Disks för att skapa en Kubernetes DataDisk-resurs . Disktyper är:

  • Ultra Diskar
  • Premium SSD
  • Standard SSD
  • Standard HDD

Tips

För de flesta produktions- och utvecklingsarbetsbelastningar använder du Premium SSD.

Eftersom Azure-diskar monteras som ReadWriteOnce är de bara tillgängliga för en enda nod. För lagringsvolymer som kan nås av poddar på flera noder samtidigt använder du Azure Files.

Azure Files

Använd Azure Files för att montera en SMB-resurs (Server Message Block) version 3.1.1 eller NFS version 4.1-resurs (Network File System) som backas upp av ett Azure Storage-konto till poddar. Azure Files kan du dela data över flera noder och poddar och kan använda:

  • Azure Premium-lagring som backas upp av högpresterande SSD
  • Azure Standard Storage som backas upp av vanliga hårddiskar

Azure NetApp Files

  • Ultra Storage
  • Premium Storage
  • Standardlagring

Azure Blob Storage

Använd Azure Blob Storage för att skapa en bloblagringscontainer och montera den med hjälp av protokollet NFS v3.0 eller BlobFuse.

  • Blockblobar

Volymtyper

Kubernetes-volymer representerar mer än bara en traditionell disk för lagring och hämtning av information. Kubernetes-volymer kan också användas som ett sätt att mata in data i en podd för användning av containrarna.

Vanliga volymtyper i Kubernetes är:

emptyDir

Används ofta som tillfälligt utrymme för en podd. Alla containrar i en podd kan komma åt data på volymen. Data som skrivs till den här volymtypen bevaras endast under poddens livslängd. När du har tagit bort podden tas volymen bort. Den här volymen använder vanligtvis den underliggande lokala noddisklagringen, men den kan också bara finnas i nodens minne.

hemlighet

Du kan använda hemliga volymer för att mata in känsliga data i poddar, till exempel lösenord.

  1. Skapa en hemlighet med kubernetes-API:et.
  2. Definiera din podd eller distribution och begär en specifik hemlighet.
    • Hemligheter tillhandahålls endast till noder med en schemalagd podd som kräver dem.
    • Hemligheten lagras i tmpfs, skrivs inte till disk.
  3. När du tar bort den sista podden på en nod som kräver en hemlighet tas hemligheten bort från nodens tmpfs.
    • Hemligheter lagras inom ett visst namnområde och kan bara nås av poddar inom samma namnområde.

configMap

Du kan använda configMap för att mata in nyckel/värde-paregenskaper i poddar, till exempel programkonfigurationsinformation. Definiera programkonfigurationsinformation som en Kubernetes-resurs, enkelt uppdaterad och tillämpad på nya instanser av poddar när de distribueras.

Som att använda en hemlighet:

  1. Skapa en ConfigMap med kubernetes-API:et.
  2. Begär ConfigMap när du definierar en podd eller distribution.
    • ConfigMaps lagras i ett angivet namnområde och kan endast nås av poddar inom samma namnområde.

Beständiga volymer

Volymer som definierats och skapats som en del av poddens livscykel finns bara tills du tar bort podden. Poddar förväntar sig ofta att deras lagring ska finnas kvar om en podd schemaläggs om på en annan värd under en underhållshändelse, särskilt i StatefulSets. En beständig volym (PV) är en lagringsresurs som skapas och hanteras av Kubernetes-API:et och som kan finnas utanför livslängden för en enskild podd.

Du kan använda Azure Disks eller Files för att ange PersistentVolume. Enligt vad som anges i avsnittet Volymer bestäms valet av Diskar eller Filer ofta av behovet av samtidig åtkomst till data eller prestandanivån.

Beständiga volymer i ett AKS-kluster (Azure Kubernetes Services)

En PersistentVolume kan skapas statiskt av en klusteradministratör eller skapas dynamiskt av Kubernetes API-servern. Om en podd har schemalagts och begäranden för närvarande inte är tillgängliga kan Kubernetes skapa den underliggande Azure Disk- eller Files-lagringen och koppla den till podden. Dynamisk etablering använder en StorageClass för att identifiera vilken typ av Azure-lagring som behöver skapas.

Viktigt

Beständiga volymer kan inte delas av Windows- och Linux-poddar på grund av skillnader i filsystemstöd mellan de två operativsystemen.

Lagringsklasser

Om du vill definiera olika lagringsnivåer, till exempel Premium och Standard, kan du skapa en StorageClass.

StorageClass definierar även reclaimPolicy. När du tar bort podden och den beständiga volymen inte längre krävs, styr reclaimPolicy beteendet för den underliggande Azure-lagringsresursen. Den underliggande lagringsresursen kan antingen tas bort eller behållas för användning med en framtida podd.

För kluster som använder CSI-drivrutinerna (Container Storage Interface) skapas följande extra StorageClasses :

Behörighet Anledning
managed-csi Använder Lokalt redundant lagring i Azure StandardSSD (LRS) för att skapa en hanterad disk. Återtagandeprincipen säkerställer att den underliggande Azure-disken tas bort när den beständiga volymen som använde den tas bort. Lagringsklassen konfigurerar också de beständiga volymerna så att de kan expanderas. Du behöver bara redigera det beständiga volymanspråket med den nya storleken.
managed-csi-premium Använder lokalt redundant Azure Premium-lagring (LRS) för att skapa en hanterad disk. Återtagandeprincipen säkerställer igen att den underliggande Azure-disken tas bort när den beständiga volymen som använde den tas bort. På samma sätt gör den här lagringsklassen att beständiga volymer kan utökas.
azurefile-csi Använder Azure Standard Storage för att skapa en Azure-filresurs. Återtagandeprincipen säkerställer att den underliggande Azure-filresursen tas bort när den beständiga volymen som använde den tas bort.
azurefile-csi-premium Använder Azure Premium Storage för att skapa en Azure-filresurs. Återtagandeprincipen säkerställer att den underliggande Azure-filresursen tas bort när den beständiga volymen som använde den tas bort.
azureblob-nfs-premium Använder Azure Premium Storage för att skapa en Azure Blob Storage-container och ansluta med hjälp av NFS v3-protokollet. Återtagandeprincipen säkerställer att den underliggande Azure Blob Storage-containern tas bort när den beständiga volymen som använde den tas bort.
azureblob-fuse-premium Använder Azure Premium Storage för att skapa en Azure Blob Storage-container och ansluta med BlobFuse. Återtagandeprincipen säkerställer att den underliggande Azure Blob Storage-containern tas bort när den beständiga volymen som använde den tas bort.

Om du inte anger en StorageClass för en beständig volym används standardlagringsklassen. Se till att volymerna använder rätt lagring som du behöver när du begär beständiga volymer.

Viktigt

Från och med Kubernetes version 1.21 använder AKS endast CSI-drivrutiner och som standard. Klassen default kommer att vara samma som managed-csi

Du kan skapa en StorageClass för ytterligare behov med hjälp av kubectl. I följande exempel används Premium 托管磁盘 och anger att den underliggande Azure Disk ska behållas när du tar bort podden:

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

Anteckning

AKS stämmer av standardlagringsklasserna och skriver över alla ändringar du gör i dessa lagringsklasser.

Beständiga volymanspråk

En PersistentVolumeClaim begär lagring av en viss StorageClass, åtkomstläge och storlek. Kubernetes API-servern kan dynamiskt etablera den underliggande Azure-lagringsresursen om ingen befintlig resurs kan uppfylla anspråket baserat på den definierade StorageClass.

Podddefinitionen innehåller volymmonteringen när volymen har anslutits till podden.

Beständiga volymanspråk i ett AKS-kluster (Azure Kubernetes Services)

När en tillgänglig lagringsresurs har tilldelats den podd som begär lagring är PersistentVolume bunden till en PersistentVolumeClaim. Beständiga volymer är 1:1 mappade till anspråk.

Följande yaml-exempelmanifest visar ett beständigt volymanspråk som använder managed-premium StorageClass och begär en Disk 5Gi i storlek:

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

När du skapar en podddefinition anger du även:

  • Det beständiga volymanspråket för att begära önskad lagring.
  • VolumeMount för dina program för att läsa och skriva data.

Följande yaml-exempelmanifest visar hur det tidigare beständiga volymanspråket kan användas för att montera en volym på /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

Om du vill montera en volym i en Windows-container anger du enhetsbeteckningen och sökvägen. Exempel:

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

Nästa steg

Rekommenderade metoder finns i Metodtips för lagring och säkerhetskopiering i AKS.

Information om hur du använder CSI-drivrutiner finns i följande instruktionsartiklar:

Mer information om viktiga Kubernetes- och AKS-begrepp finns i följande artiklar: