Membuat dan menggunakan volume dengan penyimpanan Azure Blob di Azure Kubernetes Service (AKS)

Aplikasi berbasis kontainer sering kali perlu mengakses dan mempertahankan data dalam volume data eksternal. Jika beberapa pod memerlukan akses bersamaan ke volume penyimpanan yang sama, Anda dapat menggunakan penyimpanan Azure Blob untuk terhubung menggunakan blobfuse atau Network File System (NFS).

Artikel ini menunjukkan cara:

  • Bekerja dengan volume persisten dinamis (PV) dengan menginstal driver Container Storage Interface (CSI) dan secara dinamis membuat kontainer penyimpanan Azure Blob untuk dilampirkan ke pod.
  • Bekerja dengan PV statis dengan membuat kontainer penyimpanan Azure Blob, atau gunakan yang sudah ada dan lampirkan ke pod.

Untuk informasi lebih lanjut tentang volume Kubernetes, lihat Opsi penyimpanan untuk aplikasi di AKS.

Sebelum Anda mulai

  • Aktifkan driver CSI penyimpanan Blob pada kluster AKS Anda.

  • Untuk mendukung akun penyimpanan Azure DataLake Gen2 saat menggunakan pemasangan blobfuse, Anda harus melakukan hal berikut:

    • Untuk membuat akun ADLS menggunakan driver dalam provisi dinamis, tentukan isHnsEnabled: "true" dalam parameter kelas penyimpanan.
    • Untuk mengaktifkan akses blobfuse ke akun ADLS dalam provisi statis, tentukan opsi --use-adls=true pemasangan dalam volume persisten.
    • Jika Anda akan mengaktifkan akun penyimpanan dengan Namespace Hierarkis, volume persisten yang ada harus di-remount dengan --use-adls=true opsi pemasangan.
  • Tentang cache blobfuse

    • Secara default, cache blobfuse terletak di /mnt direktori. Jika VM SKU menyediakan disk sementara, /mnt direktori dipasang pada disk sementara. Namun, jika VM SKU tidak menyediakan disk sementara, /mnt direktori dipasang pada disk OS, Anda dapat mengatur --tmp-path= opsi pemasangan untuk menentukan direktori cache yang berbeda

Memprovisikan volume secara dinamis

Bagian ini menyediakan panduan untuk administrator kluster yang ingin menyediakan satu atau beberapa volume persisten yang menyertakan detail penyimpanan Blob untuk digunakan oleh beban kerja. Klaim volume persisten (PVC) menggunakan objek kelas penyimpanan untuk provisi kontainer penyimpanan Azure Blob secara dinamis.

Parameter kelas penyimpanan untuk volume persisten dinamis

Tabel berikut menyertakan parameter yang dapat Anda gunakan untuk menentukan kelas penyimpanan kustom untuk klaim volume persisten Anda.

