K8S的卷、临时卷、持久卷、PV、PVC、SC

K8S中的卷用于解决容器中数据持久化问题,包括临时卷和持久卷。持久卷(PV)是集群资源,而持久卷申领(PVC)是用户对存储的请求。PV和PVC通过存储类(SC)进行动态制备和管理,支持多种类型如cephfs、nfs等。卷的生命周期、访问模式和回收策略(Retain, Delete, Recycle)是关键概念。卷绑定模式影响了PV的创建和绑定时机。" 125936375,14847503,C语言实现链表遍历二叉树,"['C语言', '数据结构', '链表', '二叉树']
摘要由CSDN通过智能技术生成

博客:cbb777.fun

全平台账号:安妮的心动录

github: https://github.com/anneheartrecord

下文中我说的可能对,也可能不对,鉴于笔者水平有限,请君自辨。有问题欢迎大家找我讨论

为什么需要卷?

容器中的文件在磁盘上是临时存放的,这给在容器中运行较重要的应用带来一些问题。 当容器崩溃或停止的时候会出现一个问题:此时容器状态未保存,因此在容器生命中期内创建或修改的文件都将丢失。

在崩溃期间,kubelet会以clean的状态重新启动容器,当多个容器在一个Pod中运行并且需要共享文件的时候,会出现另一个问题:无法做到跨容器访问文件

K8S支持很多类型的卷,Pod可以同时使用任意数目的卷类型,临时卷类型的生命周期和Pod相同,但持久卷可以比Pod更长。当Pod不存在的时候,K8S也会销毁临时卷,不会销毁持久卷。在容器重启期间,Pod中任何类型的卷都不会丢失

卷的核心是一个目录,其中可能存有数据,Pod中的容器可以访问该目录中的数据。所采用的特定的卷类型会决定该目录是如何形成的、使用何种介质保存数据以及目录中存放的内容 在使用卷的时候,.spec.volumes字段中设置为pod提供的卷,并在.spec.containers[*].volumeMounts字段中声明卷在容器中的挂载位置。容器中的进程看到的文件系统视图是由他们的容器镜像的初始内容以及挂载在容器中的卷所组成的。其中根文件系统同容器镜像的内容相吻合。任何在该文件系统下的写入操作,如果被允许的话都会影响到容器中进程访问文件系统时看到的内容

卷挂载在镜像的指定路径下,pod配置中的每个容器必须独立指定各个卷的挂载位置 卷不能挂载到其他卷之上(不过存在一种subPath的机制,可以实现卷上挂载卷)

卷类型

cephfs

cephfs卷允许你将现存的cephFS卷挂载到Pod中,不像EmptyDir那样会在Pod被删除的同时也删除,同一个CephFs可以被多个写者挂载

apiVersion: v1
kind: Pod
metadata:
  name: cephfs
spec:
  containers:
  - name: cephfs-rw
    image: kubernetes/pause
    volumeMounts:
    - mountPath: "/mnt/cephfs"
      name: cephfs
  volumes:
  - name: cephfs
    cephfs:
      monitors:
      - 10.16.154.78:6789
      - 10.16.154.82:6789
      - 10.16.154.83:6789
      # by default the path is /, but you can override and mount a specific path of the filesystem by using the path attribute
      # path: /some/path/in/side/cephfs
      user: admin
      secretFile: "/etc/ceph/admin.secret"
      readOnly: true

configMap

configMap卷提供了向Pod注入配置数据的方法,ConfigMap对象中存储的数据可以被解析,然后被Pod中运行的容器化应用使用。在使用ConfigMap之前首先要创建它,并且ConfigMap总是以readOnly的模式挂载,容器以subPath卷挂载方式使用ConfigMap时,将无法接收ConfigMap的更新

apiVersion: v1 
kind: Pod
metadata:
 name: configmap-pod
spec:
 containers:
 - name: test
  image: busybox:1.28
   volumeMounts:
      - name: config-vol
       mountPath: /etc/config
volumes:
   - name: config-vol
    config-Map:
      name: log-config
       items: 
         - key: log_level
          path: log_level

emptyDir

Pod被分配到某个节点上的时候,emptyDir会被创建,并且在Pod在该节点上运行期间,卷一直存在。就像其名称表示的那样,卷最初是空的。尽管Pod中的容器挂载emptyDir卷的路径可能相同也可能不同,这些容器都可以读写emptyDir卷中相同的文件。当pod因为某些原因被从节点上删除的时候,emptyDir卷中的数据也会被永久删除。容器崩溃并不会导致Pod从节点上移除,因此容器崩溃期间emptyDir的数据是安全的

emptyDir.medium字段用来控制emptyDir卷的存储位置,默认情况下,emptyDir卷存储在该节点所使用的介质上;此处的介质可以是磁盘、SSD或者网络存储,可以将emptyDir.medium设置为Memory,以告诉K8S为你挂载tmpfs emptyDir的一些用途

  • 缓存空间,例如基于磁盘的归并排序
  • 为耗时较长的计算任务提供检查点,以便任务能方便地从崩溃前状态恢复执行
  • 在web服务器容器服务数据时,保存内容管理器容器获取的文件
apiVersion: v1
kind: Pod
metadata:
 name: test-pd
spec:
 containers:
 - image: registry.k8s.io/test-webserver
   name: test-container
   volumeMounts:
   - mountPath: /cache
     name: cache-volume
 volumes:
 - name: cache-volume
   emptyDir:
     sizeLimit: 500Mi

fc

fc(光纤通道)类型允许将现有的光纤通道快存储卷挂载到Pod中,可以使用卷配置中的参数来制定单个或者多个目标WWN

hostPath

hostPath卷存在许多安全风险,最佳做法是应该尽可能避免HostPath,当必须使用HostPath的时候,它的范围应该仅限于所需的文件或者目录,并以只读的方式挂载

如果通过AdmissionPolicy限制HostPath对特定目录的访问,则必须要求volumeMounts使用readOnly挂载以使得策略生效

hostPath卷能将主机结点文件系统上的文件或目录挂载到你的Pod中,虽然这不是大多数Pod需要的,但是它为一些应用程序提供了强大的逃生舱

hostPath的一些用法

  • 运行一个需要访问Dock
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值