全部產品
Search
文件中心

Container Service for Kubernetes:HostPath資料卷

更新時間:Jul 10, 2024

HostPath卷能將主機節點檔案系統上的檔案或目錄掛載到您的Pod中。本文介紹如何使用HostPath資料卷。

背景資訊

阿里雲ACK叢集相容社區HostPath本地掛載方案的詳細資料,請參見Hostpath

掛載模式

HostPath支援以下幾種掛載模式。

掛載模式

描述

DirectoryOrCreate

如果在給定路徑上什麼都不存在,將根據需要建立空目錄,使用權限設定為0755,與Kubelet具有相同的組和屬主資訊。

Directory

在給定路徑上必須存在目錄。

FileOrCreate

如果在給定路徑上什麼都不存在,那麼將在給定路徑根據需要建立空檔案,使用權限設定為0644,具有與Kubelet相同的組和所有權。

File

在給定路徑上必須存在檔案。

HostPath資料卷使用樣本

  • Pod中以直接定義hostPath的方式使用HostPath資料卷:

    apiVersion: v1
    kind: Pod
    metadata:
      name: test
    spec:
      containers:
      - image: nginx:1.7.9
        name: test
        volumeMounts:
        - mountPath: /test
          name: test-volume
      volumes:
      - name: test-volume
        hostPath:
          path: /data
          type: DirectoryOrCreate
  • 通過PV和PVC定義hostPath的方式使用HostPath資料卷:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: task-pv-volume
      labels:
        type: local
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/data"
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: hostpath
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
  • Pod運行時掛載HostPath資料卷:

    Kubernetes生態中,Pod運行時,其掛載的資料卷不可以修改,所以原則上運行中的容器不能動態掛載資料卷。下面方式可以在一定程度上實現運行中Pod動態掛載外部儲存的需求。

    說明
    • 本方案依賴Linux中mountPropagation的Bidirectional屬性,可以將主機掛載目錄映射到容器中。

    • 目標Pod必須具有Privilege許可權(Bidirectional需求)。

    • 目標Pod需要掛載一個主機目錄,並配置Bidirectional,運行中的容器依賴該目錄接收外部掛載。

    部署一個Nginx應用使用HostPath資料卷的樣本模板如下。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: deployment-nas
      labels:
        app: nginx
    spec:
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            command: ["sh", "-c"]
            args: ["sleep 10000"]
            securityContext:
              privileged: true
              capabilities:
                add: ["SYS_ADMIN"]
              allowPrivilegeEscalation: true
            volumeMounts:
              - name: dynamic-volume
                mountPropagation: "Bidirectional"
                mountPath: "/dynamic-volume"
          volumes:
            - name: dynamic-volume
              hostPath:
                path: /mnt/dynamic-volume
                type: DirectoryOrCreate
    說明
    • 主機目錄:/mnt/dynamic-volume

    • Pod內目錄:/dynamic-volume

    上述配置,可以在Pod運行時,在Pod所在節點上的/mnt/dynamic-volume/****路徑掛載外部儲存,從而將外部儲存卷映射到Pod內部,實現了運行中Pod動態掛載外部儲存的能力。