Tüm Ürünler
Search
Belge Merkezi

Container Service for Kubernetes:Use HostPath volumes

Son Güncelleme:Oct 15, 2026

Düğüm günlüklerine, yapılandırma dosyalarına veya paylaşılan geliştirme verilerine doğrudan erişim sağlamak için ana bilgisayar dosyalarını veya dizinlerini pod'lara bağlayın.

Nasıl çalışır

İşlem genel bakışı

Bir pod bir düğüme zamanlandıktan sonra kubelet, kapsayıcı başlamadan önce HostPath birimini bağlar. hostPath yapılandırmasındaki type değerine göre path içinde tanımlanan ana bilgisayar yolunu doğrular ve hazırlar.

  • DirectoryOrCreate: Ana bilgisayar path değerinin var olup olmadığını kontrol eder. Yoksa kubelet ile aynı sahiplik ve gruba sahip, 0755 izinlerine sahip boş bir dizin oluşturur.

  • Directory: Ana bilgisayar path değerinin var olduğunu ve bir dizin olduğunu kontrol eder. Değilse pod başlatılamaz.

  • FileOrCreate: Ana bilgisayar path değerinin var olup olmadığını kontrol eder. Yoksa kubelet ile aynı sahiplik ve gruba sahip, 0644 izinlerine sahip boş bir dosya oluşturur.

  • File: Ana bilgisayar path değerinin var olduğunu ve bir dosya olduğunu kontrol eder. Değilse pod başlatılamaz.

Doğrulama tamamlandıktan sonra kubelet, ana bilgisayar path değerini kapsayıcıya bind-mount ile bağlar. Bağlama noktasındaki tüm okuma ve yazma işlemleri doğrudan ana bilgisayar düğümünün dosya sistemine gider.

Kullanım yöntemleri

  • Pod'da doğrudan HostPath birimi bağlama: Pod manifestosunun volumes bölümünde hostPath tanımını doğrudan belirtin. Basittir ancak depolamayı uygulamaya sıkıca bağlar. Uzun vadeli bakım gerektiren veya depolama değişikliklerine ihtiyaç duyabilecek üretim iş yükleri için önerilmez.

  • PV ve PVC kullanarak HostPath birimi bağlama: hostPath tanımını bağımsız bir PV'de belirtin; pod bu depolamayı bir PVC aracılığıyla talep eder. Depolamayı uygulamadan ayırarak pod yapılandırmasını değiştirmeden depolamayı bağımsız olarak yönetmenize olanak tanır.

Uygulanabilirlik

Yalnızca ECS düğümlerinde desteklenir. ECI ve ACS gibi sunucusuz hesaplama kaynaklarında kullanılamaz. Yerel disklerde kullanılması önerilmez.

Birinci yöntem: Doğrudan HostPath bağlama

  1. pod-hostpath-direct.yaml adlı bir dosya oluşturun.

    Düğümün /data dizinini pod içindeki /test dizinine bağlar.
    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:
          # Specify the path on the host node.
          path: /data
          # Specify the volume type.
          type: DirectoryOrCreate
  2. Pod'u dağıtın.

    kubectl apply -f pod-hostpath-direct.yaml
  3. Bağlamayı doğrulayın.

    Pod içinde bir dosya oluşturun ve düğümde var olduğunu onaylayın.

    1. Pod içinde bir dosya oluşturun.

      Pod'un /test dizininde (bağlama noktası) test.txt dosyasını oluşturun.

      kubectl exec test-pod -- sh -c 'echo "This file was created from within the Pod." > /test/test.txt'
    2. Pod'un çalıştığı düğümün adını alın.

      NODE_NAME=$(kubectl get pod test-pod -o jsonpath='{.spec.nodeName}')
      echo "Pod is running on node: $NODE_NAME"
    3. Dosyayı düğümde doğrulayın.

      Düğüme oturum açın ve /data dizininde dosyanın var olup olmadığını kontrol etmek için ls /data komutunu çalıştırın.

      Çıktıda test.txt varsa HostPath birimi başarıyla bağlanmıştır.

