Bagikan melalui


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

Persistent volume mewakili sebuah bagian penyimpanan yang telah disiapkan untuk penggunaan dengan pod Kubernetes. Anda dapat menggunakan volume persisten dengan satu atau banyak pod, dan dapat disediakan secara dinamis atau statis. Jika beberapa pod memerlukan akses bersamaan ke volume penyimpanan yang sama, Anda dapat menggunakan Azure Files untuk terhubung menggunakan protokol Server Message Block (SMB). Artikel ini menunjukkan cara membuat berbagi file Azure secara dinamis untuk digunakan oleh beberapa pod di kluster Azure Kubernetes Service (AKS).

Artikel ini menunjukkan cara:

  • Bekerja dengan volume persisten dinamis (PV) dengan menginstal driver Antarmuka Penyimpanan Kontainer (CSI) dan secara dinamis membuat satu atau beberapa berkas berbagi Azure untuk disambungkan ke pod.
  • Bekerja dengan PV statis dengan membuat satu atau beberapa berbagi file Azure, atau menggunakan yang sudah ada dan melampirkannya ke pod.

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

Sebelum Anda mulai

  • Anda memerlukan akun penyimpanan Azure.
  • Pastikan Anda memiliki Azure CLI versi 2.0.59 atau yang lebih baru yang diinstal dan dikonfigurasi. Jalankan az --version untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.
  • Saat memilih antara berbagi file standar dan premium, penting bagi Anda untuk memahami model provisi dan persyaratan pola penggunaan yang diharapkan yang Anda rencanakan untuk dijalankan di Azure Files. Untuk informasi selengkapnya, lihat Memilih tingkat performa Azure Files berdasarkan pola penggunaan.

Memprovisikan volume secara dinamis

Bagian ini memberikan panduan kepada administrator kluster yang ingin menyediakan satu atau beberapa volume persisten, termasuk detail satu atau beberapa share pada Azure Files. Klaim volume persisten (PVC) menggunakan objek kelas penyimpanan untuk menyediakan berbagi file Azure Files secara dinamis.

Parameter kelas penyimpanan untuk PersistentVolumes dinamis

Tabel berikut menyertakan parameter yang dapat Anda gunakan untuk menentukan kelas penyimpanan kustom untuk PersistentVolumeClaim Anda.