Nama Deskripsi Contoh Wajib Nilai default
skuName Tentukan jenis akun penyimpanan disk Azure (alias: storageAccountType). Standard_LRS, , Premium_LRSStandard_GRS,Standard_RAGRS No Standard_LRS
lokasi Tentukan lokasi Azure. eastus No Jika kosong, driver akan menggunakan nama lokasi yang sama dengan kluster saat ini.
ResourceGroup Tentukan nama grup sumber daya Azure Anda. myResourceGroup No Jika kosong, driver akan menggunakan nama grup sumber daya yang sama dengan kluster AKS saat ini.
storageAccount Tentukan nama akun penyimpanan Azure Anda. storageAccountName - Tidak untuk pemasangan
blobfuse - Ya untuk pemasangan NFSv3.
- Untuk pemasangan blobfuse: jika kosong, driver menemukan akun penyimpanan yang sesuai yang cocok dengan skuName dalam grup sumber daya yang sama. Jika nama akun penyimpanan disediakan, akun penyimpanan harus ada.
- Untuk pemasangan NFSv3, nama akun penyimpanan harus disediakan.
networkEndpointType Tentukan jenis titik akhir jaringan untuk akun penyimpanan yang dibuat oleh driver. Jika privateEndpoint ditentukan, titik akhir privat dibuat untuk akun penyimpanan. Untuk kasus lain, titik akhir layanan akan dibuat untuk protokol NFS.1 privateEndpoint No Untuk kluster AKS, tambahkan nama kluster AKS ke peran Kontributor dalam grup sumber daya yang menghosting VNET.
protokol Tentukan pemasangan blobfuse atau pemasangan NFSv3. fuse, nfs No fuse
containerName Tentukan nama kontainer (direktori) yang ada. kontainer No Jika kosong, driver membuat nama kontainer baru, dimulai dengan pvc-fuse untuk blobfuse atau pvc-nfs untuk NFS v3.
containerNamePrefix Tentukan awalan direktori penyimpanan Azure yang dibuat oleh driver. my Hanya boleh berisi huruf kecil, angka, tanda hubung, dan panjang harus kurang dari 21 karakter. No
server Tentukan nama domain akun penyimpanan Azure. Nama domain DNS akun penyimpanan yang sudah ada, misalnya <storage-account>.privatelink.blob.core.windows.net. No Jika kosong, driver menggunakan <storage-account>.blob.core.windows.net default atau nama domain DNS akun penyimpanan sovereign cloud lainnya.
allowBlobPublicAccess Mengizinkan atau melarang akses publik ke semua blob atau kontainer untuk akun penyimpanan yang dibuat oleh driver. true,false No false
storageEndpointSuffix Tentukan akhiran titik akhir penyimpanan Azure. core.windows.net No Jika kosong, driver akan menggunakan akhiran titik akhir penyimpanan default sesuai dengan lingkungan cloud.
tag Tag akan dibuat di akun penyimpanan baru. Format tag: 'foo=aaa,bar=bbb' No ""
matchTags Cocokkan tag saat driver mencoba menemukan akun penyimpanan yang sesuai. true,false No false
--- Parameter berikut hanya untuk blobfuse --- --- ---
subscriptionID Tentukan ID langganan Azure tempat direktori penyimpanan blob akan dibuat. ID langganan Azure No Jika tidak kosong, resourceGroup harus disediakan.
storeAccountKey Tentukan kunci akun penyimpanan ke rahasia Kubernetes.

Catatan:
false berarti driver menggunakan identitas kubelet untuk mendapatkan kunci akun.
true,false No true
secretName Tentukan nama rahasia untuk menyimpan kunci akun. No
secretNamespace Tentukan namespace rahasia untuk menyimpan kunci akun. default,kube-system, dll. No namespace pvc
isHnsEnabled Aktifkan Hierarchical namespace untuk akun penyimpanan Azure Data Lake. true,false No false
--- Parameter berikut hanya untuk protokol NFS --- --- ---
mountPermissions Tentukan izin folder yang dipasang. Default adalah 0777. Jika diatur ke 0, driver tidak akan dilakukan chmod setelah pemasangan. 0777 No

1 Jika akun penyimpanan dibuat oleh driver, maka Anda hanya perlu menentukan networkEndpointType: privateEndpoint parameter di kelas penyimpanan. Driver CSI membuat titik akhir privat bersama dengan akun. Jika Anda membawa akun penyimpanan Anda sendiri, maka Anda perlu membuat titik akhir privat untuk akun penyimpanan.

Membuat klaim volume persisten menggunakan kelas penyimpanan bawaan

Klaim volume persisten (PVC) menggunakan objek kelas penyimpanan untuk provisi kontainer penyimpanan Azure Blob secara dinamis. YAML berikut dapat digunakan untuk membuat klaim volume persisten berukuran 5 GB dengan akses ReadWriteMany, menggunakan kelas penyimpanan bawaan. Untuk informasi lebih lanjut tentang mode akses, lihat dokumentasi Volume persisten kubernetes.

  1. Buat file bernama blob-nfs-pvc.yaml dan salin dalam YAML berikut.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azure-blob-storage
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: azureblob-nfs-premium
      resources:
        requests:
          storage: 5Gi
    
  2. Buat klaim volume persisten dengan perintah kubectl create :

    kubectl create -f blob-nfs-pvc.yaml
    

Setelah selesai, kontainer penyimpanan Blob akan dibuat. Anda bisa menggunakan perintah memperoleh kubectl untuk melihat status PVC:

kubectl get pvc azure-blob-storage

Output perintah menyerupai contoh berikut:

NAME                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                AGE
azure-blob-storage   Bound    pvc-b88e36c5-c518-4d38-a5ee-337a7dda0a68   5Gi        RWX            azureblob-nfs-premium       92m

Menggunakan klaim volume persisten

