Kubernetes 之 Volumes

2023年 1月 4日 29.3k 0

1. Docker 的存储卷

1.2 Docker 中的 Volume

Docker Volume 将宿主机目录,挂载到容器中。在容器中修改的文件内容,将会被持久化到宿主机中。即时容器被删除,宿主机中的文件也会被保留。Docker 使用 /var/lib/docker/volumes/ 存储容器的 Volume。查看本地 Volume :

1
2
3
4
5
6
7
8
9
tree /var/lib/docker/volumes/ -L 3
/var/lib/docker/volumes/
|-- 714450f353b26b5aa57aa352766c201c0851685e0e28c2e67ae1631f29c465b4
|   `-- _data
|       |-- access.log -> /dev/stdout
|       `-- error.log -> /dev/stderr
|-- metadata.db
`-- volume_name
    `-- _data

当创建 Volume 时,Docker 会在 /var/lib/docker/volumes/ 目录下创建文件夹用于存储数据。在停止或销毁容器之后,Volume 中的数据依然持久存在。

1.2 Docker Volume 的操作

创建一个 Volume :

1
docker volume create volume_name

查看所有的 Volume :

1
docker volume ls

查看 Volume 的详情 :

1
docker volume inspect volume_name

删除 Volume :

1
docker volume rm volume_name

挂载 Volume 到容器 :

1
docker run -it -v volume_name:/data centos /bin/bash

2. Kubernetes 中的存储卷

2.1 Kubernetes 的 Volume

每个 Node 都会有 Container Runtime,这里以 Docker Runtime 为例。如果按照 Docker Volume 的方式挂载,会遇到问题:由于 Kubernetes 对 Pod 的自由调度,Pod 中的容器与 Node 没有绑定关系,不能保证 Volume 一定能挂载成功,也不能保证数据的完整性和一致性。解决办法很常规,使用服务提供有状态的功能。Kubernetes 提供了 PV 和 PVC 的方式使用 Volume 。对于一个独立的存储后端,实现可以是 NFS、Ceph、GlusterFS 等。PV 可以从中划分一部分用于 Kubernetes 的存储,而生命周期不依赖于 Pod。容器是 Volume 的真实使用者,Pod 中的每个容器都必须指定每个 Volume 的挂载位置。使用 Volume 时,需要给 Pod 指定为卷 (spec.volumes 字段)以及将它挂载到容器的位置 (spec.containers.volumeMounts 字段)

2.2 存储插件

在 Kubernetes 中使用存储插件提供 Volume 的支持。Kubernetes 中的存储插件分为:

  • in-tree

in-tree 插件运行在 Kubernetes 核心组件中。当需要使用相应的 Volume 服务时,需要调用核心组件中的插件。Kubernetes 原生支持的 Volume 类型:GCEPersistentDisk、AWSElasticBlockStore、AzureFile、AzureDisk、FC (Fibre Channel)、FlexVolume、Flocker、NFS、iSCSI、CephFS、Cinder (OpenStack block storage)、Glusterfs、VsphereVolume、Quobyte Volumes 等。

  • out-of-tree

out-of-tree 插件的代码和部署独立于 Kubernetes。通常用于补充 in-tree 不支持的存储类型,或者对存储功能进行定制、扩展。从 1.8 版开始,Kubernetes Storage SIG 停止接受 in-tree 插件,并建议所有存储提供商使用 out-of-tree 插件。目前有两种推荐的实现方式:容器存储接口(CSI)和 Flexvolume 。

2.3 PV、PVC

PV 为 PersistentVolume 的缩写,PVC 为 PersistentVolumeClaim 的缩写。PV 和 PVC 是 Kubernetes 提供的两种资源,用户可以通过 API 对其进行操作。管理员只需要关注如何通过 PV 提供存储功能,而不需要关注用户如何使用。用户只需要关注如何挂载 PVC 到容器中,而不需要关注存储卷如何实现。在使用 Volume 时,通常分为如下几步:

  • 创建 Persistent Volume
  • 创建 Persistent Volume Claim
  • 创建 Pod 并使用 PVC
  • 3. 参考

    • https://jimmysong.io/posts/kubernetes-volumes-introduction/

    相关文章

    KubeSphere 部署向量数据库 Milvus 实战指南
    探索 Kubernetes 持久化存储之 Longhorn 初窥门径
    征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
    那些年在 Terraform 上吃到的糖和踩过的坑
    无需 Kubernetes 测试 Kubernetes 网络实现
    Kubernetes v1.31 中的移除和主要变更

    发布评论