Nama Makna Nilai yang Tersedia Wajib Nilai bawaan
tingkatAksesAkun Tingkat akses untuk akun penyimpanan Akun standar dapat memilih Hot atau Cool, dan akun Premium hanya dapat memilih Premium. Tidak Kosong. Gunakan pengaturan default untuk jenis akun penyimpanan yang berbeda.
accountQuota Membatasi kuota untuk akun. Anda dapat menentukan kuota maksimum dalam GB (102400GB secara default). Jika akun melebihi kuota yang ditentukan, pengemudi tidak akan memilih akun tersebut. Tidak 102400
izinkanAksesPublikBlob Mengizinkan atau melarang akses publik ke semua blob atau kontainer untuk akun penyimpanan yang dibuat oleh driver. true atau false Tidak false
nonaktifkanKebijakanPenahananPenghapusan Tentukan apakah nonaktifkan DeleteRetentionPolicy untuk akun penyimpanan yang dibuat oleh driver. true atau false Tidak false
folderName Tentukan nama folder di berbagi file Azure. Nama folder yang sudah ada di berbagi file Azure. Tidak Jika nama folder tidak ada di berbagi file, pemasangan gagal.
dapatkanAkunTerbaru Menentukan apakah akan mendapatkan kunci akun terbaru berdasarkan waktu pembuatan. Driver ini mendapatkan kunci pertama secara default. true atau false Tidak false
lokasi Tentukan wilayah Azure dari akun penyimpanan Azure. Contohnya,eastus. Tidak Jika kosong, driver menggunakan nama lokasi yang sama dengan kluster AKS saat ini.
matchTags Cocokkan tag saat driver mencoba menemukan akun penyimpanan yang sesuai. true atau false Tidak false
tipe titik akhir jaringan 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 dibuat secara default. "",privateEndpoint Tidak ""
protokol Tentukan protokol berbagi file. smb, nfs Tidak smb
requireInfraEncryption Tentukan apakah layanan menerapkan lapisan enkripsi sekunder dengan kunci yang dikelola platform untuk data yang disimpan pada akun penyimpanan yang dibuat oleh pengemudi. true atau false Tidak false
KelompokSumberDaya Tentukan grup sumber daya untuk Disk Azure. Nama grup sumber daya yang ada Tidak Jika kosong, driver menggunakan nama grup sumber daya yang sama dengan kluster AKS saat ini.
pilihAkunYangCocokSecaraAcak Menentukan apakah akan memilih akun yang cocok secara acak. Secara default, driver selalu memilih akun pencocokan pertama dalam urutan alfabet (Catatan: Driver ini menggunakan cache pencarian akun, yang menghasilkan distribusi pembuatan file yang tidak merata di beberapa akun). true atau false Tidak false
server Tentukan alamat server akun penyimpanan Azure. Alamat server yang ada, misalnya accountname.privatelink.file.core.windows.net. Tidak Jika kosong, driver menggunakan default accountname.file.core.windows.net atau alamat akun sovereign cloud lainnya.
shareAccessTier Tingkat akses untuk berbagi file Akun tujuan umum v2 dapat memilih antara TransactionOptimized (default), Hot, dan Cool. Jenis akun penyimpanan premium hanya untuk berbagi file. Tidak Kosong. Gunakan pengaturan default untuk jenis akun penyimpanan yang berbeda.
namaBerbagi Tentukan nama berbagi file Azure. Nama berbagi file Azure yang sudah ada atau yang baru. Tidak Jika kosong, driver menghasilkan nama berbagi file Azure.
prefiksNamaBagian Tentukan prefix nama untuk berbagi file Azure yang dihasilkan oleh driver. Nama berbagi hanya boleh berisi huruf kecil, angka, tanda hubung, dan panjang harus kurang dari 21 karakter. Tidak
skuName Jenis akun penyimpanan Azure Files (alias: storageAccountType) Standard_LRS, Standard_ZRS, Standard_GRS, Standard_RAGRS, Standard_RAGZRS, Premium_LRS, Premium_ZRS Tidak Standard_LRS
Ukuran berbagi file minimum untuk jenis akun Premium adalah 100 GB.
Jenis akun ZRS didukung di wilayah terbatas.
Berbagi file NFS hanya mendukung jenis akun Premium.
akun penyimpanan Tentukan nama akun penyimpanan Azure Anda. namaAkunPenyimpanan (storageAccountName) Tidak- Ketika nama akun penyimpanan tertentu tidak disediakan, driver akan mencari akun penyimpanan yang sesuai yang cocok dengan pengaturan akun dalam grup sumber daya yang sama. Jika gagal menemukan akun penyimpanan yang cocok, maka akan dibuat akun baru. Namun, jika nama akun penyimpanan ditentukan, akun penyimpanan harus sudah ada.
storageEndpointSuffix Tentukan akhiran titik akhir penyimpanan Azure. core.windows.net, core.chinacloudapi.cn, dll. Tidak Jika kosong, driver menggunakan akhiran titik akhir penyimpanan default sesuai dengan lingkungan cloud. Contohnya,core.windows.net.
tag Tag dibuat di akun penyimpanan baru. Format tag: 'foo=aaa,bar=bbb' Tidak ""
--- Parameter berikut hanya untuk protokol SMB --- ---
ID berlangganan Tentukan ID langganan Azure di mana file share Azure dibuat. ID langganan Azure Tidak Jika tidak kosong, resourceGroup harus disediakan.
kunciAkunToko Tentukan apakah akan menyimpan kunci akun ke secret Kubernetes. true atau false
false berarti driver menggunakan identitas kubelet untuk mendapatkan kunci akun.
Tidak true
namaRahasia Tentukan nama rahasia untuk menyimpan kunci akun. Tidak
ruangNamaRahasia Tentukan namespace rahasia untuk menyimpan kunci akun.

