Kubernetes-如何在PVC中提及hostPath?

问题描述

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

我无法弄清楚如何在PVC中提及主机路径

这是PVC配置:

apiVersion: v1 
kind: PersistentVolumeClaim
Metadata: 
  name: mongo-pvc 
spec: 
  accessModes: 
    - ReadWriteOnce
  resources: 
    requests: 
      storage: 1Gi

这是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 

如何在何处,我提到要在此处安装的 hostPath 吗?

解决方法

医生说您在创建PV时(创建PVC之前的步骤)设置了hostPath

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

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

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

,

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

通常,Kubernetes集群将配置为dynamic volume provisioner,这将为您创建匹配的PersistentVolume。根据您集群的安装方式而定,它可以是Amazon EBS卷,Google Cloud Platform永久磁盘,iSCSI卷或some other type of storage;作为应用程序作者,您并不能真正控制它。 (您为GKE标记了这个问题,并且GKE文档包含a section on dynamic volume provisioning。)您无需指定可以在主机上安装卷的位置,并且无法在PersistentVolumeClaim中提供此详细信息。 / p>

随着显示的YAML的出现,并且上下文在GKE上,我希望Google自动配置GCE永久磁盘。如果pod在其他节点上重新安排了时间,则永久性磁盘将跟随pod到达新节点。您无需担心正在使用哪个特定主机目录。 Kubernetes将为您管理。

在大多数情况下,您将希望避免hostPath存储。您不直接控制Pod将在哪个节点上运行,因此不能保证Pod实际上会安排在具有数据量的节点上。它适用于在DaemonSet中运行的日志收集器之类的东西,您可以在其中保证每个节点上的该路径中都有有趣的内容,但不适用于常规应用程序数据库存储。