Volume HostPath memasang file atau direktori dari sistem file node host secara langsung ke dalam pod. Hal ini memungkinkan pod untuk membaca dan menulis ke sistem file node tersebut. Gunakan HostPath untuk tugas-tugas seperti membaca log node, mengakses file konfigurasi tertentu, atau berbagi data di lingkungan pengembangan.
Cara Kerja
Alur kerja
Setelah pod dijadwalkan ke node target, kubelet pada node tersebut memasang volume HostPath sebelum kontainer dimulai. Kubelet memvalidasi dan menyiapkan jalur host (path) berdasarkan tipe pemasangan (type) yang didefinisikan dalam bidang hostPath.
DirectoryOrCreate: Jikapathhost yang ditentukan tidak ada, kubelet membuat direktori kosong dengan izin 0755. Pemilik dan kelompok direktori tersebut sesuai dengan kubelet.Directory:pathhost yang ditentukan harus ada dan berupa direktori. Jika tidak, pod gagal dimulai.FileOrCreate: Jikapathhost yang ditentukan tidak ada, kubelet membuat file kosong dengan izin 0644. Pemilik dan kelompok file tersebut sesuai dengan kubelet.File:pathhost yang ditentukan harus ada dan berupa file. Jika tidak, pod gagal dimulai.
Setelah validasi berhasil, kubelet melakukan bind-mount terhadap path host ke dalam kontainer. Semua operasi baca dan tulis selanjutnya pada titik pemasangan dilakukan secara langsung pada sistem file host.
Penggunaan
Pasang HostPath langsung di dalam pod: Definisikan
hostPathsecara langsung dalamvolumespod. Metode ini sederhana tetapi sangat mengikat penyimpanan dengan aplikasi. Hindari penggunaannya untuk aplikasi produksi yang memerlukan pemeliharaan jangka panjang atau kemungkinan perubahan penyimpanan di masa depan.Pasang HostPath menggunakan PersistentVolume (PV) dan PersistentVolumeClaim (PVC): Definisikan
hostPathdalam PV terpisah. Pod kemudian dapat meminta penyimpanan tersebut melalui PVC. Pendekatan ini memisahkan penyimpanan dari aplikasi, sehingga Anda dapat mengelola penyimpanan dasar secara independen tanpa mengubah konfigurasi pod.
Lingkup
Fitur ini hanya mendukung node ECS. Fitur ini tidak mendukung node komputasi heterogen, seperti node GPU atau Node Lingjun, maupun layanan komputasi arsitektur tanpa server, seperti ECI atau ACS.
Opsi satu: Pasang HostPath langsung di dalam pod
Buat file bernama
pod-hostpath-direct.yaml.Contoh ini memasang direktori
/datanode ke direktori/testdi dalam pod.apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 name: test-container volumeMounts: - mountPath: /test name: test-volume volumes: - name: test-volume hostPath: # Tentukan jalur host path: /data # Tentukan tipe pemasangan type: DirectoryOrCreateTerapkan pod tersebut.
kubectl apply -f pod-hostpath-direct.yamlVerifikasi pemasangan tersebut.
Buat file di dalam pod, lalu periksa apakah file tersebut ada di node. Hal ini memastikan bahwa pemasangan berhasil.
Buat file di dalam pod.
Buat file
test.txtdi direktori/testpod, yaitu titik pemasangan.kubectl exec test-pod -- sh -c 'echo "This file was created from within the Pod." > /test/test.txt'Dapatkan nama node tempat pod tersebut berjalan.
NODE_NAME=$(kubectl get pod test-pod -o jsonpath='{.spec.nodeName}') echo "Pod is running on node: $NODE_NAME"Verifikasi file tersebut di node.
Untuk informasi lebih lanjut, lihat Log on to a node. Jalankan perintah
ls /datauntuk memeriksa apakah direktori/databerisi file yang baru saja Anda buat.Jika output mencakup file
test.txt, maka volume HostPath telah berhasil dipasang.
Opsi dua: Pasang HostPath menggunakan PV dan PVC
Buat file bernama
pv-pvc-hostpath.yaml.Contoh ini membuat PV yang mengarah ke direktori
/datahost, PVC yang meminta penyimpanan tersebut, dan pod yang menggunakan PVC tersebut.# --- Definisi PersistentVolume --- apiVersion: v1 kind: PersistentVolume metadata: name: hostpath-pv labels: type: local spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce hostPath: path: "/data" --- # --- Definisi PersistentVolumeClaim --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: hostpath-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi # Gunakan selector untuk memastikan PVC terikat ke PV yang dibuat sebelumnya selector: matchLabels: type: local --- # --- Definisi Pod --- apiVersion: v1 kind: Pod metadata: name: test-pod-pvc spec: containers: - name: test-container image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - mountPath: "/usr/share/nginx/html" name: storage volumes: - name: storage persistentVolumeClaim: # Referensi ke PVC yang didefinisikan sebelumnya claimName: hostpath-pvcBuat PV, PVC, dan pod tersebut.
kubectl apply -f pv-pvc-hostpath.yamlVerifikasi pemasangan tersebut.
Buat file di dalam pod, lalu periksa apakah file tersebut ada di node. Hal ini memastikan bahwa pemasangan berhasil.
Buat file di dalam pod.
Buat file
test.txtdi direktori/usr/share/nginx/htmlpod, yaitu titik pemasangan.kubectl exec test-pod-pvc -- sh -c 'echo "File from PV/PVC Pod." > /usr/share/nginx/html/test.txt'Dapatkan nama node tempat pod tersebut berjalan.
NODE_NAME=$(kubectl get pod test-pod-pvc -o jsonpath='{.spec.nodeName}') echo "Pod is running on node: $NODE_NAME"Verifikasi file tersebut di node.
Untuk informasi lebih lanjut, lihat Log on to a node. Jalankan perintah
ls /datauntuk memeriksa apakah direktori/databerisi file yang baru saja Anda buat.Jika output mencakup file
test.txt, maka volume HostPath telah berhasil dipasang menggunakan PV dan PVC.
Menerapkan di Lingkungan Produksi
Tingkatkan isolasi keamanan
Pasang dalam mode read-only: Jika aplikasi Anda hanya perlu membaca data dari node, pasang volumenya dalam mode read-only (
ReadOnlyMany). Hal ini mencegah perubahan tidak disengaja pada file host.Ikuti prinsip hak istimewa minimal: Jangan memasang direktori root host (
/) atau direktori sistem sensitif seperti/etcatau/var. Gunakan direktori khusus untuk HostPath sebagai gantinya.
Pantau sumber daya node
Pantau disk host: Kontainer yang menulis ke volume HostPath akan mengonsumsi ruang disk node. Terapkan pemantauan dan peringatan untuk partisi disk guna mencegah node gagal akibat kehabisan ruang disk.
Evaluasi dampak I/O: Operasi baca dan tulis yang sering pada volume HostPath akan mengonsumsi sumber daya I/O node. Hal ini dapat memengaruhi pod aplikasi lain atau bahkan stabilitas kubelet. Anda harus mengevaluasi potensi dampak performa tersebut.
Volume HostPath mengikat pod secara langsung ke penyimpanan fisik pada node tertentu. Data dalam volume HostPath bersifat spesifik ke node tersebut dan tidak bertahan jika pod dipindahkan ke node lain.
Jangan gunakan HostPath untuk aplikasi berstatus yang memerlukan ketersediaan tinggi dan penyimpanan persisten, seperti database atau cache.
Data dalam volume HostPath hanya ada di satu node. Jika pod di-restart atau diperbarui lalu dijadwalkan ulang ke node lain, pod tersebut kehilangan akses ke data aslinya.
Mengizinkan pod mengakses sistem file host melanggar isolasi kontainer. Jika dikonfigurasi salah—misalnya dengan memasang direktori root
/—atau jika kontainer memiliki kerentanan, hal ini dapat membahayakan keamanan dan stabilitas node.
HostPath tidak cocok untuk node yang memiliki sistem file root read-only, seperti ContainerOS.
FAQ
Apakah data dalam volume HostPath tetap ada setelah pod dihapus dan dibuat ulang?
Hal ini bergantung pada node tempat pod baru dijadwalkan.
Jika pod dijadwalkan ke node yang sama: Pod baru memasang direktori yang sama di node tersebut dan dapat mengakses semua data sebelumnya.
Jika pod dijadwalkan ke node baru: Pod baru memasang direktori kosong di node baru tersebut. Data di node asli menjadi tidak dapat diakses oleh pod baru.
=