YAML berikut membuat pod yang menggunakan klaim volume persisten azure-blob-storage untuk memasang penyimpanan Azure Blob di `/mnt/blob' path.

  1. Buat nama file blob-nfs-pvdan salin dalam YAML berikut. Pastikan bahwa claimName cocok dengan PVC yang dibuat pada langkah sebelumnya.

    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
    spec:
      containers:
      - name: mypod
        image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpine
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        volumeMounts:
        - mountPath: "/mnt/blob"
          name: volume
          readOnly: false
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: azure-blob-storage
    
  2. Buat Pod dengan perintah kubectl apply:

    kubectl apply -f blob-nfs-pv.yaml
    
  3. Setelah pod berada dalam kondisi berjalan, jalankan perintah berikut untuk membuat file baru bernama test.txt.

    kubectl exec mypod -- touch /mnt/blob/test.txt
    
  4. Untuk memvalidasi disk terpasang dengan benar, jalankan perintah berikut dan verifikasi bila Anda melihat file test.txt dalam output:

    kubectl exec mypod -- ls /mnt/blob
    

    Output perintah menyerupai contoh berikut:

    test.txt
    

Membuat kelas penyimpanan kustom

Kelas penyimpanan default sesuai dengan skenario yang paling umum, tetapi tidak semua. Dalam beberapa kasus, Anda mungkin ingin memiliki kelas penyimpanan Anda sendiri yang disesuaikan dengan parameter Anda sendiri. Di bagian ini, kami memberikan dua contoh. Yang pertama menggunakan protokol NFS, dan yang kedua menggunakan blobfuse.

Kelas penyimpanan menggunakan protokol NFS

Dalam contoh ini, manifes berikut mengonfigurasi pemasangan kontainer penyimpanan Blob menggunakan protokol NFS. Gunakan untuk menambahkan parameter tag.

  1. Buat file bernama blob-nfs-sc.yaml, dan tempelkan manifes contoh berikut:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: azureblob-nfs-premium
    provisioner: blob.csi.azure.com
    parameters:
      protocol: nfs
      tags: environment=Development
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    mountOptions:
      - nconnect=4
    
  2. Buat kelas penyimpanan dengan perintah kubectl apply:

    kubectl apply -f blob-nfs-sc.yaml
    

    Output perintah menyerupai contoh berikut:

    storageclass.storage.k8s.io/blob-nfs-premium created
    

Kelas penyimpanan menggunakan blobfuse

Dalam contoh ini, manifes berikut mengonfigurasi menggunakan blobfuse dan memasang kontainer penyimpanan Blob. Gunakan untuk memperbarui parameter skuName.

  1. Buat file bernama blobfuse-sc.yaml, dan tempelkan manifes contoh berikut:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: azureblob-fuse-premium
    provisioner: blob.csi.azure.com
    parameters:
      skuName: Standard_GRS  # available values: Standard_LRS, Premium_LRS, Standard_GRS, Standard_RAGRS
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    mountOptions:
      - -o allow_other
      - --file-cache-timeout-in-seconds=120
      - --use-attr-cache=true
      - --cancel-list-on-mount-seconds=10  # prevent billing charges on mounting
      - -o attr_timeout=120
      - -o entry_timeout=120
      - -o negative_timeout=120
      - --log-level=LOG_WARNING  # LOG_WARNING, LOG_INFO, LOG_DEBUG
      - --cache-size-mb=1000  # Default will be 80% of available memory, eviction will happen beyond that.
    
  2. Buat kelas penyimpanan dengan perintah kubectl apply:

    kubectl apply -f blobfuse-sc.yaml
    

    Output perintah menyerupai contoh berikut:

    storageclass.storage.k8s.io/blob-fuse-premium created
    

Provisi volume secara statis

Bagian ini menyediakan panduan untuk administrator kluster yang ingin membuat satu atau beberapa volume persisten yang menyertakan detail penyimpanan Blob untuk digunakan oleh beban kerja.

Parameter provisi statis untuk volume persisten

Tabel berikut menyertakan parameter yang dapat Anda gunakan untuk menentukan volume persisten.

Nama Deskripsi Contoh Wajib Nilai default
volumeHandle Tentukan nilai yang dapat digunakan driver untuk mengidentifikasi kontainer blob penyimpanan secara unik dalam kluster. Cara yang direkomendasikan untuk menghasilkan nilai unik adalah dengan menggabungkan nama akun penyimpanan dan nama kontainer yang unik secara global: {account-name}_{container-name}.
Catatan: Karakter #, / dicadangkan untuk penggunaan internal dan tidak dapat digunakan dalam handel volume.
Ya
volumeAttributes.resourceGroup Tentukan nama grup sumber daya Azure. myResourceGroup No Jika kosong, driver menggunakan nama grup sumber daya yang sama dengan kluster saat ini.
volumeAttributes.storageAccount Tentukan nama akun penyimpanan Azure yang sudah ada. storageAccountName Ya
volumeAttributes.containerName Tentukan nama kontainer yang ada. kontainer Ya
volumeAttributes.protocol Tentukan pemasangan blobfuse atau pemasangan NFS v3. fuse, nfs No fuse
--- Parameter berikut hanya untuk blobfuse --- --- ---
volumeAttributes.secretName Nama rahasia yang menyimpan nama dan kunci akun penyimpanan (hanya berlaku untuk SMB). No
volumeAttributes.secretNamespace Tentukan namespace layanan rahasia untuk menyimpan kunci akun. default No Namespace layanan Pvc
nodeStageSecretRef.name Tentukan nama rahasia yang menyimpan salah satu hal berikut ini:
azurestorageaccountkey
azurestorageaccountsastoken
msisecret
azurestoragespnclientsecret.
No Nama rahasia Kubernetes yang ada
nodeStageSecretRef.namespace Tentukan namespace layanan rahasia. Namespace Kubernetes Ya
--- Parameter berikut hanya untuk protokol NFS --- --- ---
volumeAttributes.mountPermissions Tentukan izin folder yang dipasang. 0777 No
--- Parameter berikut hanya untuk pengaturan NFS VNet --- --- ---
vnetResourceGroup Tentukan grup sumber daya VNet yang menghosting jaringan virtual. myResourceGroup No Jika kosong, driver akan menggunakan nilai vnetResourceGroup yang ditentukan dalam file konfigurasi cloud Azure.
vnetName Tentukan nama jaringan virtual. aksVNet No Jika kosong, driver akan menggunakan nilai vnetName yang ditentukan dalam file konfigurasi cloud Azure.
subnetName Tentukan nama subnet node agen yang ada. aksSubnet No Jika kosong, driver akan menggunakan nilai subnetName dalam file konfigurasi cloud Azure.
--- Parameter berikut hanya untuk fitur: blobfuse
Identitas Terkelola dan Autentikasi Nama Prinsipal Layanan
--- --- ---
volumeAttributes.AzureStorageAuthType Tentukan jenis autentikasi. Key, , SASMSI,SPN No Key
volumeAttributes.AzureStorageIdentityClientID Tentukan ID Klien Identitas. No
volumeAttributes.AzureStorageIdentityObjectID Tentukan ID Objek Identitas. No
volumeAttributes.AzureStorageIdentityResourceID Tentukan ID Sumber Daya Identitas. No
volumeAttributes.MSIEndpoint Tentukan titik akhir MSI. No
volumeAttributes.AzureStorageSPNClientID Tentukan ID Klien Nama Prinsipal Layanan (SPN) Azure. No
volumeAttributes.AzureStorageSPNTenantID Tentukan ID Penyewa Azure SPN. No
volumeAttributes.AzureStorageAADEndpoint Tentukan titik akhir Microsoft Entra. No
--- Parameter berikut hanya untuk fitur: kunci akun baca blobfuse atau token SAS dari brankas kunci --- --- ---
volumeAttributes.keyVaultURL Tentukan nama DNS Azure Key Vault. {vault-name}.vault.azure.net No
volumeAttributes.keyVaultSecretName Tentukan nama rahasia Azure Key Vault. Nama rahasia Azure Key Vault yang sudah ada. No
volumeAttributes.keyVaultSecretVersion Versi rahasia Azure Key Vault. Versi yang sudah ada No Jika kosong, driver akan menggunakan versi saat ini.

Membuat kontainer penyimpanan Blob

Saat Anda membuat disk Azure untuk penggunaan dengan AKS, Anda dapat membuat sumber daya disk grup sumber daya node. Pendekatan ini mengizinkan kluster AKS untuk mengakses dan mengelola sumber daya disk.

Untuk artikel ini, buat kontainer di node grup sumber daya. Pertama, dapatkan nama grup sumber daya dengan perintah perlihatkan az aks dan tambahkan parameter kueri --query nodeResourceGroup. Contoh berikut mendapatkan grup sumber daya node untuk kluster AKS bernama myAKSCluster dalam nama grup sumber daya myResourceGroup:

az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv

Output perintah menyerupai contoh berikut:

MC_myResourceGroup_myAKSCluster_eastus

Selanjutnya, buat kontainer untuk menyimpan blob mengikuti langkah-langkah dalam Mengelola penyimpanan blob untuk mengotorisasi akses lalu membuat kontainer.

Pasang volume

Di bagian ini, Anda memasang volume persisten menggunakan protokol NFS atau Blobfuse.

Memasang penyimpanan Blob menggunakan protokol NFS v3 tidak melakukan autentikasi menggunakan kunci akun. Kluster AKS Anda harus berada di jaringan virtual yang sama atau di-peering sebagai node agen. Satu-satunya cara untuk mengamankan data dalam akun penyimpanan Anda adalah dengan menggunakan pengaturan jaringan virtual dan keamanan jaringan lainnya. Untuk informasi selengkapnya tentang cara menyiapkan akses NFS ke akun penyimpanan Anda, lihat Memasang Blob Storage dengan menggunakan protokol Network File System (NFS) 3.0.

Contoh berikut menunjukkan cara memasang kontainer penyimpanan Blob sebagai volume persisten menggunakan protokol NFS.

  1. Buat file bernama pv-blob-nfs.yaml dan salin dalam YAML berikut. Di bawah storageClass, perbarui resourceGroup, storageAccount, dan containerName.

    Catatan

    volumeHandle nilai harus menjadi volumeID unik untuk setiap kontainer blob penyimpanan yang identik dalam kluster. Karakter # dan / dicadangkan untuk penggunaan internal dan tidak dapat digunakan.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: blob.csi.azure.com
      name: pv-blob
    spec:
      capacity:
        storage: 1Pi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain  # If set as "Delete" container would be removed after pvc deletion
      storageClassName: azureblob-nfs-premium
      mountOptions:
        - nconnect=4
      csi:
        driver: blob.csi.azure.com
        # make sure volumeid is unique for every identical storage blob container in the cluster
        # character `#` and `/` are reserved for internal use and cannot be used in volumehandle
        volumeHandle: account-name_container-name
        volumeAttributes:
          resourceGroup: resourceGroupName
          storageAccount: storageAccountName
          containerName: containerName
          protocol: nfs
    

    Catatan

    Meskipun atribut kapasitas APIKubernetes bersifat wajib, nilai ini tidak digunakan oleh driver CSI penyimpanan Azure Blob karena Anda dapat menulis data secara fleksibel hingga mencapai batas kapasitas akun penyimpanan Anda. Nilai capacity atribut hanya digunakan untuk pencocokan ukuran antara PersistentVolumes dan PersistentVolumeClaims. Sebaiknya gunakan nilai tinggi fiktif. Pod melihat volume yang dipasang dengan ukuran fiktif 5 Petabyte.

  2. Jalankan perintah berikut untuk membuat volume persisten menggunakan perintah kubectl create yang merujuk pada file YAML yang dibuat sebelumnya:

    kubectl create -f pv-blob-nfs.yaml
    
  3. Buat pvc-blob-nfs.yaml file dengan PersistentVolumeClaim. Contohnya:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-blob
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
      volumeName: pv-blob
      storageClassName: azureblob-nfs-premium
    
  4. Jalankan perintah berikut untuk membuat klaim volume persisten menggunakan perintah kubectl create yang merujuk pada file YAML yang dibuat sebelumnya:

    kubectl create -f pvc-blob-nfs.yaml
    