Catatan:
Jika secretNamespace tidak ditentukan, rahasia dibuat di namespace yang sama dengan pod.
default,kube-system, dll. Tidak Namespace PVC, misalnya csi.storage.k8s.io/pvc/namespace
useDataPlaneAPI Tentukan apakah akan menggunakan DATA Plane API untuk berbagi file create/delete/resize, yang dapat menyelesaikan masalah pembatasan SRP API karena API data plane hampir tidak memiliki batas, sementara itu akan gagal ketika ada firewall atau pengaturan Vnet pada akun penyimpanan. true atau false Tidak false
--- Parameter berikut hanya untuk protokol NFS --- ---
Izin Pemasangan Izin untuk folder yang dipasang. Default adalah 0777. Jika diatur ke 0, driver tidak melakukan chmod setelah pemasangan 0777 Tidak
rootSquashType Tentukan perilaku root squashing pada saham. Defaultnya adalah NoRootSquash AllSquash, NoRootSquash, RootSquash Tidak
--- Parameter berikut hanya untuk pengaturan VNet. Misalnya, NFS, titik akhir privat --- ---
kebijakanPerubahanGrupFS Menunjukkan cara driver mengubah kepemilikan volume. Pod securityContext.fsGroupChangePolicy diabaikan. OnRootMismatch (standar), Always, None Tidak OnRootMismatch
namaSubjaringan Nama subnet Nama subnet yang ada untuk node agen. Tidak Jika kosong, driver akan menggunakan nilai subnetName dalam file konfigurasi cloud Azure.
vnetName Nama jaringan virtual Nama jaringan virtual yang ada. Tidak jika kosong, driver akan memperbarui semua subnet di bawah jaringan virtual kluster.
vnetResourceGroup Tentukan grup sumber daya VNet tempat jaringan virtual ditentukan. Nama grup sumber daya yang ada. Tidak Jika kosong, driver akan menggunakan nilai vnetResourceGroup dalam file konfigurasi cloud Azure.

1 Jika akun penyimpanan dibuat oleh driver, maka Anda hanya perlu menentukan networkEndpointType: privateEndpoint parameter di kelas penyimpanan. Driver CSI membuat titik akhir privat dan zona DNS privat (bernama privatelink.file.core.windows.net) bersama dengan akun. Jika Anda membawa akun penyimpanan Anda sendiri, maka Anda perlu membuat titik akhir privat untuk akun penyimpanan. Jika Anda menggunakan penyimpanan Azure Files di kluster terisolasi jaringan, Anda harus membuat kelas penyimpanan kustom dengan "networkEndpointType: privateEndpoint". Anda dapat mengikuti sampel di bawah ini untuk referensi.

---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azurefile-csi
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
  skuName: Premium_LRS  # available values: Premium_LRS, Premium_ZRS, Standard_LRS, Standard_GRS, Standard_ZRS, Standard_RAGRS, Standard_RAGZRS
  networkEndpointType: privateEndpoint
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
  - dir_mode=0777  # modify this permission if you want to enhance the security
  - file_mode=0777
  - mfsymlinks
  - cache=strict  # https://linux.die.net/man/8/mount.cifs
  - nosharesock  # reduce probability of reconnect race
  - actimeo=30  # reduce latency for metadata-heavy workload
  - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks

Buat kelas penyimpanan

Kelas penyimpanan menentukan cara membuat berbagi file Azure. Akun penyimpanan secara otomatis dibuat di grup sumber daya simpul untuk digunakan dengan kelas penyimpanan guna menyimpan share file Azure Files. Pilih salah satu dari SKU redundansi penyimpanan Azure berikut untuk skuName:

  • Standard_LRS: Penyimpanan standar redundan lokal (LRS)
  • Standard_GRS: Penyimpanan geo-redundansi standar (GRS)
  • Standard_ZRS: Penyimpanan redundan zona standar (ZRS)
  • Standard_RAGRS: Penyimpanan geo-redundan akses baca standar (RA-GRS)
  • Premium_LRS: Penyimpanan lokal redundan premium (LRS)
  • Premium_ZRS: Penyimpanan redundan zona premium (ZRS)

Catatan

Ukuran minimum untuk berbagi file premium adalah 100GB.

Untuk informasi lebih lanjut tentang kelas penyimpanan Kubernetes untuk Azure Files, lihat Kubernetes Storage Classes.

  1. Buat nama file azure-file-sc.yaml dan salin dalam contoh manifes berikut. Untuk informasi selengkapnya tentang mountOptions, lihat bagian Opsi pemasangan.

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: my-azurefile
    provisioner: file.csi.azure.com # replace with "kubernetes.io/azure-file" if aks version is less than 1.21
    allowVolumeExpansion: true
    mountOptions:
     - dir_mode=0777
     - file_mode=0777
     - uid=0
     - gid=0
     - mfsymlinks
     - cache=strict
     - actimeo=30
     - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
    parameters:
      skuName: Premium_LRS
    
  2. Buat kelas penyimpanan menggunakan kubectl apply perintah .

    kubectl apply -f azure-file-sc.yaml
    

