Volume Persisten OSS (PV) adalah sistem file Filesystem in Userspace (FUSE) yang dipasang menggunakan ossfs. Anda dapat memecahkan masalah ossfs dengan menganalisis log debug atau mengambil log Pod. Topik ini menjelaskan masalah umum ossfs dan menyediakan metode pemecahan masalah beserta contohnya.
Instruksi pemecahan masalah
Versi plugin CSI | Mode runtime ossfs | Metode pemecahan masalah |
Versi sebelum v1.28 | ossfs berjalan sebagai proses latar belakang pada node tempat Pod aplikasi berada. Jika terjadi masalah, Anda harus memasang ulang ossfs di latar depan. | Menganalisis log debug |
v1.28 hingga v1.30.4 | ossfs berjalan sebagai kontainer dalam sebuah Pod di namespace | Menanyakan log Pod |
v1.30.4 dan versi selanjutnya | ossfs berjalan sebagai kontainer dalam sebuah Pod di namespace |
Untuk mencegah ossfs menghasilkan log berlebihan, tingkat log default untuk runtime kontainer adalah critical atau error. Selama debugging, Anda mungkin perlu menambahkan parameter debug dan memasang ulang volume tersebut.
Skenario 1: Kegagalan pemasangan
Jika volume OSS yang disediakan secara statis gagal dipasang, Pod tidak dapat dimulai, dan event menunjukkan FailedMount. Lakukan pemeriksaan awal dengan merujuk ke Volume OSS gagal dipasang dan event Pod aplikasi menunjukkan FailedMount.
Versi plugin CSI 1.26.6 dan versi selanjutnya
Gejala
Saat Pod aplikasi dimulai, statusnya tetap dalam keadaan ContainerCreating dalam waktu lama.
Penyebab
Pertama, pastikan apakah kontainer ossfs berjalan sebagaimana mestinya. Jika ya, periksa apakah Pod aplikasi berada dalam keadaan ContainerCreating karena alasan lain, seperti masalah pada node.
Dalam perintah tersebut,
<NODE_NAME>adalah nama node tempat Pod aplikasi yang bermasalah berada.Dalam perintah tersebut,
<VOLUME_ID>biasanya merupakan nama PV aplikasi. Anda harus mengambil nilai ini dalam dua skenario berikut:Jika nama PV berbeda dari nilai bidang `volumeHandle` PV, gunakan bidang `volumeHandle`. Jalankan perintah berikut untuk mengambil nilai `volumeHandle` suatu PV:
kubectl get pv <PV_NAME> -o jsonpath='{.spec.csi.volumeHandle}'Jika nama PV terlalu panjang,
<VOLUME_ID>dibentuk dengan menggabungkan "h1." dengan nilai SHA-1-nya. Jalankan perintah berikut untuk mengambil nilai ini:echo -n "<PV_NAME>" | sha1sum | sed 's/^/h1./'Jika sistem Anda tidak mendukung operasi
sha1sum, Anda juga dapat menggunakan library OpenSSL untuk mengambil nilai tersebut:echo -n "<PV_NAME>" | openssl sha1 -binary | xxd -p -c 40 | sed 's/^/h1./'
CSI v1.30.4 dan versi selanjutnya
kubectl -n ack-csi-fuse get pod -l csi.alibabacloud.com/volume-id=<VOLUME_ID> -o wide | grep <NODE_NAME>Karena versi ini menambahkan proses daemon ke dalam kontainer ossfs, keluaran yang diharapkan sama terlepas dari apakah proses ossfs berjalan sebagaimana mestinya:
NAME READY STATUS RESTARTS AGE csi-fuse-ossfs-xxxx 1/1 Running 0 5sJika kontainer ossfs tidak dalam status `Running`, pecahkan masalah tersebut terlebih dahulu.
Versi CSI sebelum v1.30.4
kubectl -n kube-system get pod -l csi.alibabacloud.com/volume-id=<VOLUME_ID> -o wide | grep <NODE_NAME>Jika kontainer ossfs tidak berjalan sebagaimana mestinya, keluarannya sebagai berikut:
NAME READY STATUS RESTARTS AGE csi-fuse-ossfs-xxxx 0/1 CrashLoopBackOff 1 (4s ago) 5s
Penyebab event ini: Saat komponen CSI memulai kontainer ossfs, ossfs keluar secara tak terduga. Masalah ini dapat disebabkan oleh kesalahan pemeriksaan inisialisasi, seperti pemeriksaan konektivitas OSS yang gagal (misalnya, bucket tidak ada atau izin salah), jalur pemasangan OSS yang tidak ada, atau izin baca/tulis yang tidak mencukupi.
Solusi
Ambil log kontainer ossfs.
Untuk CSI v1.30.4 dan versi selanjutnya
kubectl -n ack-csi-fuse logs csi-fuse-ossfs-xxxxUntuk versi CSI sebelum v1.30.4
kubectl -n kube-system logs csi-fuse-ossfs-xxxxJika Pod berada dalam status `CrashLoopBackOff`, ambil log dari keluaran tak terduga sebelumnya Pod tersebut:
kubectl -n kube-system logs -p csi-fuse-ossfs-xxxx
(Opsional) Jika log kosong atau tidak memberikan informasi yang cukup untuk mengidentifikasi masalah, tingkat log mungkin terlalu tinggi. Dalam hal ini, tambahkan konfigurasi yang diperlukan sebagai berikut.
CatatanMetode ini tidak mengharuskan Anda membuat ulang PV debug baru dan klaim volume persisten (PVC) yang sesuai. Namun, Anda tidak dapat langsung mengambil tanggapan permintaan REST dari OSS.
Buat PV OSS untuk debugging. Berdasarkan konfigurasi PV asli, tambahkan
-o dbglevel=debug -o curldbgke bidangotherOpts. Setelah Anda memasang PV OSS baru tersebut, jalankan perintahkubectl logsuntuk mengambil log debug dari Pod ossfs.PentingLog debug bisa sangat besar. Kami merekomendasikan agar Anda hanya menggunakan pengaturan ini untuk debugging.
Gunakan konten berikut untuk membuat ConfigMap bernama `csi-plugin` di namespace `kube-system`. Atur tingkat log menjadi
debug.CatatanUntuk plugin CSI v1.28.2 dan versi sebelumnya, Anda hanya dapat mengatur tingkat log ke `info`.
apiVersion: v1 kind: ConfigMap metadata: name: csi-plugin namespace: kube-system data: fuse-ossfs: | dbglevel=debug # Tingkat logMulai ulang Pod `csi-plugin` di node tempat aplikasi berada dan semua Pod `csi-provisioner` untuk menerapkan konfigurasi ConfigMap. Mulai ulang Pod aplikasi untuk memicu pemasangan ulang, dan pastikan Pod
csi-fuse-ossfs-xxxxditerapkan ulang setelah pemasangan ulang.PentingConfigMap adalah konfigurasi global. Setelah debugging, hapus ConfigMap tersebut. Kemudian, mulai ulang Pod `csi-plugin` di node dan semua Pod `csi-provisioner` lagi untuk mematikan logging debug. Terakhir, mulai ulang Pod aplikasi untuk memicu pemasangan ulang lainnya guna mencegah ossfs menghasilkan log debug berlebihan.
Analisis log kontainer ossfs.
Umumnya, kesalahan ossfs terbagi menjadi dua kategori: kesalahan dari ossfs itu sendiri dan kode kesalahan non-200 yang dikembalikan oleh server OSS setelah permintaan. Contoh berikut untuk setiap jenis kesalahan menunjukkan metode pemecahan masalah umum.
Kesalahan dari ossfs itu sendiri
ossfs: Direktori MOUNTPOINT /test tidak kosong. Jika Anda yakin ini aman, Anda dapat menggunakan opsi pemasangan 'nonempty'.Berdasarkan pesan log tersebut, kesalahan terjadi karena jalur titik pemasangan tidak kosong. Anda dapat mengatasi masalah ini dengan menambahkan item konfigurasi
-o nonempty.CatatanAnda dapat menemukan solusi dalam dokumen FAQ ossfs berdasarkan log kesalahan. Jika Anda tidak dapat menemukan penyebabnya, kirim tiket.
Kode kesalahan non-200 yang dikembalikan oleh server OSS
Ambil log tersebut. Sebelum ossfs keluar, ia memeriksa bucket yang akan dipasang. Server OSS mengembalikan kode kesalahan 404, penyebab kesalahan adalah NoSuchBucket, dan pesan kesalahannya adalah Bucket yang ditentukan tidak ada.
[ERROR] 2023-10-16 12:38:38:/tmp/ossfs/src/curl.cpp:CheckBucket(3420): Pemeriksaan bucket gagal, tanggapan oss: <?xml version="1.0" encoding="UTF-8"?> <Error> <Code>NoSuchBucket</Code> <Message>The specified bucket does not exist.</Message> <RequestId>652D2ECEE1159C3732F6E0EF</RequestId> <HostId><bucket-name>.oss-<region-id>-internal.aliyuncs.com</HostId> <BucketName><bucket-name></BucketName> <EC>0015-00000101</EC> <RecommendDoc>https://api.aliyun.com/troubleshoot?q=0015-00000101</RecommendDoc> </Error>Berdasarkan pesan log tersebut, kesalahan terjadi karena bucket OSS yang ditentukan tidak ada. Untuk mengatasi masalah ini, masuk ke Konsol OSS, buat bucket tersebut, lalu pasang ulang volumenya.
CatatanAnda dapat menemukan solusi dalam topik Kode Kesalahan HTTP pada dokumentasi OSS menggunakan kode kesalahan dan pesan kesalahan tersebut.
Informasi tambahan
Instruksi tingkat log
Jika tingkat log terlalu tinggi sehingga tidak dapat mengidentifikasi masalah, dan Anda memiliki persyaratan berikut:
Anda tidak ingin membuat ulang PV OSS.
Anda khawatir konfigurasi ConfigMap global dapat memengaruhi operasi lain, seperti pemasangan atau pencopotan pemasangan PV OSS lain selama debugging.
Dalam kasus ini, Anda dapat memasang ossfs di latar depan dan mengambil log debug untuk mengidentifikasi masalah. Untuk langkah-langkah spesifiknya, lihat solusi untuk versi plugin CSI sebelum 1.26.6.
PentingSetelah ossfs dikontainerisasi, ossfs tidak diinstal pada node secara default. Versi ossfs yang Anda instal secara manual mungkin berbeda dari versi yang berjalan di dalam Pod. Kami merekomendasikan agar Anda terlebih dahulu mencoba solusi yang dijelaskan di atas dengan mengubah parameter pemasangan PV atau konfigurasi ConfigMap global.
Untuk memasang ossfs, lakukan langkah-langkah berikut.
Instal versi terbaru ossfs.
Di node, jalankan perintah berikut untuk mengambil nilai SHA-256 dari nama PV.
echo -n "<PV_NAME>" | sha256sumJika sistem Anda tidak mendukung operasi `sha256sum`, Anda juga dapat menggunakan library OpenSSL untuk mengambil nilai tersebut:
echo -n "<PV_NAME>" | openssl sha256 -binary | xxd -p -c 256Untuk "pv-oss", keluaran yang diharapkan adalah:
8f3e75e1af90a7dcc66882ec1544cb5c7c32c82c2b56b25a821ac77cea60a928Di node, jalankan perintah berikut untuk mengambil parameter pemasangan ossfs.
ps -aux | grep <sha256-value>Keluarannya berisi catatan proses untuk ossfs.
Di node, jalankan perintah berikut untuk menghasilkan informasi autentikasi yang diperlukan untuk memasang ossfs. Setelah debugging, segera hapus file ini.
mkdir -p /etc/ossfs && echo "<bucket-name>:<akId>:<akSecret>" > /etc/ossfs/passwd-ossfs && chmod 600 /etc/ossfs/passwd-ossfs
Pemecahan masalah segmentation fault
Jika log kesalahan berisi
"ossfs exited with error" err="signal: segmentation fault (core dumped) ", ini menunjukkan bahwa proses ossfs keluar secara tak terduga karena segmentation fault selama runtime.Untuk membantu dukungan teknis mengidentifikasi masalah, masuk ke node logon, ikuti prosedur di bawah ini untuk mendapatkan file core dump, lalu kirim tiket.
Temukan catatan crash proses ossfs.
coredumpctl listKeluaran yang diharapkan:
TIME PID UID GID SIG COREFILE EXE Mon 2025-11-17 11:21:44 CST 2108767 0 0 1 present /usr/bin/xxx Tue 2025-11-18 19:35:58 CST 493791 0 0 1 present /usr/local/bin/ossfsKeluaran di atas menunjukkan bahwa dua proses di node ini telah keluar karena segmentation fault.
Temukan catatan yang akan dipecahkan berdasarkan waktu (
TIME) dan nama proses (EXE), lalu catatPID-nya. Dalam contoh di atas, PID-nya adalah493791.Ekspor file core dump. Gunakan
PIDdari langkah sebelumnya dan jalankan perintah berikut untuk mengekspor file core. Parameter--outputmenentukan nama file yang dihasilkan.# Ganti <PID> dengan PID yang sebenarnya coredumpctl dump <PID> --output ossfs.dumpkirim tiket dan berikan file
ossfs.dumpyang dihasilkan.
Versi plugin CSI sebelum 1.26.6
Gejala
Saat Pod aplikasi dimulai, statusnya tetap dalam keadaan ContainerCreating dalam waktu lama.
Penyebab
Jalankan perintah berikut untuk menentukan mengapa Pod tidak dapat dimulai sebagaimana mestinya.
Ganti variabel berikut:
<POD_NAMESPACE>: namespace tempat Pod aplikasi berada.<POD_NAME>: nama Pod aplikasi.kubectl -n <POD_NAMESPACE> describe pod <POD_NAME>
Periksa apakah ada event dengan penyebab `FailedMount` di bagian Events dari keluaran perintah.
Ganti variabel berikut:
<PV_NAME>: nama volume OSS.<BUCKET>: nama bucket OSS yang dipasang.<PATH>: jalur bucket OSS yang dipasang.<POD_UID>: UID Pod aplikasi.Warning FailedMount 3s kubelet MountVolume.SetUp failed for volume "<PV_NAME>" : rpc error: code = Unknown desc = Mount is failed in host, mntCmd:systemd-run --scope -- /usr/local/bin/ossfs <BUCKET>:/<PATH> /var/lib/kubelet/pods/<POD_UID>/volumes/kubernetes.io~csi/<PV_NAME>/mount -ourl=oss-cn-beijing-internal.aliyuncs.com -o allow_other , err: ..... with error: exit status 1Penyebab event ini: Event ini terjadi karena ossfs keluar secara tak terduga saat komponen CSI memulainya. Akibatnya, tidak ada proses ossfs yang sesuai yang berjalan di node. Masalah ini dapat disebabkan oleh kesalahan pemeriksaan inisialisasi, seperti pemeriksaan konektivitas OSS yang gagal (misalnya, bucket tidak ada atau izin salah), jalur pemasangan yang tidak ada, atau izin baca/tulis yang tidak mencukupi.
Solusi
Langkah 1: Ambil perintah startup ossfs asli
Periksa event `FailedMount` untuk melihat keluaran dari kegagalan pemasangan. Untuk informasi lebih lanjut, lihat Skenario 1: Kegagalan Pemasangan.
Ambil perintah startup ossfs asli dari keluaran kegagalan pemasangan.
Berikut adalah contoh keluaran kegagalan pemasangan:
Warning FailedMount 3s kubelet MountVolume.SetUp failed for volume "<PV_NAME>" : rpc error: code = Unknown desc = Mount is failed in host, mntCmd:systemd-run --scope -- /usr/local/bin/ossfs <BUCKET>:/<PATH> /var/lib/kubelet/pods/<POD_UID>/volumes/kubernetes.io~csi/<PV_NAME>/mount -ourl=oss-cn-beijing-internal.aliyuncs.com -o allow_other , err: ..... with error: exit status 1Dalam `mntCmd`, konten setelah
systemd-run --scope --adalah perintah startup ossfs asli. Perintah startup ossfs asli adalah sebagai berikut:/usr/local/bin/ossfs <BUCKET>:/<PATH> /var/lib/kubelet/pods/<POD_UID>/volumes/kubernetes.io~csi/<PV_NAME>/mount -ourl=oss-cn-beijing-internal.aliyuncs.com -o allow_other
Langkah 2: Pasang ossfs di latar depan dan ambil log debug
Secara default, hanya pengguna yang menjalankan perintah pemasangan yang dapat mengakses direktori yang dipasang oleh ossfs. Pengguna lain tidak dapat mengakses direktori tersebut. Oleh karena itu, jika perintah asli tidak menyertakan item konfigurasi -o allow_other, masalah izin mungkin terjadi pada jalur pemasangan root.
Pastikan apakah ada masalah izin jalur titik pemasangan.
Jika ada masalah izin, tambahkan item konfigurasi
-o allow_othersaat membuat PV. Untuk informasi lebih lanjut tentang cara mengonfigurasi izin akses untuk titik pemasangan ossfs, lihat Pasang bucket. Untuk informasi lebih lanjut tentang cara menambahkan item konfigurasi, lihat Gunakan volume ossfs 1.0 yang disediakan secara statis.Jalankan perintah berikut di node tempat Pod aplikasi berada untuk menjalankan ossfs di latar depan dan mengatur mode log ke Debug.
Dalam perintah ini,
/testadalah jalur titik pemasangan uji. Proses ossfs yang berjalan di latar depan memasang bucket OSS ke/test.mkdir /test && /usr/local/bin/ossfs <BUCKET>:/<PATH> /test -ourl=oss-cn-beijing-internal.aliyuncs.com -f -o allow_other -o dbglevel=debug -o curldbgParameter
Deskripsi
-f
Menjalankan ossfs di latar depan, bukan sebagai proses daemon. Dalam mode latar depan, log dikeluarkan ke layar terminal. Parameter ini biasanya digunakan untuk debugging.
-o allow_other
Memberikan izin kepada pengguna lain di komputer untuk mengakses direktori yang dipasang. Ini mencegah masalah izin jalur titik pemasangan baru saat memasang ossfs di latar depan.
-o dbglevel=debug
Mengatur tingkat log ossfs ke debug.
-o curldbg
Mengaktifkan logging libcurl untuk memecahkan masalah kesalahan yang dikembalikan oleh server OSS.
Langkah 3: Analisis log debug
Setelah Anda menjalankan ossfs di latar depan, log dikeluarkan ke terminal. Umumnya, kesalahan ossfs terbagi menjadi dua kategori: kesalahan dari ossfs itu sendiri dan kode kesalahan non-200 yang dikembalikan oleh server OSS setelah permintaan. Contoh berikut untuk setiap jenis kesalahan menunjukkan metode pemecahan masalah umum.
Contoh berikut menunjukkan cara memecahkan masalah ketika ossfs keluar segera setelah dimulai selama kegagalan pemasangan.
Kesalahan dari ossfs itu sendiri
Periksa log tersebut. Log kesalahan yang dicetak sebelum ossfs keluar adalah sebagai berikut.
ossfs: Direktori MOUNTPOINT /test tidak kosong. Jika Anda yakin ini aman, Anda dapat menggunakan opsi pemasangan 'nonempty'.Berdasarkan pesan log tersebut, kesalahan terjadi karena jalur titik pemasangan tidak kosong. Anda dapat mengatasi masalah ini dengan menambahkan item konfigurasi -o nonempty.
Anda dapat menemukan solusi dalam topik FAQ ossfs pada dokumentasi OSS berdasarkan log kesalahan. Jika Anda tidak dapat menemukan penyebabnya, kirim tiket.
Kode kesalahan non-200 yang dikembalikan oleh server OSS
Periksa log tersebut. Kode kesalahan yang dikembalikan oleh server OSS dan dicetak sebelum ossfs keluar adalah 404. Penyebabnya adalah NoSuchBucket, dan pesannya adalah The specified bucket does not exist.
[INFO] Jul 10 2023:13:03:47:/tmp/ossfs/src/curl.cpp:RequestPerform(2382): Kode respons HTTP 404 dikembalikan, mengembalikan ENOENT, Teks Isi: <?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>NoSuchBucket</Code>
<Message>The specified bucket does not exist.</Message>
<RequestId>xxxx</RequestId>
<HostId><BUCKET>.oss-cn-beijing-internal.aliyuncs.com</HostId>
<BucketName><BUCKET></BucketName>
<EC>0015-00000101</EC>
</Error>Berdasarkan pesan log tersebut, kesalahan terjadi karena bucket OSS yang ditentukan tidak ada. Untuk mengatasi masalah ini, masuk ke Konsol OSS, buat bucket tersebut, lalu pasang ulang volumenya.
Anda dapat menemukan solusi dalam topik Kode Kesalahan HTTP pada dokumentasi OSS menggunakan kode kesalahan dan pesan kesalahan tersebut.
Skenario 2: Kesalahan saat menjalankan perintah POSIX
Versi plugin CSI 1.26.6 dan versi selanjutnya
Gejala
Pod aplikasi berada dalam status `Running`, tetapi ossfs melaporkan kesalahan saat perintah POSIX, seperti perintah baca atau tulis, dijalankan.
Penyebab
Pastikan apakah kontainer ossfs berjalan sebagaimana mestinya.
CatatanDalam perintah tersebut,
<NODE_NAME>adalah nama node tempat Pod aplikasi yang bermasalah berada.Dalam perintah tersebut,
<VOLUME_ID>biasanya merupakan nama PV aplikasi. Anda harus mengambil nilai ini dalam dua skenario berikut:Jika nama PV berbeda dari nilai bidang `volumeHandle` PV, gunakan bidang `volumeHandle`. Jalankan perintah berikut untuk mengambil nilai `volumeHandle` suatu PV:
kubectl get pv <PV_NAME> -o jsonpath='{.spec.csi.volumeHandle}'Jika nama PV terlalu panjang,
<VOLUME_ID>dibentuk dengan menggabungkan "h1." dengan nilai SHA-1-nya. Jalankan perintah berikut untuk mengambil nilai ini:echo -n "<PV_NAME>" | sha1sum | sed 's/^/h1./'Jika sistem Anda tidak mendukung operasi
sha1sum, Anda juga dapat menggunakan library OpenSSL untuk mengambil nilai tersebut:echo -n "<PV_NAME>" | openssl sha1 -binary | xxd -p -c 40 | sed 's/^/h1./'
CSI v1.30.4 dan versi selanjutnya
kubectl -n ack-csi-fuse get pod -l csi.alibabacloud.com/volume-id=<VOLUME_ID> -o wide | grep <NODE_NAME>Karena versi ini menambahkan proses daemon ke dalam kontainer ossfs, keluaran yang diharapkan sama terlepas dari apakah proses ossfs berjalan sebagaimana mestinya:
NAME READY STATUS RESTARTS AGE csi-fuse-ossfs-xxxx 1/1 Running 0 5sJika kontainer ossfs tidak dalam status `Running`, pecahkan masalah tersebut terlebih dahulu.
Versi CSI sebelum v1.30.4
kubectl -n kube-system get pod -l csi.alibabacloud.com/volume-id=<VOLUME_ID> -o wide | grep <NODE_NAME>Jika kontainer ossfs tidak berjalan sebagaimana mestinya, keluarannya sebagai berikut:
NAME READY STATUS RESTARTS AGE csi-fuse-ossfs-xxxx 0/1 CrashLoopBackOff 1 (4s ago) 5s
Periksa log aplikasi untuk memastikan perintah yang menyebabkan kesalahan dan jenis kesalahan yang dikembalikan. Misalnya,
I/O errordikembalikan saat Anda menjalankan perintahchmod -R 777 /mnt/path.
Penyebab event ini: Setelah komponen CSI memulai kontainer ossfs, Pod ossfs berjalan sebagaimana mestinya dan memasang bucket OSS ke jalur titik pemasangan yang ditentukan di node tempat Pod aplikasi berada. Namun, saat perintah POSIX seperti `chmod`, `read`, atau `open` dijalankan, ossfs berjalan secara abnormal, mengembalikan kesalahan, dan mencetak kesalahan yang sesuai ke log.
Solusi
Ambil log kontainer ossfs.
Untuk CSI v1.30.4 dan versi selanjutnya
kubectl -n ack-csi-fuse logs csi-fuse-ossfs-xxxxUntuk versi CSI sebelum v1.30.4
kubectl -n kube-system logs csi-fuse-ossfs-xxxxJika Pod berada dalam status `CrashLoopBackOff`, ambil log dari keluaran tak terduga sebelumnya Pod tersebut:
kubectl -n kube-system logs -p csi-fuse-ossfs-xxxx
(Opsional) Jika log kosong atau tidak memberikan informasi yang cukup untuk mengidentifikasi masalah, tingkat log mungkin terlalu tinggi. Dalam hal ini, tambahkan konfigurasi yang diperlukan sebagai berikut.
CatatanMetode ini tidak mengharuskan Anda membuat ulang PV debug baru dan klaim volume persisten (PVC) yang sesuai. Namun, Anda tidak dapat langsung mengambil tanggapan permintaan REST dari OSS.
Buat PV OSS untuk debugging. Berdasarkan konfigurasi PV asli, tambahkan
-o dbglevel=debug -o curldbgke bidangotherOpts. Setelah Anda memasang PV OSS baru tersebut, jalankan perintahkubectl logsuntuk mengambil log debug dari Pod ossfs.PentingLog debug bisa sangat besar. Kami merekomendasikan agar Anda hanya menggunakan pengaturan ini untuk debugging.
Gunakan konten berikut untuk membuat ConfigMap bernama `csi-plugin` di namespace `kube-system`. Atur tingkat log menjadi
debug.CatatanUntuk plugin CSI v1.28.2 dan versi sebelumnya, Anda hanya dapat mengatur tingkat log ke `info`.
apiVersion: v1 kind: ConfigMap metadata: name: csi-plugin namespace: kube-system data: fuse-ossfs: | dbglevel=debug # Tingkat logMulai ulang Pod `csi-plugin` di node tempat aplikasi berada dan semua Pod `csi-provisioner` untuk menerapkan konfigurasi ConfigMap. Mulai ulang Pod aplikasi untuk memicu pemasangan ulang, dan pastikan Pod
csi-fuse-ossfs-xxxxditerapkan ulang setelah pemasangan ulang.PentingConfigMap adalah konfigurasi global. Setelah debugging, hapus ConfigMap tersebut. Kemudian, mulai ulang Pod `csi-plugin` di node dan semua Pod `csi-provisioner` lagi untuk mematikan logging debug. Terakhir, mulai ulang Pod aplikasi untuk memicu pemasangan ulang lainnya guna mencegah ossfs menghasilkan log debug berlebihan.
Analisis log kontainer ossfs.
Umumnya, kesalahan ossfs terbagi menjadi dua kategori: kesalahan dari ossfs itu sendiri dan kode kesalahan non-200 yang dikembalikan oleh server OSS setelah permintaan. Contoh berikut untuk setiap jenis kesalahan menunjukkan metode pemecahan masalah umum.
Kesalahan dari ossfs itu sendiri
Bagian ini menggunakan kesalahan yang terjadi saat Anda menjalankan perintah
chmod -R 777 <mount_point_path_in_application_pod>sebagai contoh untuk menunjukkan cara memecahkan masalah tersebut.Jika jalur pemasangan uji untuk ossfs adalah
/test, jalankan perintah berikut.chmod -R 777 /testSetelah Anda memeriksa log, Anda menemukan bahwa operasi `chmod` berhasil untuk file di jalur titik pemasangan
/test, tetapi operasi `chmod` pada/testitu sendiri menghasilkan log kesalahan berikut.[ERROR] 2023-10-18 06:03:24:/tmp/ossfs/src/ossfs.cpp:ossfs_chmod(1745): Tidak dapat mengubah mode untuk titik pemasangan.Berdasarkan pesan log tersebut, Anda tidak dapat mengubah izin jalur titik pemasangan menggunakan `chmod`. Untuk informasi lebih lanjut tentang cara memodifikasi izin titik pemasangan, lihat FAQ volume ossfs 1.0.
CatatanAnda dapat menemukan solusi dalam topik FAQ ossfs pada dokumentasi OSS berdasarkan log kesalahan. Jika Anda tidak dapat menemukan penyebabnya, kirim tiket.
Kode kesalahan non-200 yang dikembalikan oleh server OSS
Contoh berikut menunjukkan cara memecahkan masalah ketika kesalahan dikembalikan untuk semua operasi pada objek di bucket.
[INFO] 2023-10-18 06:05:46:/tmp/ossfs/src/curl.cpp:HeadRequest(3014): [tpath=/xxxx] [INFO] 2023-10-18 06:05:46:/tmp/ossfs/src/curl.cpp:PreHeadRequest(2971): [tpath=/xxxx][bpath=][save=][sseckeypos=-1] [INFO] 2023-10-18 06:05:46:/tmp/ossfs/src/curl.cpp:prepare_url(4660): URL adalah http://oss-cn-beijing-internal.aliyuncs.com/<bucket>/<path>/xxxxx [INFO] 2023-10-18 06:05:46:/tmp/ossfs/src/curl.cpp:prepare_url(4693): URL berubah menjadi http://<bucket>.oss-cn-beijing-internal.aliyuncs.com/<path>/xxxxx [INFO] 2023-10-18 06:05:46:/tmp/ossfs/src/curl.cpp:RequestPerform(2383): Kode respons HTTP 404 dikembalikan, mengembalikan ENOENT, Teks Isi:Jalankan perintah yang menyebabkan kesalahan. Kode kembalian HTTP dari server OSS yang dicetak sebelum keluar adalah 404. Penyebabnya disimpulkan karena objek tersebut tidak ada di server OSS. Untuk informasi lebih lanjut tentang penyebab masalah ini dan solusinya, lihat kesalahan 404.
CatatanAnda dapat menemukan solusi dalam topik Kode Kesalahan HTTP pada dokumentasi OSS menggunakan kode kesalahan dan pesan kesalahan tersebut.
Informasi tambahan
Instruksi tingkat log
Jika tingkat log terlalu tinggi sehingga tidak dapat mengidentifikasi masalah, dan Anda memiliki persyaratan berikut:
Anda tidak ingin membuat ulang PV OSS.
Anda khawatir konfigurasi ConfigMap global dapat memengaruhi operasi lain, seperti pemasangan atau pencopotan pemasangan PV OSS lain selama debugging.
Dalam kasus ini, Anda dapat memasang ossfs di latar depan dan mengambil log debug untuk mengidentifikasi masalah. Untuk langkah-langkah spesifiknya, lihat solusi untuk versi plugin CSI sebelum 1.26.6.
PentingSetelah ossfs dikontainerisasi, ossfs tidak diinstal pada node secara default. Versi ossfs yang Anda instal secara manual mungkin berbeda dari versi yang berjalan di dalam Pod. Kami merekomendasikan agar Anda terlebih dahulu mencoba solusi yang dijelaskan di atas dengan mengubah parameter pemasangan PV atau konfigurasi ConfigMap global.
Untuk memasang ossfs, lakukan langkah-langkah berikut.
Instal versi terbaru ossfs.
Di node, jalankan perintah berikut untuk mengambil nilai SHA-256 dari nama PV.
echo -n "<PV_NAME>" | sha256sumJika sistem Anda tidak mendukung operasi `sha256sum`, Anda juga dapat menggunakan library OpenSSL untuk mengambil nilai tersebut:
echo -n "<PV_NAME>" | openssl sha256 -binary | xxd -p -c 256Untuk "pv-oss", keluaran yang diharapkan adalah:
8f3e75e1af90a7dcc66882ec1544cb5c7c32c82c2b56b25a821ac77cea60a928Di node, jalankan perintah berikut untuk mengambil parameter pemasangan ossfs.
ps -aux | grep <sha256-value>Keluarannya berisi catatan proses untuk ossfs.
Di node, jalankan perintah berikut untuk menghasilkan informasi autentikasi yang diperlukan untuk memasang ossfs. Setelah debugging, segera hapus file ini.
mkdir -p /etc/ossfs && echo "<bucket-name>:<akId>:<akSecret>" > /etc/ossfs/passwd-ossfs && chmod 600 /etc/ossfs/passwd-ossfs
Pemecahan masalah segmentation fault
Jika log kesalahan berisi
"ossfs exited with error" err="signal: segmentation fault (core dumped) ", ini menunjukkan bahwa proses ossfs keluar secara tak terduga karena segmentation fault selama runtime.Untuk membantu dukungan teknis mengidentifikasi masalah, masuk ke node logon, ikuti prosedur di bawah ini untuk mendapatkan file core dump, lalu kirim tiket.
Temukan catatan crash proses ossfs.
coredumpctl listKeluaran yang diharapkan:
TIME PID UID GID SIG COREFILE EXE Mon 2025-11-17 11:21:44 CST 2108767 0 0 1 present /usr/bin/xxx Tue 2025-11-18 19:35:58 CST 493791 0 0 1 present /usr/local/bin/ossfsKeluaran di atas menunjukkan bahwa dua proses di node ini telah keluar karena segmentation fault.
Temukan catatan yang akan dipecahkan berdasarkan waktu (
TIME) dan nama proses (EXE), lalu catatPID-nya. Dalam contoh di atas, PID-nya adalah493791.Ekspor file core dump. Gunakan
PIDdari langkah sebelumnya dan jalankan perintah berikut untuk mengekspor file core. Parameter--outputmenentukan nama file yang dihasilkan.# Ganti <PID> dengan PID yang sebenarnya coredumpctl dump <PID> --output ossfs.dumpkirim tiket dan berikan file
ossfs.dumpyang dihasilkan.
Versi plugin CSI sebelum 1.26.6
Gejala
Pod aplikasi berada dalam status `Running`, tetapi ossfs melaporkan kesalahan saat perintah POSIX, seperti perintah baca atau tulis, dijalankan.
Penyebab
Periksa log aplikasi untuk memastikan perintah yang menyebabkan kesalahan dan jenis kesalahan yang dikembalikan. Misalnya, I/O error dikembalikan saat Anda menjalankan perintah chmod -R 777 /mnt/path.
Anda dapat menjalankan perintah berikut untuk masuk ke Pod aplikasi dan memastikan.
kubectl -n <POD_NAMESPACE> exec -it <POD_NAME> -- /bin/bash
bash-4.4# chmod -R 777 /mnt/path
chmod: /mnt/path: I/O errorPenyebab event ini: Event ini terjadi karena setelah komponen CSI memulai ossfs, proses ossfs berjalan sebagaimana mestinya dan memasang bucket OSS ke jalur titik pemasangan yang ditentukan di node tempat Pod aplikasi berada. Namun, saat perintah POSIX seperti chmod, read, atau open dijalankan, ossfs berjalan secara abnormal dan mengembalikan kesalahan.
Solusi
Langkah 1: Ambil perintah startup ossfs asli
Karena ossfs sudah berjalan di node, Anda dapat menjalankan perintah berikut di node tempat Pod aplikasi berada untuk mengambil perintah startup ossfs asli menggunakan nama volume OSS.
ps -aux | grep ossfs | grep <PV_NAME>Keluaran yang diharapkan:
root 2097450 0.0 0.2 124268 33900 ? Ssl 20:47 0:00 /usr/local/bin/ossfs <BUCKET> /<PATH> /var/lib/kubelet/pods/<POD_UID>/volumes/kubernetes.io~csi/<PV_NAME>/mount -ourl=oss-cn-beijing-internal.aliyuncs.com -o allow_otherDalam perintah tersebut, ganti spasi setelah <BUCKET> dengan tanda titik dua (:). Artinya, ubah <BUCKET> /<PATH> menjadi <BUCKET>:/<PATH>. Perintah startup ossfs asli adalah sebagai berikut.
/usr/local/bin/ossfs <BUCKET>:/<PATH> /var/lib/kubelet/pods/<POD_UID>/volumes/kubernetes.io~csi/<PV_NAME>/mount -ourl=oss-cn-beijing-internal.aliyuncs.com -o allow_otherLangkah 2: Pasang ossfs di latar depan dan ambil log debug
Secara default, hanya pengguna yang menjalankan perintah pemasangan yang dapat mengakses direktori yang dipasang oleh ossfs. Pengguna lain tidak dapat mengakses direktori tersebut. Oleh karena itu, jika perintah asli tidak menyertakan item konfigurasi -o allow_other, masalah izin mungkin terjadi pada jalur pemasangan root.
Pastikan apakah ada masalah izin jalur titik pemasangan.
Jika ada masalah izin, tambahkan item konfigurasi
-o allow_othersaat membuat PV. Untuk informasi lebih lanjut tentang cara mengonfigurasi izin akses untuk titik pemasangan ossfs, lihat Pasang bucket. Untuk informasi lebih lanjut tentang cara menambahkan item konfigurasi, lihat Gunakan volume ossfs 1.0 yang disediakan secara statis.Jalankan perintah berikut di node tempat Pod aplikasi berada untuk menjalankan ossfs di latar depan dan mengatur mode log ke Debug.
Dalam perintah ini,
/testadalah jalur titik pemasangan uji. Proses ossfs yang berjalan di latar depan memasang bucket OSS ke/test.mkdir /test && /usr/local/bin/ossfs <BUCKET>:/<PATH> /test -ourl=oss-cn-beijing-internal.aliyuncs.com -f -o allow_other -o dbglevel=debug -o curldbgParameter
Deskripsi
-f
Menjalankan ossfs di latar depan, bukan sebagai proses daemon. Dalam mode latar depan, log dikeluarkan ke layar terminal. Parameter ini biasanya digunakan untuk debugging.
-o allow_other
Memberikan izin kepada pengguna lain di komputer untuk mengakses direktori yang dipasang. Ini mencegah masalah izin jalur titik pemasangan baru saat memasang ossfs di latar depan.
-o dbglevel=debug
Mengatur tingkat log ossfs ke debug.
-o curldbg
Mengaktifkan logging libcurl untuk memecahkan masalah kesalahan yang dikembalikan oleh server OSS.
Langkah 3: Analisis log debug
Setelah Anda menjalankan ossfs di latar depan, log dikeluarkan ke terminal. Umumnya, kesalahan ossfs terbagi menjadi dua kategori: kesalahan dari ossfs itu sendiri dan kode kesalahan non-200 yang dikembalikan oleh server OSS setelah permintaan. Contoh berikut untuk setiap jenis kesalahan menunjukkan metode pemecahan masalah umum.
Jika perintah POSIX gagal, Anda perlu membuka terminal lain untuk menjalankan ulang perintah tersebut dan menganalisis log ossfs yang baru.
Kesalahan dari ossfs itu sendiri
Contoh berikut menjelaskan cara memecahkan kesalahan yang terjadi saat Anda menjalankan perintah chmod -R 777 <mount_point_path_in_application_pod>.
Karena proses ossfs uji dipasang ke jalur /test, perintahnya adalah sebagai berikut.
chmod -R 777 /testAnda dapat menanyakan log tersebut. Operasi `chmod` berhasil untuk file di jalur titik pemasangan /test. Namun, log kesalahan berikut dihasilkan untuk operasi `chmod` pada /test itu sendiri.
[ERROR] Jul 10 2023:13:03:18:/tmp/ossfs/src/ossfs.cpp:ossfs_chmod(1742): Tidak dapat mengubah mode untuk titik pemasangan.Berdasarkan pesan log tersebut, Anda tidak dapat mengubah izin jalur titik pemasangan menggunakan `chmod`. Untuk informasi lebih lanjut tentang cara memodifikasi izin titik pemasangan, lihat FAQ volume ossfs 1.0.
Anda dapat menemukan solusi dalam topik FAQ ossfs pada dokumentasi OSS berdasarkan log kesalahan. Jika Anda tidak dapat menemukan penyebabnya, kirim tiket.
Kode kesalahan non-200 yang dikembalikan oleh server OSS
Contoh berikut menjelaskan cara memecahkan masalah ketika server mengembalikan kesalahan saat Anda melakukan operasi pada objek di bucket.
[INFO] Aug 23 2022:11:54:11:/tmp/ossfs/src/curl.cpp:RequestPerform(2377): Kode respons HTTP 404 dikembalikan, mengembalikan ENOENT, Teks Isi: <?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<RequestId>xxxx</RequestId>
<HostId><BUCKET>.oss-cn-beijing-internal.aliyuncs.com</HostId>
<Key><object-name></Key>
<EC>0026-00000001</EC>
</Error>Saat perintah gagal dijalankan, kode kembalian dari server OSS adalah 404, penyebab kesalahan adalah NoSuchKey, dan pesan kesalahannya adalah The specified key does not exist.
Data log menunjukkan bahwa objek tersebut tidak dapat ditemukan di server OSS. Untuk informasi lebih lanjut tentang penyebab masalah ini dan solusi yang sesuai, lihat NoSuchKey.
Anda dapat menemukan solusi dalam topik Kode Kesalahan HTTP pada dokumentasi OSS menggunakan kode kesalahan dan pesan kesalahan tersebut.