Menggunakan volume persisten

YAML berikut membuat pod yang menggunakan volume persisten atau klaim volume persisten bernama pvc-blob yang dibuat sebelumnya, untuk memasang penyimpanan Azure Blob di /mnt/blob jalur.

  1. Buat nama file nginx-pod-blob.yamldan salin dalam YAML berikut. Pastikan bahwa claimName cocok dengan PVC yang dibuat pada langkah sebelumnya saat membuat volume persisten untuk NFS atau Blobfuse.

    kind: Pod
    apiVersion: v1
    metadata:
      name: nginx-blob
    spec:
      nodeSelector:
        "kubernetes.io/os": linux
      containers:
        - image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpine
          name: nginx-blob
          volumeMounts:
            - name: blob01
              mountPath: "/mnt/blob"
              readOnly: false
      volumes:
        - name: blob01
          persistentVolumeClaim:
            claimName: pvc-blob
    
  2. Jalankan perintah berikut untuk membuat pod dan memasang PVC menggunakan perintah kubectl create yang merujuk pada file YAML yang dibuat sebelumnya:

    kubectl create -f nginx-pod-blob.yaml
    
  3. Jalankan perintah berikut untuk membuat sesi shell interaktif dengan pod untuk memverifikasi penyimpanan Blob yang dipasang:

    kubectl exec -it nginx-blob -- df -h
    

    Output perintah menyerupai contoh berikut:

    Filesystem      Size  Used Avail Use% Mounted on
    ...
    blobfuse         14G   41M   13G   1% /mnt/blob
    ...
    

Langkah berikutnya