Buat klaim volume persisten

Klaim volume persisten (PVC) menggunakan objek kelas penyimpanan untuk menyediakan berbagi file Azure secara dinamis. Anda dapat menggunakan YAML berikut untuk membuat klaim volume persisten berukuran 100 GB dengan akses ReadWriteMany . Untuk informasi selengkapnya tentang mode akses, lihat Volume Persisten Kubernetes.

  1. Buat file bernama azure-file-pvc.yaml dan salin dalam YAML berikut. Pastikan cocok dengan storageClassName kelas penyimpanan yang Anda buat di langkah sebelumnya.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-azurefile
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: my-azurefile
      resources:
        requests:
          storage: 100Gi
    

    Catatan

    Jika menggunakan Premium_LRS SKU untuk kelas penyimpanan Anda, nilai minimum untuk storage harus 100Gi.

  2. Buat klaim volume persisten menggunakan kubectl apply perintah .

    kubectl apply -f azure-file-pvc.yaml
    

    Setelah selesai, pembuatan berbagi file selesai. Sebuah rahasia Kubernetes juga dibuat, yang mencakup informasi koneksi dan kredensial. Anda dapat menggunakan kubectl get perintah untuk melihat status PVC:

    kubectl get pvc my-azurefile
    

    Hasil dari output perintah menyerupai contoh berikut:

    NAME           STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
    my-azurefile   Bound     pvc-8436e62e-a0d9-11e5-8521-5a8664dc0477   100Gi       RWX            my-azurefile      5m
    

Menggunakan volume persisten

YAML berikut membuat pod yang menggunakan klaim persisten volume my-azurefile untuk memasang berbagi berkas Azure Files di jalur /mnt/azure. Untuk kontainer Windows Server, tentukan mountPath menggunakan konvensi jalur Windows, seperti 'D:'.

  1. Buat nama file azure-pvc-files.yamldan salin dalam YAML berikut. Pastikan claimName sesuai dengan PVC yang Anda buat di langkah sebelumnya.

    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
              readOnly: false
      volumes:
       - name: volume
         persistentVolumeClaim:
           claimName: my-azurefile
    
  2. Buat pod menggunakan kubectl apply perintah .

    kubectl apply -f azure-pvc-files.yaml
    

    Anda sekarang memiliki pod yang aktif dengan file share Azure Files yang dipasang di direktori /mnt/azure. Konfigurasi ini dapat dilihat saat memeriksa pod Anda menggunakan perintah kubectl describe. Contoh output ringkas berikut menunjukkan volume yang dipasang dalam kontainer.

    Containers:
      mypod:
        Container ID:   docker://053bc9c0df72232d755aa040bfba8b533fa696b123876108dec400e364d2523e
        Image:          mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        Image ID:       docker-pullable://nginx@sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
        State:          Running
          Started:      Fri, 01 Mar 2019 23:56:16 +0000
        Ready:          True
        Mounts:
          /mnt/azure from volume (rw)
          /var/run/secrets/kubernetes.io/serviceaccount from default-token-8rv4z (ro)
    [...]
    Volumes:
      volume:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  my-azurefile
        ReadOnly:   false
    [...]
    

Opsi pemasangan

Nilai default untuk fileMode dan dirMode adalah 0777 untuk Kubernetes versi 1.13.0 ke atas. Jika Anda membuat volume persisten secara dinamis dengan kelas penyimpanan, Anda dapat menentukan opsi pemasangan pada objek kelas penyimpanan. Untuk informasi selengkapnya, lihat Opsi pemasangan. Contoh berikut menetapkan 0777:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: my-azurefile
provisioner: file.csi.azure.com # replace with "kubernetes.io/azure-file" if aks version is less than 1.21
allowVolumeExpansion: true
mountOptions:
  - dir_mode=0777
  - file_mode=0777
  - uid=0
  - gid=0
  - mfsymlinks
  - cache=strict
  - actimeo=30
  - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
parameters:
  skuName: Premium_LRS

Catatan

