Pasang file atau direktori host ke dalam pod untuk akses langsung ke log node, file konfigurasi, atau data pengembangan bersama.
Cara kerja
Ikhtisar proses
Setelah pod dijadwalkan ke suatu node, kubelet memasang volume HostPath sebelum kontainer dimulai. Kubelet memvalidasi dan menyiapkan path host yang didefinisikan dalam elemen path berdasarkan nilai type pada konfigurasi hostPath.
-
DirectoryOrCreate: Memeriksa apakahpathhost ada. Jika tidak, membuat direktori kosong dengan izin 0755 serta kepemilikan dan kelompok sesuai kubelet. -
Directory: Memastikanpathhost ada dan merupakan direktori. Jika tidak, pod gagal dimulai. -
FileOrCreate: Memeriksa apakahpathhost ada. Jika tidak, membuat file kosong dengan izin 0644 serta kepemilikan dan kelompok sesuai kubelet. -
File: Memastikanpathhost ada dan merupakan file. Jika tidak, pod gagal dimulai.
Setelah divalidasi, kubelet melakukan bind-mount terhadap path host ke dalam kontainer. Semua operasi baca dan tulis pada titik mount langsung mengarah ke sistem file node host.
Metode penggunaan
-
Pasang volume HostPath secara langsung dalam pod: Definisikan
hostPathlangsung di bagianvolumesmanifes pod. Metode ini sederhana tetapi mengikat penyimpanan erat dengan aplikasi, sehingga tidak disarankan untuk beban kerja produksi yang memerlukan pemeliharaan jangka panjang atau kemungkinan perubahan penyimpanan. -
Pasang volume HostPath menggunakan PV dan PVC: Definisikan
hostPathdalam PersistentVolume (PV) mandiri yang diminta oleh pod melalui PersistentVolumeClaim (PVC). Pendekatan ini memisahkan penyimpanan dari aplikasi sehingga Anda dapat mengelola penyimpanan secara independen tanpa mengubah konfigurasi pod.
Kesesuaian
Hanya didukung pada node ECS. Tidak tersedia untuk sumber daya komputasi arsitektur tanpa server seperti ECI dan ACS. Tidak disarankan pada disk lokal.
Metode satu: Pemasangan HostPath langsung
-
Buat file bernama
pod-hostpath-direct.yaml.Memasang direktori
/datanode ke/testdalam 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 path pada node host. path: /data # Tentukan tipe volume. type: DirectoryOrCreate -
Terapkan pod tersebut.
kubectl apply -f pod-hostpath-direct.yaml -
Verifikasi pemasangan.
Buat file di dalam pod dan pastikan file tersebut ada di node.
-
Buat file di dalam pod.
Buat
test.txtdi direktori/test(titik mount) pod.kubectl exec test-pod -- sh -c 'echo "This file was created from within the Pod." > /test/test.txt' -
Dapatkan nama node tempat pod berjalan.
NODE_NAME=$(kubectl get pod test-pod -o jsonpath='{.spec.nodeName}') echo "Pod is running on node: $NODE_NAME" -
Verifikasi file di node.
Login ke node dan jalankan
ls /datauntuk memeriksa apakah file tersebut ada di direktori/data.Jika output mencakup
test.txt, volume HostPath berhasil dipasang.
-
Metode dua: Pemasangan dengan PV dan PVC
-
Buat file bernama
pv-pvc-hostpath.yaml.Membuat PV yang mengarah ke direktori
/datahost, PVC yang meminta penyimpanan tersebut, dan pod yang menggunakan PVC.# --- 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 mengikat PVC 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 PVC yang didefinisikan sebelumnya. claimName: hostpath-pvc -
Buat PV, PVC, dan pod.
kubectl apply -f pv-pvc-hostpath.yaml -
Verifikasi pemasangan.
Buat file di dalam pod dan pastikan file tersebut ada di node.
-
Buat file di dalam pod.
Buat
test.txtdi direktori/usr/share/nginx/html(titik mount) pod.kubectl exec test-pod-pvc -- sh -c 'echo "File from PV/PVC Pod." > /usr/share/nginx/html/test.txt' -
Dapatkan nama node tempat pod berjalan.
NODE_NAME=$(kubectl get pod test-pod-pvc -o jsonpath='{.spec.nodeName}') echo "Pod is running on node: $NODE_NAME" -
Verifikasi file di node.
Login ke node dan jalankan
ls /datauntuk memeriksa apakah file tersebut ada di direktori/data.Jika output mencakup
test.txt, volume HostPath PV/PVC berhasil dipasang.
-
Pertimbangan produksi
-
Tingkatkan isolasi keamanan
-
Pasang dalam mode read-only: Jika aplikasi hanya membaca data node, atur
readOnly: truedi bagianvolumeMountsuntuk mencegah penulisan tidak sengaja ke node host. -
Ikuti prinsip hak istimewa minimal: Hindari memasang direktori root (
/) atau direktori sensitif seperti/etcdan/var. Gunakan direktori khusus.
-
-
Pantau sumber daya node
-
Pantau disk host: Kontainer yang menulis ke volume HostPath mengonsumsi ruang disk node. Siapkan pemantauan dan peringatan untuk partisi disk guna mencegah kehabisan ruang disk.
-
Evaluasi dampak I/O: Operasi baca/tulis yang sering pada volume HostPath mengonsumsi sumber daya I/O node, yang dapat memengaruhi pod lain atau stabilitas kubelet. Evaluasi dampak I/O sebelum menggunakan HostPath di lingkungan produksi.
-
-
Volume HostPath mengikat pod ke penyimpanan fisik node tertentu. Data terikat pada node tersebut dan tidak tersedia jika pod dijadwalkan ulang ke node lain.
-
Tidak cocok untuk aplikasi berstatus yang memerlukan ketersediaan tinggi, seperti database atau cache.
-
Data hanya ada di satu node. Saat pod dijadwalkan ulang ke node lain, akses ke data asli hilang.
-
Mengakses sistem file node host melanggar isolasi kontainer. Jika salah konfigurasi (misalnya, memasang direktori root
/) atau jika kontainer memiliki kerentanan, keamanan dan stabilitas node dapat terganggu.
-
-
Tidak cocok untuk node dengan sistem file root read-only, seperti ContainerOS.
-
FAQ
Apakah data tetap ada jika pod dibuat ulang?
Bergantung pada node tempat pod dijadwalkan.
-
Dijadwalkan ke node yang sama: Pod memasang direktori yang sama dan dapat mengakses semua data yang ada.
-
Dijadwalkan ke node berbeda: Pod memasang direktori kosong. Data tetap berada di node asal tetapi tidak dapat diakses.
=