Topik ini menyediakan pertanyaan yang sering diajukan (FAQ) dan solusi untuk masalah umum terkait volume Network Attached Storage (NAS).
Navigasi cepat
Mounting
Error saat mount: chown: Operation not permitted
Gejala
Saat memasang volume NAS, muncul pesan error chown: Operation not permitted.
Penyebab
Peran yang digunakan untuk menjalankan kontainer pada host tidak memiliki izin untuk memodifikasi volume NAS.
Solusi
Jika pengguna yang menjalankan proses kontainer bukan root, gunakan pengguna root untuk menjalankan operasi `chown` dan `chgrp`. Jika
accessModesdari Persistent Volume (PV) adalahReadWriteOnce, Anda juga dapat menggunakansecurityContext.fsGroupuntuk mengonfigurasi izin akses volume dan kebijakan perubahan kepemilikan untuk pod. Untuk informasi selengkapnya, lihat Configure a Security Context for a Pod or a Container.Jika error tetap muncul meskipun dijalankan sebagai pengguna root, periksa grup izin titik pemasangan NAS untuk memastikan bahwa pengguna root diizinkan mengakses sistem file tersebut. Izin pengguna harus diatur ke No_squash. Untuk informasi selengkapnya, lihat Manage permission groups.
Antrian tugas controller penuh saat memasang volume NAS yang disediakan secara dinamis
Gejala
Saat menggunakan volume NAS yang disediakan secara dinamis, jika subdirektori dibuat lebih cepat daripada dihapus, antrian tugas controller dapat terblokir sehingga mencegah pembuatan PV baru.
Penyebab
Masalah ini terjadi ketika kluster menggunakan volume NAS yang disediakan secara dinamis, dan reclaimPolicy dari StorageClass diatur ke Delete sementara archiveOnDelete diatur ke false.
Solusi
Atur archiveOnDelete ke true. Saat sebuah PV dihapus, subdirektori yang sesuai pada sistem file NAS akan diubah namanya alih-alih isinya dihapus secara permanen. Anda kemudian bertanggung jawab untuk menghapus file-file tersebut. Misalnya, Anda dapat mengonfigurasi pekerjaan penghapusan terjadwal di direktori root node yang kelebihan beban atau menggunakan beberapa pod untuk menghapus subdirektori secara konkuren sesuai format tertentu.
Waktu mount volume NAS meningkat
Gejala
Memasang volume NAS membutuhkan waktu lama.
Penyebab
Waktu mount dapat meningkat jika operasi chmod atau chown diterapkan secara rekursif pada PV dan Persistent Volume Claim (PVC) yang dipasang. Hal ini terjadi jika kedua kondisi berikut terpenuhi:
Parameter
AccessModesdiatur keReadWriteOncedalam templat PV dan PVC.Parameter
securityContext.fsGroupdikonfigurasi dalam templat aplikasi.
Solusi
Jika parameter
securityContext.fsGroupdikonfigurasi dalam templat aplikasi, hapus parameterfsGroupdari bloksecurityContext.Untuk mengubah file dalam direktori mount ke UID dan
modetarget, Anda dapat memasang manual direktori target ke instance ECS. Kemudian, jalankan perintahchowndanchmod. Setelah perintah dijalankan, gunakan volume NAS melalui Container Storage Interface (CSI). Untuk informasi selengkapnya tentang cara menggunakan volume NAS melalui CSI, lihat Use a statically provisioned NAS volume atau Use a dynamically provisioned NAS volume.Untuk kluster Kubernetes versi 1.20 dan yang lebih baru, Anda juga dapat mengatur
fsGroupChangePolicykeOnRootMismatch. Dengan demikian, operasichmoddanchownhanya dilakukan saat volume dipasang untuk pertama kalinya. Mount berikutnya akan lebih cepat. Untuk informasi selengkapnya tentang parameterfsGroupChangePolicy, lihat Configure a Security Context for a Pod or a Container.
Error saat mount: unknown filesystem type "xxx"
Gejala
Saat memasang volume NAS, muncul pesan error unknown filesystem type "xxx".
Penyebab
Node tempat pod dijadwalkan tidak memiliki dependensi penyimpanan yang diperlukan terinstal.
Solusi
Verifikasi bahwa konfigurasi volume sudah benar.
Pod macet di status ContainerCreating saat memasang dua PVC NAS
Gejala
Saat sebuah pod mencoba memasang volume NAS menggunakan dua PVC, pod gagal dimulai dan tetap berada dalam status ContainerCreating. Namun, volume dapat berhasil dipasang jika hanya salah satu PVC yang digunakan.
Penyebab
PV yang terkait dengan kedua PVC memiliki spec.csi.volumeHandle yang sama. Hal ini menyebabkan kubelet memperlakukan kedua PV tersebut sebagai satu volume selama proses mount.
Solusi
Ubah nilai bidang spec.csi.volumeHandle agar sesuai dengan nama PV.
Cara memasang sistem file NAS dengan TLS menggunakan CSI
NAS memungkinkan Anda menggunakan protokol TLS untuk melindungi data saat transit antara klien dan layanan NAS. Hal ini memastikan bahwa data tidak dicuri atau dimanipulasi selama transmisi. CSI memungkinkan Anda menggunakan klien Alibaba Cloud NAS untuk memasang volume dan mengaktifkan opsi mount TLS dengan mengatur protokol mount ke alinas.
Tool klien NAS menggunakan proses listener Stunnel sebagai proxy enkripsi TLS. Untuk aplikasi ber-throughput tinggi, proses listener Stunnel mengonsumsi sumber daya CPU yang signifikan untuk melakukan enkripsi dan dekripsi. Dalam kasus ekstrem, setiap mount dapat mengonsumsi satu core CPU penuh. Untuk informasi selengkapnya, lihat Encryption in transit for NFS file systems.
Instal komponen cnfs-nas-daemon. Untuk informasi selengkapnya, lihat Manage the cnfs-nas-daemon component.
Pada halaman Add-ons, temukan komponen csi-plugin dan konfigurasikan untuk mengaktifkan FeatureGate
AlinasMountProxy=true.Gunakan contoh berikut untuk memasang volume NAS yang disediakan secara dinamis atau statis.
Contoh penggunaan volume NAS yang disediakan secara dinamis
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas-tls mountOptions: - nolock,tcp,noresvport - vers=3 - tls # Tambahkan opsi mount tls. parameters: volumeAs: subpath server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/" mountProtocol: alinas # Tentukan bahwa klien alinas digunakan untuk mounting. 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.mountProtocolAtur parameter ini ke
alinasuntuk menggunakan klien Alibaba Cloud NAS. Jika Anda biarkan kosong, protokol NFS digunakan secara default.mountOptionsTambahkan parameter
tlsuntuk mengaktifkan TLS. Parameter ini hanya berlaku saatmountProtocoldiatur kealinas. Secara default, TLS dinonaktifkan.Contoh penggunaan volume NAS 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 sama dengan nama PV. volumeAttributes: server: "2564f4****-ysu87.cn-shenzhen.nas.aliyuncs.com" path: "/csi" mountProtocol: alinas # Tentukan bahwa klien alinas digunakan untuk mounting. mountOptions: - nolock,tcp,noresvport - vers=3 - tls # Tambahkan opsi mount 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.mountProtocol
Atur parameter ini ke
alinasuntuk menggunakan klien Alibaba Cloud NAS. Jika Anda biarkan kosong, protokol NFS digunakan secara default.spec.mountOptions
Tambahkan parameter
tlsuntuk mengaktifkan TLS. Parameter ini hanya berlaku saatmountProtocoldiatur kealinas. Secara default, TLS dinonaktifkan.
Cara menerapkan isolasi pengguna atau grup pada NAS
Untuk memastikan keamanan data antar pengguna dan grup yang berbeda, Anda dapat melakukan langkah-langkah berikut untuk mengisolasi pengguna atau grup pada NAS.
Gunakan templat YAML berikut untuk menjalankan proses sebagai pengguna nobody dalam pod. UID dan GID direktori yang dibuat adalah 65534.
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 # Saat direktori atau file dibuat, UID dan GID-nya adalah 65534 (pengguna nobody). fsGroupChangePolicy: "OnRootMismatch" # Pemilik dan izin konten dalam volume hanya diubah jika pemilik dan izin direktori root berbeda dari izin volume yang diharapkan. containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 securityContext: runAsUser: 65534 # Semua proses dalam kontainer dijalankan dengan ID pengguna 65534 (pengguna nobody). runAsGroup: 65534 # Semua proses dalam kontainer dijalankan dengan ID grup utama 65534 (pengguna nobody). allowPrivilegeEscalation: false volumeMounts: - name: nas-pvc mountPath: /data volumeClaimTemplates: - metadata: name: nas-pvc spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "alicloud-nas-subpath" resources: requests: storage: 100GiJalankan perintah
topdalam kontainer untuk memverifikasi bahwa USER adalah 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 3600Output yang diharapkan menunjukkan bahwa pengguna
nobodymenjalankan perintahtop.Verifikasi bahwa direktori dan file yang dibuat dalam direktori mount NAS dimiliki oleh
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 .Output yang diharapkan menunjukkan bahwa untuk file test dan direktori test-dir yang dibuat di
/data, UID dan GID yang sesuai dimiliki oleh pengguna nobody.
Dapatkah beberapa aplikasi terkontainerisasi menggunakan volume NAS yang sama?
Ya. NAS menyediakan penyimpanan bersama. Artinya, satu PVC dapat digunakan oleh beberapa aplikasi secara bersamaan.
Untuk informasi tentang kondisi penulisan konkuren ke NAS, 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 informasi selengkapnya tentang cara memasang volume NAS, lihat Use CNFS to manage NAS file systems (recommended), Use a statically provisioned NAS volume, dan Use a dynamically provisioned NAS volume.
Gagal memasang volume NAS di ACS dengan error "failed to do setup volume"
Saat menggunakan volume NAS dengan Container Service for Kubernetes (ACS), operasi mount dapat gagal dan timeout dengan error failed to do setup volume. Masalah ini dapat disebabkan oleh konfigurasi NAS yang salah. Untuk prosedur yang benar, lihat Mount a NAS volume in Container Service for Kubernetes (ACS).
Penyebab paling umum adalah ketidaksesuaian konfigurasi VPC. Alamat titik pemasangan (server) yang ditentukan dalam StorageClass harus berada dalam VPC yang sama dengan kluster.
Temukan ID VPC kluster.
Masuk ke Konsol Container Service for Kubernetes (ACS). Di panel navigasi sebelah kiri, klik Clusters. Pada halaman Clusters, klik nama kluster target. Di panel navigasi sebelah kiri, klik Configuration > ConfigMaps.
Atur Namespace ke kube-system. Temukan dan klik acs-profile. Pada halaman yang muncul, cari dan catat
vpcId, misalnya vpc-gw87c9kdqs25al2z****.
Temukan alamat titik pemasangan yang sesuai di konsol NAS.
Masuk ke Konsol NAS. Di panel navigasi sebelah kiri, pilih File Systems > File Systems. Klik nama sistem file NAS target.
Klik Mount Targets. Di bagian Mount Targets, temukan alamat titik pemasangan yang sesuai dengan ID VPC tersebut.
Verifikasi bahwa ID VPC kluster cocok dengan VPC titik pemasangan.
Jika tidak cocok, konfigurasi ulang pengaturannya. Untuk informasi selengkapnya, lihat Mount a NAS volume in Container Service for Kubernetes (ACS).
Tidak dapat membuat atau mengubah direktori pada volume NAS
Gejala
Anda tidak dapat membuat atau mengubah direktori pada volume NAS.
Penyebab
Pengguna non-root tidak memiliki izin yang diperlukan untuk menulis ke PV sehingga tidak diizinkan membuat atau mengubah direktori.
Solusi
Anda dapat menggunakan salah satu metode berikut untuk menjalankan perintah chmod atau chown guna mengubah izin direktori mount. Hal ini memungkinkan Anda melakukan operasi pada direktori tersebut.
Jalankan Init container dengan izin root untuk memasang PV. Kemudian, jalankan perintah
chmodatauchownuntuk mengubah izin direktori mount.Atur
fsGroupChangePolicykeOnRootMismatch. Dengan demikian, perintahchmodatauchowndijalankan secara otomatis saat volume dipasang untuk pertama kalinya.
Error NFS Stale File Handle saat operasi baca/tulis
Gejala
Klien menerima error NFS Stale File Handle saat membaca atau menulis file.
Penyebab
NAS tidak menjamin konsistensi data. Misalnya, jika dua klien memasang volume NAS yang sama dan Klien 1 membuka file untuk mendapatkan deskriptor file (fd)-nya, Klien 1 akan menerima error `NFS Stale File Handle` jika mencoba membaca atau menulis file tersebut setelah Klien 2 menghapusnya.
Solusi
NAS tidak menjamin konsistensi data. Anda harus menangani masalah konsistensi data berdasarkan skenario bisnis Anda.
Unmounting
Waktu unmount habis dan pod macet di status Terminating
Gejala
Saat menghapus pod dengan volume NAS yang dipasang, operasi unmount gagal dan pod macet di status Terminating.
Penyebab
Masalah ini disebabkan oleh csi-plugin yang langsung memasang /var/run. Anda dapat menjalankan perintah berikut untuk memeriksa apakah /var/run dipasang secara langsung. Jika output-nya tidak kosong, berarti direktori tersebut dipasang langsung.
kubectl get ds -n kube-system csi-plugin -ojsonpath='{.spec.template.spec.volumes[?(@.hostPath.path=="/var/run/")]}'Solusi
Jalankan perintah berikut untuk memperbarui manual file YAML csi-plugin. Setelah patch diterapkan, masalah akan teratasi.
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'