Kubernetes

七、Kubernetes 持久化存储

2020-05-01  本文已影响0人  Suny____

1、Storage

1.1 Volume

容器中的文件在磁盘上是临时存放的,这给容器中运行的特殊应用程序带来一些问题。

使用Volume可以防止数据丢失,容器崩溃或新开容器都可以使用之前的Volume来达到恢复数据的作用

1.2 Host类型Volume实战

在前面的章节中提到过,Pod中的容器是会共享网络与存储的,共享网络我们已经提过了,这里来验证Pod共享存储的问题。

定义一个Pod,其中包含两个Container,都使用Pod的Volume

1.3 Persistent Volume

由于使用本地的Volume会有一些限制,比如Pod必须要与Volume在同一台宿主机,宿主机挂了数据就会丢失。所以K8S还提供了真正的持久化存储的技术,将数据挂载到其他专门用于存储数据的服务器上,这样即使宿主机挂了,数据还在。

PersistentVolume是为用户和管理员提供了一个API抽象的细节如何提供如何使用存储。 K8S引入了两个新的API资源:PersistentVolume(PV)、PersistentVolumeClaim(PVC)。

一般PV是由专业的运维人员去配置,PVC是有开发配置

1.3.1 流程图

下面这张图完整说明了Pod、PVC、PV与文件服务器的关系。

image.png

一个Pod想要一块存储空间,需要绑定一个PVC,通过访问模式与申请的存储空间大小去匹配并绑定PV,而PV才是真正与文件服务打交道的资源。

1.3.2 案例实操

1.3.2.1 准备文件服务器

1.3.2.2 编写PV

1.3.2.3 编写PVC

1.3.2.4 编写Pod绑定PVC

1.3.2.5 测试持久化存储

PV的存在虽然解决了数据存储安全的问题,但仅仅上面的案例,还是不够好,如果Pod有很多,难道要让运维人员一个一个去创建吗,虽然也是一种方案,但并不完美。

下面要聊的StorageClass,就是可以动态的管理PV,操作更灵活!

1.4 StorageClass

StorageClass其实可以理解为是一个 PV 的模板,PVC想要绑定PV,可以通过StorageClass模板去动态的创建PV。

其中有两个重要部分:PV属性和创建此PV所需要的插件。

这样PVC就可以按“Class”来匹配PV。

可以为PV指定storageClassName属性,标识PV归属于哪一个Class。

1.4.1 存储分配器

因为文件系统有很多,StorageClass不可能默认就实现了对所有文件系统的交互,存储分配器就是StorageClass与外部的文件系统打交道的,可以理解为是一个 插件

1.4.2 StorageClass案例

在创建StorageClass资源之前,要说明一下,不是所有人都可以创建StorageClass资源的,在K8S中一些特殊的资源必须要有apiServer的认证才能创建,这里想要创建StorageClass,就需要RBAC的认证,简单来说就是需要创建一个账户去与apiServer进行交互。

1.5 总结

1.5.1 PV、PVC、SC的关系

image.png

1.5.2 PV的状态和回收策略

注意:目前只有NFS和HostPath支持Recycle策略。AWS EBS、GCE PD、Azure Disk和Cinder支持Delete策略

上一篇下一篇

猜你喜欢

热点阅读