Kubernetes容器技术项目教程课件:使用存储卷.pptx
使用存储卷
目录
CONTENTS
使用基本存储卷
使用PV和PVC
部署动态Web集群应用
任务1
使用基本存储卷
6.1.1存储卷概述
任务实施
存储卷的作用
在k8s中,由于pod分布在各个不同的节点之上,在节点故障时,可能会导致数据的永久性丢失,同时不能实现不同节点之间持久性数据的共享,为此,k8s就引入了外部存储卷的功能。
存储卷的种类
在k8s中,存储卷主要分为本地存储卷EmptyDir、HostPath,实现键值对配置的ConfigMap和Secret存储、本地的SAN存储Iscsi,Fc等、NAS存储nfs,cifs,http等、分布式存储glusterfs,rbd,cephfs等、云存储(EBS,AzureDisk)等。
在yaml目录下,创建一个emptydir.yaml文件
脚本定义了一个名称为emptydir的Pod,包含两个容器。使用volumes定义了存储卷的名称为html,存储卷的类型为emptyDir:{}。
6.1.2使用EmptyDir
与HostPath本地存储卷
emptyDir是在工作节点node上创建pod时被指定的,并且会一直存在在pod的生命周期当中,kubernetes会在node上自动分配一个目录,因此无需指定宿主机node上对应的目录文件。这个目录的初始内容为空,当Pod从node上移除时,emptyDir中的数据会被永久删除。在需要一个临时存储空间、做单节点的k8s环境功能测试等一些特殊场景下使用。
使用EmptyDir
2.创建使用EmptyDir存储卷
3.验证配置
1.EmptyDir存储卷作用
容器共享emptyDir目录
创建Pod运行两个容器,查看运行的Pod和调度的节点,发现Pod中的两个容器调度到了node1节点,查看nginx容器的内容,说明两个容器共享emptyDir存储卷定义的目录了。
Pod重启后数据消失
首先删除当前运行的Pod,然后重新创建Pod,查看Pod调度的信息,查看nginx容器首页内容,通过首页显示的时间发现,之前的两条时间记录已经不存在了,说明数据已经丢失了。
6.1.2使用EmptyDir
与HostPath本地存储卷
使用hostPath存储卷,可以将Pod目录或文件挂载到宿主机目录或文件,优点是在pod删除时,宿主机上的数据存储数据不会丢失,缺点是在k8s中,pod都是动态在各node节点上调度,当一个pod在当前node节点上启动并通过hostPath存储了文件到本地以后,下次调度到另一个节点上启动时,就无法使用在之前节点上存储的文件。
使用HostPath存储卷
2.验证配置
查看Pod调度信息
检查配置node1节点
创建首页文件
删除Pod
重新启动Pod
结果如下:
hello,hostPath
通过结果,发现又显示了之前的主页内容。这里需要注意的是因为Pod被调度到了node1节点,所以内容不变,如果Pod被调度到了其它节点,内容就不会存在了,因为第一次启动Pod时hostPath将数据持久化到了node1的/html下。
1.创建使用HostPath存储卷
(1)FileOrCreate宿主机上不存在挂载文件就创建
(2)File必须存在文件
在创建nginx容器时,使用volumeMounts定义了挂载的数据卷名称为html,使用mountPath定义了容器挂载的目录是网站主页目录。
6.1.3使用NFS存储卷
emptyDir存储卷在重启容器后数据会消失,hostPath存储卷可以在每个节点上持久化数据,但是当Pod重启后,调度到其它node节点时,数据也就找不到了,影响业务。这就需要使用一种能持久化数据并且和节点无关的数据卷,方式比较多,NFS共享存储卷是一种常用的方式。
1.安装配置NFS服务
(1)安装NFS服务
(2)配置NFS服务
配置完成后,启动NFS服务
结果如下:
Exportlistformaster:
/web/24
NFS存储卷概述
3.配置首页文件
2.创建Pod
4.调度Pod到node2节点
结果如下:
hello,nfs
说明nfs持久化了数据,Pod无论调度到哪个节点,都能通过NFS存储卷读取到nfs服务共享的数据。
6.1.4使用ConfigMap与Secret存储卷
许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。这些配置信息需要与docker镜像解耦,否则修改一个配置就需要重新制作一次docker镜像,ConfigMapAPI提供了向容器中注入配置信息的机制,可以用来保存单个属性,也可以用来