İkinci yöntem: PV ve PVC ile bağlama

  1. pv-pvc-hostpath.yaml adlı bir dosya oluşturun.

    Ana bilgisayarın /data dizinini işaret eden bir PV, depolamayı talep eden bir PVC ve PVC'yi kullanan bir pod oluşturur.
    # --- PersistentVolume definition ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: hostpath-pv
      labels:
        type: local
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/data"
    ---
    # --- PersistentVolumeClaim definition ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: hostpath-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      # Use a selector to bind the PVC to the PV created earlier.
      selector:
        matchLabels:
          type: local
    ---
    # --- Pod definition ---
    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:
            # Reference the PVC defined earlier.
            claimName: hostpath-pvc
  2. PV'yi, PVC'yi ve pod'u oluşturun.

    kubectl apply -f pv-pvc-hostpath.yaml
  3. Bağlamayı doğrulayın.

    Pod içinde bir dosya oluşturun ve düğümde var olduğunu onaylayın.

    1. Pod içinde bir dosya oluşturun.

      Pod'un /usr/share/nginx/html dizininde (bağlama noktası) test.txt dosyasını oluşturun.

      kubectl exec test-pod-pvc -- sh -c 'echo "File from PV/PVC Pod." > /usr/share/nginx/html/test.txt'
    2. Pod'un çalıştığı düğümün adını alın.

      NODE_NAME=$(kubectl get pod test-pod-pvc -o jsonpath='{.spec.nodeName}')
      echo "Pod is running on node: $NODE_NAME"
    3. Dosyayı düğümde doğrulayın.

      Düğüme oturum açın ve /data dizininde dosyanın var olup olmadığını kontrol etmek için ls /data komutunu çalıştırın.

      Çıktıda test.txt varsa PV/PVC HostPath birimi başarıyla bağlanmıştır.

Üretim hususları

  • Güvenlik yalıtımını artırın

    • Salt okunur olarak bağlayın: Uygulama yalnızca düğüm verilerini okuyorsa ana bilgisayar düğümüne yanlışlıkla yazılmasını önlemek için volumeMounts bölümünde readOnly: true ayarlayın.

    • En az ayrıcalık ilkesini uygulayın: Kök dizini (/) veya /etc ve /var gibi hassas dizinleri bağlamaktan kaçının. Özel bir dizin kullanın.

  • Düğüm kaynaklarını izleyin

    • Ana bilgisayar diskini izleyin: HostPath birimine yazan kapsayıcılar düğüm disk alanını tüketir. Disk tükenmesini önlemek için disk bölümleri için izleme ve uyarı mekanizmaları kurun.

    • G/Ç etkisini değerlendirin: HostPath birimindeki sık okuma ve yazma işlemleri düğüm G/Ç kaynaklarını tüketir; bu durum diğer pod'ları veya kubelet kararlılığını etkileyebilir. HostPath'i üretim ortamında kullanmadan önce G/Ç etkisini değerlendirin.

  • HostPath birimi, bir pod'u belirli bir düğümün fiziksel depolama alanına bağlar. Veriler o düğüme bağlıdır ve pod başka bir yere yeniden zamanlanırsa kullanılamaz hale gelir.

    • Veritabanları veya önbellekler gibi yüksek kullanılabilirlik gerektiren durum bilgisi olan uygulamalar için uygun değildir.

      • Veriler yalnızca tek bir düğümde bulunur. Bir pod başka bir düğüme yeniden zamanlandığında orijinal verilere erişim kaybedilir.

      • Ana bilgisayar düğümünün dosya sistemine erişmek kapsayıcı yalıtımını bozar. Yanlış yapılandırılırsa (örneğin kök dizin / bağlanırsa) veya kapsayıcıda bir güvenlik açığı varsa düğüm güvenliği ve kararlılığı tehlikeye girebilir.

    • ContainerOS gibi salt okunur kök dosya sistemine sahip düğümler için uygun değildir.

SSS

Pod yeniden oluşturulursa veriler kalıcı olur mu?

Bu, pod'un hangi düğüme zamanlandığına bağlıdır.

  • Aynı düğüme zamanlanırsa: Pod aynı dizini bağlar ve mevcut tüm verilere erişebilir.

  • Farklı bir düğüme zamanlanırsa: Pod boş bir dizini bağlar. Veriler özgün düğümde kalır ancak erişilemez hale gelir.