Lokasi untuk mengonfigurasi opsi pemasangan (mountOptions) bergantung pada apakah Anda menyediakan volume persisten dinamis atau statis. Jika Anda secara dinamis menyediakan volume dengan kelas penyimpanan, tentukan opsi pemasangan pada objek kelas penyimpanan (jenis: StorageClass). Jika Anda secara statis menyediakan volume, tentukan opsi pemasangan pada objek PersistentVolume (jenis: PersistentVolume). Jika Anda memasang berbagi file sebagai volume sebaris, tentukan opsi pemasangan pada objek Pod (jenis: Pod).

Menggunakan tag Azure

Untuk detail selengkapnya tentang menggunakan tag Azure, lihat Menggunakan tag Azure di Azure Kubernetes Service (AKS).

Provisi volume secara statis

Bagian ini menyediakan panduan untuk administrator kluster yang ingin membuat satu atau beberapa volume persisten yang menyertakan detail dari berbagi berkas Azure yang sudah ada untuk digunakan dengan tugas.

Parameter provisi statis untuk PersistentVolume

Tabel berikut menyertakan parameter yang dapat Anda gunakan untuk menentukan PersistentVolume.

Nama Makna Nilai yang Tersedia Wajib Nilai bawaan
volumeAttributes.resourceGroup Tentukan nama grup sumber daya Azure Anda. KelompokSumberDayaSaya Tidak Jika kosong, driver menggunakan nama grup sumber daya yang sama dengan kluster saat ini.
volumeAttributes.storageAccount Tentukan nama akun penyimpanan Azure yang sudah ada. namaAkunPenyimpanan (storageAccountName) Ya
volumeAttributes.shareName Tentukan nama berbagi file Azure. fileShareName Ya
volumeAttributes.folderName Tentukan nama folder di berbagi file Azure. folderName Tidak Jika nama folder tidak ada di berbagi file, pemasangan akan gagal.
atributVolume.protokol Tentukan protokol berbagi file. smb, nfs Tidak smb
volumeAttributes.server Tentukan alamat server akun penyimpanan Azure Alamat server yang ada, misalnya accountname.privatelink.file.core.windows.net. Tidak Jika kosong, driver menggunakan default accountname.file.core.windows.net atau alamat akun sovereign cloud lainnya.
--- Parameter berikut hanya untuk protokol SMB --- --- ---
volumeAttributes.secretName Tentukan nama rahasia yang menyimpan nama dan kunci akun penyimpanan. Tidak
volumeAttributes.secretNamespace Tentukan namespace rahasia. default,kube-system, dll. Tidak Namespace PVC (csi.storage.k8s.io/pvc/namespace)
nodeStageSecretRef.name Tentukan nama rahasia yang menyimpan nama dan kunci akun penyimpanan. Nama rahasia yang sudah ada Tidak Jika kosong, driver menggunakan identitas kubelet untuk mendapatkan kunci akses akun.
nodeStageSecretRef.namespace Tentukan namespace rahasia. Namespace Kubernetes Tidak
--- Parameter berikut hanya untuk protokol NFS --- --- ---
atributVolume.kebijakanPerubahanFsGroup Menunjukkan bagaimana pengemudi mengubah kepemilikan volume. Pod securityContext.fsGroupChangePolicy diabaikan. OnRootMismatch (standar), Always, None Tidak OnRootMismatch
atributVolume.izinPemasangan Tetapkan izin untuk folder yang dipasang. Defaultnya adalah 0777 Tidak

Buat berbagi file Azure

