通过博文Kubernetes的存储之体积可以了解到Kubernets实现数据持久化的流程为:
<强>搭建NFS底层存储,在创建PV -祝辞创建PVC——在创建pod 强>
最终将豆荚中容器的实现数据的持久化!
从上述流程中,看似没有什么问题,但是仔细研究就会发现:PVC在向光伏申请存储空间时,是根据指定PV的名称,访问模式,容量大小来决定具体向哪个PV申请空间的。
打比方说:如果PV的容量是20 g,定义的访问模式是WRO(只允许以读写的方式挂载到单个节点),而PVC申请的存储空间为10克,那么一旦这个PVC是向上述的PV申请的空间,也就是说,那么PV有10 g的空间被白白浪费了,因为其只允许单个节点挂载。这是一个非常严重的问题。就算不考虑这个问题,我们每次手动去创建光伏也是比较麻烦的事情,这是就需要使用一个自动化的方案来替我们创建PV。这个自动化的方案就是,存储类(存储类)!
<强>存储类(存储类)概述强>
存储类(存储类)是Kubernetes资源类型的一种,它是由管理员为管理PV更加方便而创建的一个逻辑组,可以按照存储系统的性能高低,综合服务质量,备份策略等分类。不过Kubernetes本身并不知道类别到底是什么,这是一个简单的描述而已。
存储类的好处之一就是支持PV的动态创建,当用户用到持久化存储时,不必再去提前创建光伏,而是直接创建PVC就可以了,非常的方便,同时也避免了空间的浪费!
<强>存储类(存储类)三个重要的概念:强>
引用>
1)粮食供应者(供给方,提供者):提供了存储资源的存储系统.Kubernetes内部多重供给方,这些供给方的名字都以“kubernetes.io”为前缀。并且还可以自定义。
2)参数(参数):存储类使用参数描述要关联到的存储卷,注意不同的供给方参数也不同,
3) ReclaimPlicy: pv的回收策略,可用的值有删除(默认)和保留;下面通过一个nginx基于自动创建光伏实现数据持久化的案例进一步的了解存储类的具体使用!
1)搭建NFS共享存储
为了方便,就直接在主节点上部署NFS存储了!
<代码> [root@master ~] # yum - y安装nfs-utils rpcbind # vim/etc/exports root@master ~/nfsdata * (rw,同步,no_root_squash) root@master ~ # systemctl启动nfs服务器 (root@master ~) # systemctl rpcbind开始 root@master ~ # showmount - e 出口主列表:/nfsdata * 代码>2)创建rbac授权
这种自动创建光伏的方式涉及到了rbac授权机制,关于rbac授权机制这里先不详细介绍,随后再更新说明。
<代码> root@master ~ # vim rbac-rolebind.yaml :名称空间#创建一个名称空间,名称为xiaojiang-test apiVersion: v1 元数据: 名称:xiaojiang-test --- apiVersion: v1 #创建一个用于认证的服务账号 :ServiceAccount 元数据: 名称:nfs-provisioner 名称空间:xiaojiang-test --- apiVersion: rbac.authorization.k8s。io/v1 #创建群集规则 :ClusterRole 元数据: 名称:nfs-provisioner-runner 名称空间:xiaojiang-test 规则: - apiGroups: ["] 资源(“persistentvolumes”): 动词:[“获得”,“列表”,“看”,“创造”,“删除”) - apiGroups: ["] 资源(“persistentvolumeclaims”): 动词:[“获得”,“列表”,“看”,“更新”) ——apiGroups (“storage.k8s.io”): 资源(“storageclasses”): 动词:[“获得”,“列表”,“看”) - apiGroups: ["] 资源(“事件”): 动词:[“看”,“创造”,“更新”,“补丁”) - apiGroups: ["] 资源:(“服务”、“端点”) 动词:[“获得”,“创造”,“列表”,“看”,“更新”) ——apiGroups(“扩展”): 资源(“podsecuritypolicies”): resourceNames (“nfs-provisioner”): 动词(“使用”): --- :ClusterRoleBinding #将服务认证用户与群集规则进行绑定 apiVersion: rbac.authorization.k8s.io/v1 元数据: 名称:run-nfs-provisioner 主题: 类型:ServiceAccount 名称:nfs-provisioner 名称空间:xiaojiang-test roleRef: :ClusterRole 名称:nfs-provisioner-runner apiGroup: rbac.authorization.k8s.io (root@master ~) # - f rbac-rolebind kubectl适用。yaml #执行yaml文件代码>3)创建nfs-deployment。资源
nfs-deployment的作用,其实它是一个NFS客户端。但它通过美丽的内置的NFS驱动挂载远端的NFS服务器到(容器内)本地目录,然后将自身作为存储提供商,关联存储类。
Kubernetes数据持久化之存储类(