Kubernetes 是否可以不使用PVC直接安装PV?

Kubernetes 是否可以不使用PVC直接安装PV?,kubernetes,Kubernetes,到目前为止,我确信需要PVC才能从k8s访问PV,如本例所示: 但后来我发现可以使用以下语法(例如使用nfs): 我很困惑: 这种语法是否在引擎盖下创建PVC 或者是否有符合规格的PV安装在没有PVC的情况下 或者规范选择了现有的PVC 当Pod分配给节点时,首先创建emptyDir卷,只要该Pod在该节点上运行,该卷就存在。 您不需要pv和pvc来实现emptyDIr卷 请注意,当Pod因任何原因从节点中移除时,emptyDir中的数据将永远删除 如果您想保留数据,即使pod崩溃或重新启动,

到目前为止,我确信需要PVC才能从k8s访问PV,如本例所示:

但后来我发现可以使用以下语法(例如使用nfs):

我很困惑:

  • 这种语法是否在引擎盖下创建PVC
  • 或者是否有符合规格的PV安装在没有PVC的情况下
  • 或者规范选择了现有的PVC

当Pod分配给节点时,首先创建emptyDir卷,只要该Pod在该节点上运行,该卷就存在。 您不需要pv和pvc来实现emptyDIr卷

请注意,当Pod因任何原因从节点中移除时,emptyDir中的数据将永远删除

如果您想保留数据,即使pod崩溃或重新启动,或者pod被删除或取消部署,那么您需要使用pv和pvc

看看下面的另一个例子,您不需要使用hostPath的pv和pvc

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      # directory location on host
      path: /data
      # this field is optional
      type: Directory
如果需要将数据存储在外部存储解决方案上,如nfs、azure文件存储、aws EBS、google persistentDisk等,则需要创建pv和pvc

不允许将pv直接安装到吊舱上,这违反了kubernetes的设计原则。这将导致吊舱舱底部和下层仓库之间紧密耦合

pvc可实现pod和持久卷之间的光耦合。豆荚 不知道用于存储容器数据的底层存储是什么,pod不需要知道这些信息


pv和pvc是静态和动态调配kubernetes群集中工作负载的存储卷所必需的

您可以装载的各种东西是kubernetes API中对象的一部分(它是a的一部分,它是a的一部分)。这些都不是按名称装载特定PersistentVolume的选项

(对于NFS和各种群集存储系统,您可以看到一些特殊情况。这些情况大多早于永久卷。)


在这里,您最好创建一个非常紧密地绑定到单个持久卷的PVC,然后在pod规范中引用它。

对不起,emptyDir和hostPath不是特殊的PV类型,可以绑定到PVC。我将问题改为使用NFS作为示例。NFS也是一种外部存储解决方案。您需要pv和pvc来使用nfs进行存储,那么您的意思是第二种方式是“遗留”,这是应该使用的第一个示例吗?这将是我的建议。这将使您的ops团队能够执行诸如更新NFS服务器位置之类的操作,而无需特别修改您的应用程序的部署配置!但是,对于第二个示例,我仍然不清楚:是否选择了与提供的“规格”匹配的现有PVC?(因此PVC匹配
nfs:server:nfs.example.com路径:/share1
)不,如果直接引用pod规范中的外部存储,则不会创建持久卷或PVC。
kind: Pod
apiVersion: v1
metadata:
  name: nfs-in-a-pod
spec:
  containers:
    - name: app
      image: alpine
      volumeMounts:
        - name: nfs-volume
          mountPath: /var/nfs # Please change the destination you like the share to be mounted too
      command: ["/bin/sh"]
      args: ["-c", "sleep 500000"]
  volumes:
    - name: nfs-volume
      nfs:
        server: nfs.example.com # Please change this to your NFS server
        path: /share1 # Please change this to the relevant share
apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      # directory location on host
      path: /data
      # this field is optional
      type: Directory