Kubernetes - 如何在 PVC 中提及 hostPath?

Kar*_*mar 5 kubernetes microservices google-kubernetes-engine

我需要使用 PVC 来指定 PV 的规格,并且还需要确保它在 PV 中使用自定义本地存储路径。

我不知道如何在 PVC 中提及主机路径

这是 PVC 配置:

apiVersion: v1 
kind: PersistentVolumeClaim
metadata: 
  name: mongo-pvc 
spec: 
  accessModes: 
    - ReadWriteOnce
  resources: 
    requests: 
      storage: 1Gi
Run Code Online (Sandbox Code Playgroud)

这是 mongodb 部署:

spec:
    replicas: 1
    selector:
        matchLabels:
            app: mongo
    template:
        metadata:
            labels: 
                app: mongo
        spec:
            volumes: 
                - name: mongo-volume 
                  persistentVolumeClaim: 
                    claimName: mongo-pvc 
            containers:
                - name: mongo
                  image: mongo
                  ports:
                    - containerPort: 27017
                  volumeMounts: 
                    - name: mongo-volume 
                      mountPath: /data/db 
Run Code Online (Sandbox Code Playgroud)

我如何以及在哪里提及要在此处挂载的主机路径?

Roa*_* S. 7

Doc说你hostPath在创建PV时设置(创建PVC之前的步骤)。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: task-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
Run Code Online (Sandbox Code Playgroud)

创建 PersistentVolumeClaim 后,Kubernetes 控制平面会查找满足声明要求的 PersistentVolume。如果控制平面找到具有相同 StorageClass 的合适 PersistentVolume,它将声明绑定到该卷。

请参阅https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/


Dav*_*aze 5

您不会(也不能)在 PersistentVolumeClaim 中强制使用特定的主机路径。

通常,Kubernetes 集群将配置一个动态卷配置程序,它将为您创建匹配的 PersistentVolume。根据集群的安装方式,该集群可能是 Amazon EBS 卷、Google Cloud Platform 永久磁盘、iSCSI 卷或其他类型的存储;作为应用程序作者,您实际上无法控制这一点。(您为 GKE 标记了这个问题,并且 GKE 文档中有一个关于动态卷配置的部分。)您不需要指定卷可能安装在主机上的位置,并且无法在 PersistentVolumeClaim 中提供此详细信息。

通过您显示的 YAML 以及 GKE 上的上下文,我希望 Google 能够自动配置 GCE 永久性磁盘。如果 Pod 在不同的节点上重新调度,持久磁盘将跟随 Pod 到达新节点。您无需担心正在使用哪个特定的主机目录;Kubernetes 将为您管理这个。

在大多数情况下,您会希望避免使用 hostPath 存储。您无法直接控制 pod 将在哪个节点上运行,因此无法保证 pod 实际上会调度到具有数据量的节点上。它适用于像 DaemonSet 中运行的日志收集器这样的东西,您可以保证每个节点上的该路径中都有有趣的内容,但不适用于一般应用程序数据库存储。