Kubernetes存储原理

简介: Docker容器的设计原理是当容器消融时,容器内的存储也随之消失,但是实际情况中有很多是需要进行持久化的存储的,所以也很有必要进行Kubernetes持久化存储的概念说明。

导语:
Docker容器的设计原理是当容器消融时,容器内的存储也随之消失,但是实际情况中有很多是需要进行持久化的存储的,所以也很有必要进行Kubernetes持久化存储的概念说明。

Kubernetes存储组成
1.本地化的存储
2.网络化的存储
3.其他特殊存储

本地化的存储
①EmptyDir,EmptyDir是一个空目录,其的生命周期和所属的Pod是完全一致的。EmptyDir的用处是可以在同一 Pod 内的不同容器之间共享工作过程中产生的文件。缺省情况下,EmptyDir 是使用主机磁盘进行存储的,也可以设置emptyDir.medium 字段的值为Memory,来提高运行速度,但是这种设置,对该卷的占用会消耗容器的内存份额。
②HostPath,HostPath存储会把宿主机上的指定卷加载到容器之中,如果Pod发生跨主机的重建,其内容就难保证了。一般是用于本地化的日志存储。

网络化的存储
Kubernetes网络存储是学习的重点,Kubernetes支持为数众多的云提供商和网络存储方案。各种支持的方式不尽相同,例如 GlusterFS 需要创建 Endpoint,Ceph/NFS 之流就没这么麻烦了。各种配置需参考不同供应商的文档,本文就以NFS网络存储作为模型。
①静态PV,静态PV和使用它的Pod之间是一种静态绑定关系,在定义Pod的文件里,同时定义了它使用的Volume。Volume 是Pod的附属品,无法单独创建一个Volume,因为它不是一个独立的K8S资源对象。
②动态PV,动态PV是一个Kubernetes资源对象,所以可以单独创建一个PV。它不和Pod直接发生关系,而是通过Persistent Volume Claim,简称PVC来实现动态绑定,然后PVC会根据Pod的要求去自动绑定合适的PV给Pod使用。

PV的使用过程
一个PV创建完后状态会变成Available,等待被PVC绑定。一旦被PVC邦定,PV的状态会变成Bound,就可以被定义了相应PVC的Pod使用。Pod使用完后会释放PV,PV的状态变成Released。变成Released的PV会根据定义的回收策略做相应的回收工作。最后还有一种特殊的情况,Failed 自动回收失败。在实际使用场景里,PV的创建和使用通常不是同一个人。这里有一个典型的应用场景:管理员创建一个PV池,开发人员创建Pod和PVC,PVC里定义了Pod所需存储的大小和访问模式,然后PVC会到PV池里自动匹配最合适的PV给Pod使用。

PV的回收机制
Retain,允许人工处理保留的数据。
Delete ,将删除PV和外部关联的存储资源。
Recycle,将执行清除操作,之后可以被新的PVC使用。

PV的访问模式
ReadWriteOnce,是最基本的方式,可读可写,但只支持被单个Pod挂载。
ReadOnlyMany,可以以只读的方式被多个Pod挂载。
ReadWriteMany,这种存储可以以读写的方式被多个Pod共享。
不是每一种存储都支持这三种方式,像共享方式,目前支持的还比较少,比较常用的是NFS。在PVC绑定PV时通常根据两个条件来绑定,一个是存储的大小,另一个就是访问模式。

1d170291cc513de7a91564f05626fd6cc5c90c6e

官方实例
PVC

cce7c36c6d4872c30b1657af38024fee1d94b7b0

容器实例

bdfaf437428a9df85d633f5d85fb79e3df435a0a

PV

5f4ca340f78eed2f5832de6d619116b1db6f25bb

其他特殊存储
在完善的应用开发中,都会涉及到配置文件的变更,一个正常应用程序从写第一行代码开始,要经历开发环境、测试环境、预发布环境只到最终的线上环境。而每一个环境都要定义其独立的各种配置。如果我们不能很好的管理这些配置文件,运维工作将顿时变的无比的繁琐。为此业内的一些大公司专门开发了自己的一套配置管理中心,如百度的disconf等。Kubernetes也提供了自己的一套方案,即ConfigMap。Kubernetes通过ConfigMap来实现对容器中应用的配置管理。

 

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4月前
|
存储 Kubernetes 容器
Kubernetes 存储选项:持久化卷与存储类
【8月更文第29天】随着容器化的普及,越来越多的应用程序需要持久化数据以保持状态信息。Kubernetes 提供了一套完整的解决方案来管理和配置持久化存储,包括持久卷 (Persistent Volume, PV)、持久卷声明 (Persistent Volume Claim, PVC) 和存储类 (StorageClass)。本文将详细介绍这些概念,并通过实际示例来演示如何在 Kubernetes 中配置存储。
342 1
|
4月前
|
Kubernetes 负载均衡 API
在K8S中,apiservice与kube-schedule高可用原理?
在K8S中,apiservice与kube-schedule高可用原理?
|
4月前
|
存储 Kubernetes 容器
k8s创建NFS动态存储
k8s创建NFS动态存储
|
4月前
|
存储 Kubernetes 安全
在K8S中,你用的flannel是哪个工作模式及fannel的底层原理如何实现数据报文转发的?
在K8S中,你用的flannel是哪个工作模式及fannel的底层原理如何实现数据报文转发的?
|
4月前
|
Kubernetes 监控 Perl
在K8S中,hpa原理是什么?
在K8S中,hpa原理是什么?
|
4月前
|
Kubernetes 负载均衡 API
在K8S中,api-service 和 kube-schedule 高可用原理是什么?
在K8S中,api-service 和 kube-schedule 高可用原理是什么?
|
4月前
|
Kubernetes 网络虚拟化 容器
在K8S中,cailico的ipip模型和ciliume的vxlan模型除了在具体的实现不同,在原理上有何区别?
在K8S中,cailico的ipip模型和ciliume的vxlan模型除了在具体的实现不同,在原理上有何区别?
|
4月前
|
存储 Kubernetes 数据安全/隐私保护
在K8S中,如果后端nfs存储的ip发生变化如何解决?
在K8S中,如果后端nfs存储的ip发生变化如何解决?
|
4月前
|
存储 缓存 Kubernetes
在K8S中,业务Pod数据如何存储?
在K8S中,业务Pod数据如何存储?
|
4月前
|
存储 JSON Kubernetes
在K8S中,存储敏感信息方式有哪些?
在K8S中,存储敏感信息方式有哪些?