Sebelum Anda dapat menggunakan share file Azure Files sebagai volume Kubernetes, Anda harus membuat akun Azure Storage dan share file tersebut.

  1. Dapatkan nama grup sumber daya menggunakan perintah az aks show dengan parameter --query nodeResourceGroup.

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

    Hasil dari output perintah menyerupai contoh berikut:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Buatlah akun penyimpanan dengan perintah az storage account create menggunakan parameter --sku. Perintah berikut membuat akun penyimpanan menggunakan Standard_LRS SKU. Pastikan untuk mengganti placeholder berikut:

    • myAKSStorageAccount dengan nama akun penyimpanan
    • nodeResourceGroupName dengan nama grup sumber daya yang menjadi tempat hosting node kluster AKS
    • location dengan nama wilayah di dalam mana sumber daya akan dibuat. Ini harus menjadi wilayah yang sama dengan node kluster AKS.
    az storage account create -n myAKSStorageAccount -g nodeResourceGroupName -l location --sku Standard_LRS
    
  3. Ekspor string koneksi sebagai variabel lingkungan menggunakan perintah berikut, yang Anda gunakan untuk membuat berbagi file.

    export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string -n storageAccountName -g resourceGroupName -o tsv)
    
  4. Buat berbagi file menggunakan az storage share create perintah . Pastikan untuk mengganti shareName dengan nama berbagi Anda.

    az storage share create -n shareName --connection-string $AZURE_STORAGE_CONNECTION_STRING
    
  5. Ekspor kunci akun penyimpanan sebagai variabel lingkungan menggunakan perintah berikut.

    STORAGE_KEY=$(az storage account keys list --resource-group nodeResourceGroupName --account-name myAKSStorageAccount --query "[0].value" -o tsv)
    
  6. Gemakan nama dan kunci akun penyimpanan menggunakan perintah berikut. Salin informasi ini, karena Anda memerlukan nilai-nilai ini saat membuat volume Kubernetes.

    echo Storage account key: $STORAGE_KEY
    

Buat rahasia Kubernetes

Kubernetes membutuhkan kredensial untuk mengakses berbagi file yang dibuat pada langkah sebelumnya. Kredensial ini disimpan dalam rahasia Kubernetes, yang direferensikan ketika Anda membuat pod Kubernetes.

  1. Buat rahasia menggunakan kubectl create secret perintah . Contoh berikut membuat rahasia bernama azure-secret dan mengisi azurestorageaccountname dan azurestorageaccountkey dari langkah sebelumnya. Untuk menggunakan akun penyimpanan Azure yang sudah ada, berikan nama dan kunci akun.

    kubectl create secret generic azure-secret --from-literal=azurestorageaccountname=myAKSStorageAccount --from-literal=azurestorageaccountkey=$STORAGE_KEY
    

Pasang berbagi file sebagai volume persisten

  1. Buat file baru bernama azurefiles-pv.yaml dan salin dalam konten berikut. Di bawah csi, perbarui resourceGroup, volumeHandle, dan shareName. Untuk opsi pemasangan, nilai default untuk fileMode dan dirMode adalah 0777.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: file.csi.azure.com
      name: azurefile
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      storageClassName: azurefile-csi
      csi:
        driver: file.csi.azure.com
        volumeHandle: "{resource-group-name}#{account-name}#{file-share-name}"  # make sure this volumeid is unique for every identical share in the cluster
        volumeAttributes:
          shareName: aksshare
        nodeStageSecretRef:
          name: azure-secret
          namespace: default
      mountOptions:
        - dir_mode=0777
        - file_mode=0777
        - uid=0
        - gid=0
        - mfsymlinks
        - cache=strict
        - nosharesock
        - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
    
  2. Buat volume persisten menggunakan kubectl create perintah .

    kubectl create -f azurefiles-pv.yaml
    
  3. Buat file baru bernama azurefiles-mount-options-pvc.yaml dan salin konten berikut.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurefile
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: azurefile-csi
      volumeName: azurefile
      resources:
        requests:
          storage: 5Gi
    
  4. Buat PersistentVolumeClaim menggunakan kubectl apply perintah .

    kubectl apply -f azurefiles-mount-options-pvc.yaml
    
  5. Verifikasi PersistentVolumeClaim Anda dibuat dan terikat ke PersistentVolume menggunakan perintah kubectl get.

    kubectl get pvc azurefile
    

    Hasil dari perintah tersebut menyerupai contoh berikut:

    NAME        STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    azurefile   Bound    azurefile   5Gi        RWX            azurefile      5s
    
  6. Perbarui spesifikasi kontainer Anda untuk mereferensikan PersistentVolumeClaim dan pod Anda dalam file YAML. Contohnya:

    ...
      volumes:
      - name: azure
        persistentVolumeClaim:
          claimName: azurefile
    
  7. Spesifikasi pod tidak dapat diperbarui di tempat, jadi hapus pod menggunakan kubectl delete perintah dan buat ulang menggunakan kubectl apply perintah .

    kubectl delete pod mypod
    
    kubectl apply -f azure-files-pod.yaml
    

Pasang berbagi file sebagai volume sebaris

Catatan

