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.
- Untuk membuat akun ADLS menggunakan driver dalam provisi dinamis, tentukan
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
- Secara default, cache blobfuse terletak di
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_LRS Standard_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- | 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, akun penyimpanan tersebut akan membuat akun baru. Namun, jika nama akun penyimpanan ditentukan, akun penyimpanan harus sudah ada. |
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. Nota: 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.
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
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.
Buat nama file
blob-nfs-pv
dan 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
Buat Pod dengan perintah kubectl apply:
kubectl apply -f blob-nfs-pv.yaml
Setelah pod berada dalam kondisi berjalan, jalankan perintah berikut untuk membuat file baru bernama
test.txt
.kubectl exec mypod -- touch /mnt/blob/test.txt
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.
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
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.
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.
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 , , SAS MSI ,SPN |
No | Key |
volumeAttributes.AzureStorageIdentityClientID | Tentukan ID Klien 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.
Buat file bernama
pv-blob-nfs.yaml
dan salin dalam YAML berikut. Di bawahstorageClass
, perbaruiresourceGroup
,storageAccount
, dancontainerName
.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 API Kubernetes 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.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
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
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.
Buat nama file
nginx-pod-blob.yaml
dan 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
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
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
- Untuk mempelajari cara menggunakan driver CSI untuk penyimpanan Blob Azure, lihat Menggunakan penyimpanan Blob Azure dengan driver CSI.
- Untuk praktik terbaik terkait, lihat Praktik terbaik untuk penyimpanan dan pencadangan di AKS.
Azure Kubernetes Service