CKAD备战笔记(7)- 容器数据的可持久化

1. 卷(Volume)

Docker 容器本质上是 瞬态(transient) 的。 这意味着它们只能持续很短的时间。它们在App被创建时被调用,容器被销毁时,数据与容器一起被销毁。

为了使容器的数据持久化,我们将容器所在的 Pod 连接到。 容器中的数据放在该中,即使容器被删除,数据会仍然存在。

下面的yaml文件为Pod创建并连接

  • Container:其中的App随机生成一个0-100之间的数,并存到文件夹 /opt
  • Volume:该名为data-volume,实际上是当前Node上的一个文件夹/data。所有用卷data-volume存储的信息,最后都会被放在Node的/data文件夹下
# pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: simple-webapp
spec:
  containers:
  - name: simple-webapp
    image: simple-webapp
    command: ["/bin/sh", "-c"]
    args: ["shuf -i 0-100 -n 1 >> /opt/number.out;"]
    # (1) 将容器文件夹`/opt`挂载到名为data-volume的卷上
    volumeMounts:
    - mountPath: /opt
      name: data-volume
  # (2) 创建卷:这里申明了一个在Node上的文件夹(Directory),也可以使用其他存储方式,比如引用(PersistentVolumeClaim)
  volumes:
  - name: data-volume
    hostPath:
      path: /data
      type: Directory

卷的使用确保了Pod被删除后,该Pod所产生的数据还被保留在所在的Node上,如图:

上面图中的的挂载方法只适用于单Node的集群。如果是多个Node,那么每个Node其实都是不同的服务器,它们都有的/data文件路径,分别存储了不同的内容。所以我们要另找解决方法。

⚠️ Pod相连 -> 每次新建一个需要存储空间的Pod,都需要手动配置卷
⚠️ 存在于Node服务器上 -> 分布在不同Node上的App无法访问到同一个的
卷的这两个特性导致管理困难,而且也不利于扩大应用规模,因为无法支持多Node的应用,而持久卷能解决该问题

2. 持久卷(PersistentVolume / PV)

我们想要一个更中心化的解决方法,如有某个多Node的应用需要修改存储空间,管理员(Administrator)可以统一对其进行管理。持久卷池可以帮我们解决这个问题。

持久卷是Cluster层级的,放满 存储卷 的池子(Pool),由集群的管理员进行管理和配置。然后由Pod根据自己的需求发送 存储卷请求(PersistentVolumeClaim / PVC)

⚠️ 一个PV本身是不可分割的单位,而管理员管理的是一堆存储容量大小各异的PV

# 持久卷(PersistentVolume)的定义
# my-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-volume
spec:
  # 可能的mode
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值