Använda CSI-drivrutin (Azure Blob Storage Container Storage Interface)

Drivrutinen för Azure Blob Storage Container Storage Interface (CSI) är en CSI-specifikationskompatibel drivrutin som används av Azure Kubernetes Service (AKS) för att hantera livscykeln för Azure Blob Storage. CSI är en standard för att exponera godtyckliga block- och fillagringssystem för containerbaserade arbetsbelastningar på Kubernetes.

Genom att implementera och använda CSI kan AKS nu skriva, distribuera och iterera plugin-program för att exponera nya eller förbättra befintliga lagringssystem i Kubernetes. Att använda CSI-drivrutiner i AKS undviker att behöva röra kubernetes-kärnkoden och vänta på dess lanseringscykler.

När du monterar Azure Blob Storage som ett filsystem i en container eller podd kan du använda bloblagring med ett antal program som arbetar med enorma mängder ostrukturerade data. Till exempel:

  • Loggfilsdata
  • Bilder, dokument och strömmande video eller ljud
  • Haveriberedskapsdata

Data på objektlagringen kan nås av program med hjälp av BlobFuse- eller NFS-protokollet (Network File System) 3.0. Före introduktionen av CSI-drivrutinen för Azure Blob Storage var det enda alternativet att manuellt installera en drivrutin som inte stöds för åtkomst till Blob Storage från ditt program som körs på AKS. När CSI-drivrutinen för Azure Blob Storage är aktiverad i AKS finns det två inbyggda lagringsklasser: azureblob-fuse-premium och azureblob-nfs-premium.

Information om hur du skapar ett AKS-kluster med stöd för CSI-drivrutiner finns i CSI-drivrutiner på AKS. Mer information om skillnaderna i åtkomst mellan var och en av Azure-lagringstyperna med hjälp av NFS-protokollet finns i Jämför åtkomst till Azure Files, Blob Storage och Azure NetApp Files med NFS.

CSI-drivrutinsfunktioner för Azure Blob Storage

CSI-drivrutinen för Azure Blob Storage stöder följande funktioner:

  • BlobFuse- och NFS-protokoll (Network File System) version 3.0

Innan du börjar

  • Du behöver Azure CLI version 2.42 eller senare installerad och konfigurerad. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

  • Utför stegen i den här länken om du tidigare har installerat drivrutinen för CSI Blob Storage med öppen källkod för åtkomst till Azure Blob Storage från klustret.

Kommentar

Om blobfuse-proxy inte är aktiverad under installationen av drivrutinen för öppen källkod stör avinstallationen av öppen källkod drivrutinen befintliga blobfuse-monteringar. NFS-monteringar påverkas dock inte.

Aktivera CSI-drivrutin i ett nytt eller befintligt AKS-kluster

Med Hjälp av Azure CLI kan du aktivera CSI-drivrutinen för Blob Storage i ett nytt eller befintligt AKS-kluster innan du konfigurerar en beständig volym för användning av poddar i klustret.

Om du vill aktivera drivrutinen i ett nytt kluster tar du med parametern --enable-blob-driver med az aks create kommandot enligt följande exempel:

az aks create --enable-blob-driver -n myAKSCluster -g myResourceGroup

Om du vill aktivera drivrutinen i ett befintligt kluster inkluderar du parametern --enable-blob-driveraz aks update med kommandot enligt följande exempel:

az aks update --enable-blob-driver -n myAKSCluster -g myResourceGroup

Du uppmanas att bekräfta att det inte finns någon blob-CSI-drivrutin med öppen källkod installerad. När du har bekräftat kan det ta flera minuter att slutföra den här åtgärden. När den är klar bör du i utdata se statusen för att aktivera drivrutinen i klustret. Följande exempel liknar avsnittet som anger resultatet av föregående kommando:

"storageProfile": {
    "blobCsiDriver": {
      "enabled": true
    },

Inaktivera CSI-drivrutin i ett befintligt AKS-kluster

Med Hjälp av Azure CLI kan du inaktivera CSI-drivrutinen för Blob Storage i ett befintligt AKS-kluster när du tar bort den beständiga volymen från klustret.

Om du vill inaktivera drivrutinen i ett befintligt kluster tar du med parametern --disable-blob-driveraz aks update med kommandot enligt följande exempel:

az aks update --disable-blob-driver -n myAKSCluster -g myResourceGroup

Använda en beständig volym med Azure Blob Storage

En beständig volym (PV) representerar en lagringsdel som har etablerats för användning med Kubernetes-poddar. En PV kan användas av en eller flera poddar och kan etableras dynamiskt eller statiskt. Om flera poddar behöver samtidig åtkomst till samma lagringsvolym kan du använda Azure Blob Storage för att ansluta med hjälp av NFS (Network File System) eller blobfuse. Den här artikeln visar hur du dynamiskt skapar en Azure Blob Storage-container för användning av flera poddar i ett AKS-kluster.

Mer information om Kubernetes-volymer finns i Lagringsalternativ för program i AKS.

Skapa azure bloblagrings-PV:er dynamiskt med hjälp av de inbyggda lagringsklasserna

En lagringsklass används för att definiera hur en Azure Blob Storage-container skapas. Ett lagringskonto skapas automatiskt i nodresursgruppen för användning med lagringsklassen för att lagra Azure Blob Storage-containern. Välj någon av följande SKU:er för Azure Storage-redundans för skuName:

  • Standard_LRS: Lokalt redundant standardlagring
  • Premium_LRS: Lokalt redundant Premium-lagring
  • Standard_ZRS: Standard zonredundant lagring
  • Premium_ZRS: Premium-zonredundant lagring
  • Standard_GRS: Geo-redundant standardlagring
  • Standard_RAGRS: Geo-redundant standardlagring med läsåtkomst

När du använder CSI-drivrutiner för lagring i AKS finns det ytterligare två inbyggda lagringsklasser som använder Azure Blob CSI-lagringsdrivrutinen.

Återtagandeprincipen för båda lagringsklasserna säkerställer att den underliggande Azure Blob Storage tas bort när respektive PV tas bort. Lagringsklasserna konfigurerar också containern så att den kan expanderas som standard, eftersom parametern set allowVolumeExpansion är inställd på true.

Använd kommandot kubectl get sc för att se lagringsklasserna. I följande exempel visas de azureblob-fuse-premium lagringsklasser och azureblob-nfs-premium som är tillgängliga i ett AKS-kluster:

NAME                                  PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION     AGE
azureblob-fuse-premium               blob.csi.azure.com   Delete          Immediate              true                   23h
azureblob-nfs-premium                blob.csi.azure.com   Delete          Immediate              true                   23h

Om du vill använda dessa lagringsklasser skapar du en PVC och respektive podd som refererar till och använder dem. En PVC används för att automatiskt etablera lagring baserat på en lagringsklass. En PVC kan använda en av de förskapade lagringsklasserna eller en användardefinierad lagringsklass för att skapa en Azure Blob Storage-container för önskad SKU, storlek och protokoll för att kommunicera med den. När du skapar en podddefinition anges PVC för att begära önskad lagring.

Använda en StatefulSet

Om du vill spara en lagringsvolym för din arbetsbelastning kan du använda en StatefulSet. Detta gör det enklare att matcha befintliga volymer med nya poddar som ersätter alla som har misslyckats. Följande exempel visar hur du konfigurerar en StatefulSet för Blob Storage med antingen Blobfuse eller NFS-protokollet.

Förutsättningar

  • AkS-klustrets kontrollplansidentitet (dvs. ditt AKS-klusternamn) läggs till i rollen Deltagare i VNet och nätverkssäkerhetsgruppen.
  1. Skapa en fil med namnet azure-blob-nfs-ss.yaml och kopiera i följande YAML.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: statefulset-blob-nfs
      labels:
        app: nginx
    spec:
      serviceName: statefulset-blob-nfs
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
            - name: statefulset-blob-nfs
              image: mcr.microsoft.com/oss/nginx/nginx:1.19.5
              volumeMounts:
                - name: persistent-storage
                  mountPath: /mnt/blob
      updateStrategy:
        type: RollingUpdate
      selector:
        matchLabels:
          app: nginx
      volumeClaimTemplates:
        - metadata:
            name: persistent-storage
          spec:
            storageClassName: azureblob-nfs-premium
            accessModes: ["ReadWriteMany"]
            resources:
              requests:
                storage: 100Gi
    
  2. Skapa StatefulSet med kommandot kubectl create:

    kubectl create -f azure-blob-nfs-ss.yaml
    

Nästa steg