Untuk menghindari masalah performa, kami sarankan Anda menggunakan volume persisten alih-alih volume sebaris ketika banyak pod mengakses berbagi file yang sama. Volume inline hanya dapat mengakses rahasia di namespace yang sama dengan pod. Untuk menentukan namespace rahasia yang berbeda, gunakan volume persisten.

Untuk memasang berbagi file Azure Files ke dalam pod, Anda mengonfigurasi volume dalam spesifikasi kontainer.

  1. Buat file baru bernama azure-files-pod.yaml dan salin dalam konten berikut. Jika Anda mengubah nama berbagi file atau nama rahasia, perbarui shareName dan secretName. Anda juga dapat memperbarui mountPath, yang merupakan path tempat berbagi File dipasang di pod. Untuk kontainer Windows Server, tentukan mountPath menggunakan konvensi jalur Windows, seperti 'D:'.

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      containers:
        - image: 'mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine'
          name: mypod
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
          volumeMounts:
            - name: azure
              mountPath: /mnt/azure
              readOnly: false
      volumes:
        - name: azure
          csi:
            driver: file.csi.azure.com
            volumeAttributes:
              secretName: azure-secret  # required
              shareName: aksshare  # required
              mountOptions: 'dir_mode=0777,file_mode=0777,cache=strict,actimeo=30,nosharesock,nobrl'  # optional
    
  2. Buat pod menggunakan kubectl apply perintah .

    kubectl apply -f azure-files-pod.yaml
    

    Anda sekarang memiliki pod yang sedang aktif dengan file share Azure Files yang dipasang di /mnt/azure. Anda dapat memverifikasi bahwa share berhasil dipasang menggunakan perintah kubectl describe.

    kubectl describe pod mypod
    

Praktik terbaik

Untuk memiliki pengalaman terbaik dengan Azure Files, ikuti praktik terbaik berikut:

Berbagi SMB

  • Opsi pemasangan yang direkomendasikan untuk berbagi SMB disediakan dalam contoh kelas penyimpanan berikut:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
     name: azurefile-csi
    provisioner: file.csi.azure.com
    allowVolumeExpansion: true
    parameters:
     skuName: Premium_LRS  # available values: Premium_LRS, Premium_ZRS, Standard_LRS, Standard_GRS, Standard_ZRS, Standard_RAGRS, Standard_RAGZRS
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    mountOptions:
     - dir_mode=0777  # modify this permission if you want to enhance the security
     - file_mode=0777 # modify this permission if you want to enhance the security
     - mfsymlinks    # support symbolic links
     - cache=strict  # https://linux.die.net/man/8/mount.cifs
     - nosharesock  # reduces probability of reconnect race
     - actimeo=30  # reduces latency for metadata-heavy workload
     - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
    
  • Jika Anda menggunakan file share premium (SSD) dan beban kerja Anda kaya metadata, daftarkan diri Anda untuk menggunakan fitur penembolokan metadata guna meningkatkan performa.

Untuk informasi selengkapnya, lihat Meningkatkan performa untuk berbagi file SMB Azure.

Berbagi NFS

  • Opsi pemasangan yang direkomendasikan untuk berbagi NFS disediakan dalam contoh kelas penyimpanan berikut:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: azurefile-csi-nfs
    provisioner: file.csi.azure.com
    parameters:
      protocol: nfs
      skuName: Premium_LRS     # available values: Premium_LRS, Premium_ZRS
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    mountOptions:
      - nconnect=4  # improves performance by enabling multiple connections to share
      - noresvport  # improves availability
      - actimeo=30  # reduces latency for metadata-heavy workloads
    
  • Tingkatkan ukuran read-ahead untuk meningkatkan throughput baca.

  • Meskipun Azure Files mendukung pengaturan nconnect hingga pengaturan maksimum 16, sebaiknya konfigurasikan opsi pemasangan dengan pengaturan optimal nconnect=4. Saat ini, tidak ada keuntungan di luar empat saluran untuk implementasi Azure Files nconnect.

Untuk informasi selengkapnya, lihat Meningkatkan performa untuk berbagi file NFS Azure.

Langkah berikutnya

Untuk parameter driver CSI Azure Files, lihat parameter driver CSI.

Untuk praktik terbaik terkait, lihat Praktik terbaik untuk penyimpanan dan pencadangan di AKS.