All Products
Search
Document Center

Container Service for Kubernetes:Gunakan volume HostPath

Last Updated:Jun 24, 2026

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 apakah path host ada. Jika tidak, membuat direktori kosong dengan izin 0755 serta kepemilikan dan kelompok sesuai kubelet.

  • Directory: Memastikan path host ada dan merupakan direktori. Jika tidak, pod gagal dimulai.

  • FileOrCreate: Memeriksa apakah path host ada. Jika tidak, membuat file kosong dengan izin 0644 serta kepemilikan dan kelompok sesuai kubelet.

  • File: Memastikan path host 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 hostPath langsung di bagian volumes manifes 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 hostPath dalam 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

  1. Buat file bernama pod-hostpath-direct.yaml.

    Memasang direktori /data node ke /test 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 path pada node host.
          path: /data
          # Tentukan tipe volume.
          type: DirectoryOrCreate
  2. Terapkan pod tersebut.

    kubectl apply -f pod-hostpath-direct.yaml
  3. Verifikasi pemasangan.

    Buat file di dalam pod dan pastikan file tersebut ada di node.

    1. Buat file di dalam pod.

      Buat test.txt di direktori /test (titik mount) pod.

      kubectl exec test-pod -- sh -c 'echo "This file was created from within the Pod." > /test/test.txt'
    2. 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"
    3. Verifikasi file di node.

      Login ke node dan jalankan ls /data untuk memeriksa apakah file tersebut ada di direktori /data.

      Jika output mencakup test.txt, volume HostPath berhasil dipasang.

Metode dua: Pemasangan dengan PV dan PVC

  1. Buat file bernama pv-pvc-hostpath.yaml.

    Membuat PV yang mengarah ke direktori /data host, 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
  2. Buat PV, PVC, dan pod.

    kubectl apply -f pv-pvc-hostpath.yaml
  3. Verifikasi pemasangan.

    Buat file di dalam pod dan pastikan file tersebut ada di node.

    1. Buat file di dalam pod.

      Buat test.txt di 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'
    2. 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"
    3. Verifikasi file di node.

      Login ke node dan jalankan ls /data untuk 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: true di bagian volumeMounts untuk mencegah penulisan tidak sengaja ke node host.

    • Ikuti prinsip hak istimewa minimal: Hindari memasang direktori root (/) atau direktori sensitif seperti /etc dan /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.

=