Topik ini mencakup masalah umum terkait volume Network Attached Storage (NAS) di kluster ACK dan ACS, termasuk kegagalan pemasangan, error izin, dan timeout saat melepas pemasangan.
Navigasi cepat
Pemasangan
chown: Operation not permitted saat pemasangan
Proses kontainer tidak memiliki izin untuk mengubah kepemilikan file pada volume NAS. Perbaiki masalah ini dengan salah satu pendekatan berikut:
Jalankan sebagai root atau gunakan fsGroup: Jika
accessModesdiatur keReadWriteOnce, konfigurasikansecurityContext.fsGroupuntuk mengatur kepemilikan volume bagi pod. Untuk detailnya, lihat Configure a security context for a pod or container.Periksa grup izin NAS: Jika error tetap muncul meskipun dijalankan sebagai root, aturan izin titik pemasangan mungkin memetakan root ke pengguna anonim. Atur aturan izin ke no_squash untuk mencegah hal ini. Untuk detailnya, lihat Manage permission groups.
Antrean tugas controller penuh saat memasang volume NAS yang disediakan secara dinamis
Saat reclaimPolicy diatur ke Delete dan archiveOnDelete diatur ke false dalam StorageClass Anda, penghapusan subdirektori lebih lambat daripada pembuatannya. Hal ini memblokir antrean tugas controller dan mencegah pembuatan persistent volume (PV) baru.
Atur archiveOnDelete ke true dalam StorageClass Anda. Dengan pengaturan ini, penghapusan PV hanya mengganti nama subdirektori yang bersangkutan tanpa menghapus isinya — operasi yang jauh lebih cepat. Bersihkan direktori yang telah diganti namanya secara terpisah, misalnya dengan menjalankan pekerjaan pembersihan terjadwal atau menggunakan beberapa pod untuk menghapus subdirektori secara konkuren sesuai pola penamaan tertentu.
Waktu pemasangan lebih lama dari yang diharapkan
Saat kedua kondisi berikut terpenuhi, Kubernetes menjalankan chmod dan chown secara rekursif pada volume yang dipasang, sehingga memperlambat operasi pemasangan secara signifikan:
accessModesdiatur keReadWriteOncepada persistent volume (PV) dan Persistent Volume Claim (PVC)securityContext.fsGroupdikonfigurasi dalam spesifikasi pod
Pilih salah satu pendekatan berikut:
Hapus fsGroup: Hapus bidang
fsGroupdarisecurityContextjika workload Anda tidak memerlukannya.Atur izin secara manual sebelumnya: Pasang direktori target ke instans ECS, jalankan
chownatauchmoduntuk mengatur izin yang diperlukan, lalu gunakan volume NAS melalui Container Storage Interface (CSI). Lihat Mount a statically provisioned NAS volume atau Use dynamically provisioned NAS volumes.Gunakan fsGroupChangePolicy (Kubernetes 1.20+): Atur
fsGroupChangePolicykeOnRootMismatchdalamsecurityContextpod. Kubernetes kemudian hanya menjalankanchmoddanchownsaat volume pertama kali dipasang — pemasangan berikutnya jauh lebih cepat. Untuk detailnya, lihat Configure a security context for a pod or container.
Error unknown filesystem type "xxx" saat pemasangan
Node tempat pod dijadwalkan tidak memiliki dependensi penyimpanan yang diperlukan. Verifikasi bahwa konfigurasi volume sudah benar.
Pod macet di ContainerCreating saat memasang dua PVC NAS
Jika sebuah pod memasang dua PVC yang mengarah ke sistem file NAS yang sama dan macet di status ContainerCreating, kemungkinan besar kedua PV tersebut memiliki nilai spec.csi.volumeHandle yang sama. Kubelet menganggap keduanya sebagai PV yang sama, sehingga menyebabkan konflik pemasangan — meskipun pemasangan masing-masing PVC secara individual berfungsi.
Atur spec.csi.volumeHandle yang unik untuk setiap PV. Pendekatan yang direkomendasikan adalah mengatur nilainya sama dengan nama PV (metadata.name).
Bagaimana cara memasang sistem file NAS dengan TLS menggunakan CSI?
Enkripsi TLS untuk volume NAS menggunakan protokol pemasangan alinas, yang mengarahkan traffic melalui klien Alibaba Cloud NAS.
Klien NAS menggunakan Stunnel untuk enkripsi TLS. Untuk workload ber-throughput tinggi, hal ini dapat mengonsumsi sumber daya CPU yang signifikan — dalam kasus ekstrem, satu titik pemasangan saja dapat menggunakan seluruh core CPU. Untuk detailnya, lihat Encryption in transit for NFS file systems.
Pada halaman Add-ons, edit konfigurasi
csi-pluginuntuk mengaktifkan FeatureGateAlinasMountProxy=true.Terapkan YAML berikut ke kluster Anda. Kedua contoh menggunakan
mountProtocol: alinasdan opsi pemasangantls.Volume yang disediakan secara dinamis
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas-tls mountOptions: - nolock,tcp,noresvport - vers=3 - tls # Aktifkan enkripsi TLS. parameters: volumeAs: subpath server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/" mountProtocol: alinas # Gunakan klien Alibaba Cloud NAS. provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-tls spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-tls resources: requests: storage: 20GiParameter Deskripsi parameters.mountProtocolMenentukan klien pemasangan. Atur ke alinasuntuk menggunakan klien Alibaba Cloud NAS. Nilai default-nya adalah""(protokol NFS standar).mountOptionsDaftar opsi pemasangan. Tambahkan tlsuntuk mengaktifkan enkripsi TLS. Opsitlshanya berlaku ketikamountProtocoldiatur kealinas.Volume yang disediakan secara statis
apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas-tls labels: alicloud-pvname: pv-nas-tls spec: capacity: storage: 5Gi accessModes: - ReadWriteMany csi: driver: nasplugin.csi.alibabacloud.com volumeHandle: pv-nas # Harus sesuai dengan nama PV. volumeAttributes: server: "2564f4****-ysu87.cn-shenzhen.nas.aliyuncs.com" path: "/csi" mountProtocol: alinas # Gunakan klien Alibaba Cloud NAS. mountOptions: - nolock,tcp,noresvport - vers=3 - tls # Aktifkan enkripsi TLS. --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas-tls spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-nas-tlsParameter Deskripsi spec.csi.volumeAttributes.mountProtocolMenentukan klien pemasangan. Atur ke alinasuntuk menggunakan klien Alibaba Cloud NAS. Nilai default-nya adalah""(protokol NFS standar).spec.mountOptionsDaftar opsi pemasangan. Tambahkan tlsuntuk mengaktifkan enkripsi TLS. Opsitlshanya berlaku ketikamountProtocoldiatur kealinas.
Bagaimana cara menerapkan isolasi pengguna atau kelompok pada NAS?
Jalankan proses kontainer sebagai pengguna nobody (UID/GID 65534) untuk mengisolasi akses antara pengguna dan kelompok berbeda pada volume NAS bersama.
Tambahkan bidang
securityContextke manifes workload Anda:apiVersion: apps/v1 kind: StatefulSet metadata: name: nas-sts spec: selector: matchLabels: app: nginx serviceName: "nginx" replicas: 1 template: metadata: labels: app: nginx spec: securityContext: fsGroup: 65534 # File dan direktori baru mendapatkan UID/GID 65534 (nobody). fsGroupChangePolicy: "OnRootMismatch" # Hanya perbarui kepemilikan jika izin direktori root tidak sesuai. containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 securityContext: runAsUser: 65534 # Jalankan semua proses sebagai UID 65534 (nobody). runAsGroup: 65534 # Jalankan semua proses dengan GID utama 65534 (nobody). allowPrivilegeEscalation: false volumeMounts: - name: nas-pvc mountPath: /data volumeClaimTemplates: - metadata: name: nas-pvc spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "alicloud-nas-subpath" resources: requests: storage: 100GiVerifikasi bahwa proses kontainer dijalankan sebagai
nobody:kubectl exec nas-sts-0 -- "top"Output yang diharapkan:
Mem: 11538180K used, 52037796K free, 5052K shrd, 253696K buff, 8865272K cached CPU: 0.1% usr 0.1% sys 0.0% nic 99.7% idle 0.0% io 0.0% irq 0.0% sirq Load average: 0.76 0.60 0.58 1/1458 54 PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND 49 0 nobody R 1328 0.0 9 0.0 top 1 0 nobody S 1316 0.0 10 0.0 sleep 3600Verifikasi bahwa file dan direktori baru di path pemasangan NAS memiliki kepemilikan
nobody:kubectl exec nas-sts-0 -- sh -c "touch /data/test; mkdir /data/test-dir; ls -arlth /data/"Output yang diharapkan:
total 5K drwxr-xr-x 1 root root 4.0K Aug 30 10:14 .. drwxr-sr-x 2 nobody nobody 4.0K Aug 30 10:14 test-dir -rw-r--r-- 1 nobody nobody 0 Aug 30 10:14 test drwxrwsrwx 3 root nobody 4.0K Aug 30 10:14 .
Apakah beberapa aplikasi dapat berbagi volume NAS yang sama?
Ya. NAS menyediakan penyimpanan bersama, sehingga satu PVC dapat dipasang oleh beberapa pod secara bersamaan.
Untuk perilaku penulisan konkuren dan batasan yang diketahui, lihat How do I prevent exceptions that may occur when multiple processes or clients concurrently write data to a log file? dan How do I resolve the latency in writing data to an NFS file system?
Untuk instruksi pemasangan, lihat Use CNFS to manage NAS file systems (recommended), Mount a statically provisioned NAS volume, dan Use dynamically provisioned NAS volumes.
Error failed to do setup volume saat memasang volume NAS di ACS
Error ini biasanya berarti titik pemasangan NAS berada di virtual private cloud (VPC) yang berbeda dari kluster Anda. Ikuti langkah-langkah berikut untuk memverifikasi.
Dapatkan ID VPC kluster.
Masuk ke Konsol ACS. Di panel navigasi kiri, klik Clusters.
Klik nama kluster. Di panel navigasi kiri, pilih Configurations > ConfigMaps.
Beralih ke namespace
kube-systemdan klikacs-profile. Catat nilaivpcId(misalnya,vpc-gw87c9kdqs25al2z****).
Dapatkan ID VPC dari titik pemasangan NAS.
Masuk ke Konsol NAS. Di panel navigasi kiri, pilih File System > File System List, lalu klik nama NAS.Konsol NAS
Di panel navigasi kiri, klik Mount Targets. Di bagian Mount Target, temukan ID VPC untuk titik pemasangan Anda.
Bandingkan kedua ID VPC tersebut. Jika tidak cocok, titik pemasangan NAS tidak dapat diakses dari kluster Anda. Ikuti petunjuk dalam Mount NAS file systems on ACS untuk membuat titik pemasangan di VPC yang benar atau perbarui StorageClass Anda agar menggunakan alamat titik pemasangan yang tepat.
Penggunaan
Tidak dapat membuat atau mengubah direktori pada volume NAS
Proses kontainer non-root tidak memiliki izin menulis pada PV yang dipasang. Perbaiki masalah ini dengan salah satu pendekatan berikut:
Gunakan init container: Jalankan init container dengan izin root yang memasang PV dan menjalankan
chmodatauchownuntuk mengatur izin yang diperlukan pada direktori pemasangan.Gunakan fsGroupChangePolicy: Atur
fsGroupChangePolicykeOnRootMismatchdalamsecurityContextpod. Kubernetes secara otomatis menjalankanchmoddanchownsaat volume pertama kali dipasang.
Error NFS Stale File Handle saat operasi baca/tulis
Ini adalah perilaku standar NFS. Error ini terjadi ketika satu klien menghapus file sementara klien lain masih memegang deskriptor file yang terbuka untuk file tersebut:
Klien A membuka
/data/file.txt.Klien B menghapus
/data/file.txt.Klien A mencoba membaca atau menulis menggunakan deskriptor file yang kini tidak valid dan mendapatkan error tersebut.
NAS tidak menegakkan konsistensi data pada level ini. Tangani error tersebut dalam logika aplikasi Anda — misalnya, dengan menerapkan penguncian file atau membuka ulang handle file saat error ini terjadi.
Pelepasan pemasangan
Timeout saat melepas pemasangan dan pod macet di status Terminating
Saat pod dengan volume NAS yang dipasang dihapus dan macet di status Terminating, penyebabnya biasanya adalah salah konfigurasi pada DaemonSet csi-plugin di mana /var/run dipasang sebagai volume hostPath.
Jalankan perintah berikut untuk mengonfirmasi:
kubectl patch -n kube-system daemonset csi-plugin -p '
spec:
template:
spec:
containers:
- name: csi-plugin
volumeMounts:
- mountPath: /host/var/run/efc
name: efc-metrics-dir
- mountPath: /host/var/run/ossfs
name: ossfs-metrics-dir
- mountPath: /host/var/run/
$patch: delete
volumes:
- name: ossfs-metrics-dir
hostPath:
path: /var/run/ossfs
type: DirectoryOrCreate
- name: efc-metrics-dir
hostPath:
path: /var/run/efc
type: DirectoryOrCreate
- name: fuse-metrics-dir
$patch: delete'Jika perintah tersebut mengembalikan output apa pun, berarti salah konfigurasi tersebut ada. Perbaiki DaemonSet tersebut dengan patch berikut:
Patch ini menyebabkan pod csi-plugin restart. Evaluasi dampaknya terhadap workload Anda sebelum menerapkan perubahan ini di lingkungan produksi.
kubectl patch -n kube-system daemonset csi-plugin -p '
spec:
template:
spec:
containers:
- name: csi-plugin
volumeMounts:
- mountPath: /host/var/run/efc
name: efc-metrics-dir
- mountPath: /host/var/run/ossfs
name: ossfs-metrics-dir
- mountPath: /host/var/run/
$patch: delete
volumes:
- name: ossfs-metrics-dir
hostPath:
path: /var/run/ossfs
type: DirectoryOrCreate
- name: efc-metrics-dir
hostPath:
path: /var/run/efc
type: DirectoryOrCreate
- name: fuse-metrics-dir
$patch: delete'Setelah patch diterapkan, pod csi-plugin akan restart dengan konfigurasi yang benar dan masalah pelepasan pemasangan teratasi.