kubernetes(k8s):volumes 配置管理(emptyDir、hostPath、nfs方式挂载卷)

本文详细介绍了Kubernetes中Volume的重要性和使用,特别是emptyDir卷作为临时存储,hostPath卷实现主机与Pod的数据共享,以及如何通过NFS挂载实现跨节点的数据同步。讨论了各个卷类型的应用场景、注意事项和使用方法。
摘要由CSDN通过智能技术生成

1. 卷的作用,K8S中的volume挂载方式

容器中的文件在磁盘上是临时存放的,这给容器中运行的特殊应用程序带来一些问题。首先,当容器崩溃时,kubelet 将重新启动容器,容器中的文件将会丢失,因为容器会以干净的状态重建。其次,当在一个 Pod 中同时运行多个容器时,常常需要在这些容器之间共享文件。 Kubernetes 抽象出 Volume 对象来解决这两个问题。

Kubernetes 卷具有明确的生命周期,与包裹它的 Pod 相同。 因此,卷比 Pod 中运行的任何容器的存活期都长,在容器重新启动时数据也会得到保留。 当然,当一个 Pod 不再存在时,卷也将不再存在。也许更重要的是,Kubernetes 可以支持许多类型的卷,Pod 也能同时使用任意数量的卷

卷不能挂载到其他卷,也不能与其他卷有硬链接。 Pod 中的每个容器必须独立地指定每个卷的挂载位置。

2. kubernetes支持的卷

awsElasticBlockStore 、azureDisk、azureFile、cephfs、cinder、configMap、csi
downwardAPI、emptyDir、fc (fibre channel)、flexVolume、flocker
gcePersistentDisk、gitRepo (deprecated)、glusterfs、hostPath、iscsi、local、
nfs、persistentVolumeClaim、projected、portworxVolume、quobyte、rbd
scaleIO、secret、storageos、vsphereVolume

3. emptyDir卷

当 Pod 指定到某个节点上时,首先创建的是一个 emptyDir 卷,并且只要 Pod 在该节点上运行,卷就一直存在。 就像它的名称表示的那样,卷最初是空的。 尽管 Pod 中的容器挂载 emptyDir 卷的路径可能相同也可能不同,但是这些容器都可以读写 emptyDir 卷中相同的文件。当 Pod 因为某些原因被从节点上删除时,emptyDir 卷中的数据也会永久删除

emptyDir 的使用场景:

  • 缓存空间,例如基于磁盘的归并排序。
  • 为耗时较长的计算任务提供检查点,以便任务能方便地从崩溃前状态恢复执行。
  • 在 Web 服务器容器服务数据时,保存内容管理器容器获取的文件。

默认情况下, emptyDir 卷存储在支持该节点所使用的介质上;这里的介质可以是磁盘或 SSD 或网络存储,这取决于您的环境。 但是,您可以将 emptyDir.medium 字段设置为 “Memory”,以告诉 Kubernetes 为您安装 tmpfs(基于内存的文件系统)。 虽然 tmpfs 速度非常快,但是要注意它与磁盘不同。 tmpfs 在节点重启时会被清除,并且您所写入的所有文件都会计入容器的内存消耗,受容器内存限制约束。

3.1 一个pod内多容器之间的数据共享问题

文件共享,pod消亡后,生成的共享文件也会消亡

apiVersion: v1
kind: Pod
metadata:
  name: vol1
spec:
  containers:
  - name: vm1
    image: reg.westos.
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes 中,可以使用 NFS volume 来将 NFS 服务器上的目录挂载到 Pod 中。下面是一些指导步骤: 1. 在 NFS 服务器上创建共享目录,确保其在网络中可见。 2. 在 Kubernetes 集群中安装 NFS 客户端。 3. 创建一个包含 NFS 挂载信息的 Kubernetes Secret 对象,用于在 Pod 中访问 NFS 服务器。 4. 创建一个 PersistentVolume 对象,它定义了如何访问 NFS 服务器上的共享目录。 5. 创建一个 PersistentVolumeClaim 对象,它请求一个 PersistentVolume。 6. 在 Pod 中使用这个 PersistentVolumeClaim 对象作为 volume。 下面是一个示例 YAML 文件,它演示了如何将 NFS 服务器上的目录挂载到 Pod 中: ```yaml apiVersion: v1 kind: Secret metadata: name: nfs-creds type: Opaque data: username: <base64-encoded-username> password: <base64-encoded-password> --- apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 1Gi accessModes: - ReadWriteMany nfs: server: <nfs-server> path: /path/to/nfs/share readOnly: false mountOptions: - hard - nfsvers=4.1 - timeo=600 - retrans=2 - noresvport persistentVolumeReclaimPolicy: Retain storageClassName: nfs volumeMode: Filesystem secretRef: name: nfs-creds --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi storageClassName: nfs volumeMode: Filesystem --- apiVersion: v1 kind: Pod metadata: name: nfs-pod spec: containers: - name: nfs-container image: nginx volumeMounts: - name: nfs-volume mountPath: /usr/share/nginx/html volumes: - name: nfs-volume persistentVolumeClaim: claimName: nfs-pvc ``` 在上面的 YAML 文件中,我们首先创建了一个 Secret 对象,它包含了 NFS 服务器的用户名和密码。接下来,我们创建了一个 PersistentVolume 对象,它定义了如何访问 NFS 服务器上的共享目录。注意,我们使用了我们之前创建的 Secret 对象来访问 NFS 服务器。然后,我们创建了一个 PersistentVolumeClaim 对象,它请求一个 PersistentVolume。最后,我们创建了一个 Pod 对象,它使用这个 PersistentVolumeClaim 对象作为 volume。 希望这些信息能够帮助你安装并配置 NFSKubernetes 上的挂载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值