【问题标题】:Kubernetes - How do I mention hostPath in PVC?Kubernetes - 如何在 PVC 中提及 hostPath?
【发布时间】:2020-12-24 04:44:12
【问题描述】:

我需要使用 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

【问题讨论】:

    标签: kubernetes microservices google-kubernetes-engine


    【解决方案1】:

    您不会(也不能)在 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 中提供此详细信息。

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

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

    【讨论】:

    • 感谢大卫的透彻而富有启发性的回答。
    • @David,非常感谢。这是一个非常好的解释。
    【解决方案2】:

    文档说您在创建 PV 时设置了hostPath(创建 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"
    

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

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

    【讨论】:

      猜你喜欢
      • 2017-10-08
      • 2021-06-19
      • 2019-11-04
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 2016-12-05
      相关资源
      最近更新 更多