linux怎么查看本机内存大小
221
2022-10-29
kubernetes持久化存储,静态存储【pv】,动态存储【StorageClass】(5)
在开始介绍k8s持久化存储前,我们有必要了解一下k8s的emptydir和hostpath、configmap以及secret的机制和用途
1、EmptydirEmptyDir是一个空目录,他的生命周期和所属的 Pod 是完全一致的,pod删掉目录消失
2、HostpathHostpath会把宿主机上的指定卷加载到容器之中,如果 Pod 发生跨主机的重建,其内容就难保证了
3、ConfigmapConfigMap跟Secrets类似,但是ConfigMap可以更方便的处理不包含敏感信息的字符串。当ConfigMap以数据卷的形式挂载进Pod的时,这时更新ConfigMap(或删掉重建ConfigMap),Pod内挂载的配置信息会热更新。这时可以增加一些监测配置文件变更的脚本,然后reload对应服务
4、SecretSecret来处理敏感数据,比如密码、Token和密钥,相比于直接将敏感数据配置在Pod的定义或者镜像中,Secret提供了更加安全的机制(Base64加密),防止数据泄露。Secret的创建是独立于Pod的,以数据卷的形式挂载到Pod中,Secret的数据将以文件的形式保存,容器通过读取文件可以获取需要的数据
==========================================================
下面我们来介绍一下k8s的持久化存储方案,目前k8s支持的存储方案主要如下:分布式文件系统:NFS/GlusterFS/CephFS公有云存储方案:AWS/GCE/Auzre
这里使用nfs测试一下
我们这里为了演示方便,决定使用相对简单的 NFS 这种存储资源,接下来我们在节点10.20.2.116上来安装 NFS 服务,数据目录:/data/k8s/
什么是PV,pvcPV 的全称是:PersistentVolume(持久化卷),是对底层的共享存储的一种抽象,主要是定义一个磁盘的大小
动态pv:StorageClassPVC 请求到一定的存储空间也很有可能不足以满足应用对于存储设备的各种需求,而且不同的应用程序对于存储性能的要求可能也不尽相同,比如读写速度、并发性能等,为了解决这一问题,Kubernetes 又为我们引入了一个新的资源对象:StorageClass,通过 StorageClass 的定义,用户根据 StorageClass 的描述就可以非常直观的知道各种存储资源的具体特性了,这样就可以根据应用的特性去申请合适的存储资源了
Capacity(存储能力)一般来说,一个 PV 对象都要指定一个存储能力,通过 PV 的 capacity属性来设置的,目前只支持存储空间的设置,就是我们这里的 storage=1Gi,不过未来可能会加入 IOPS、吞吐量等指标的配置。
====================================================================================AccessModes(访问模式)AccessModes 是用来对 PV 进行访问模式的设置,用于描述用户应用对存储资源的访问权限,访问权限包括下面几种方式:
ReadWriteOnce(RWO):读写权限,但是只能被单个节点挂载ReadOnlyMany(ROX):只读权限,可以被多个节点挂载ReadWriteMany(RWX):读写权限,可以被多个节点挂载persistentVolumeReclaimPolicy(回收策略)
=======================================================================================我这里指定的 PV 的回收策略为 Recycle,目前 PV 支持的策略有三种:
Retain(保留)- 保留数据,需要管理员手工清理数据Recycle(回收)- 清除 PV 中的数据,效果相当于执行 rm -rf /thevoluem/*Delete(删除)- 与 PV 相连的后端存储完成 volume 的删除操作,当然这常见于云服务商的存储服务,比如 ASW EBS。不过需要注意的是,目前只有 NFS 和 HostPath 两种类型支持回收策略。当然一般来说还是设置为 Retain 这种策略保险一点。
=======================================================================================状态一个 PV 的生命周期中,可能会处于4中不同的阶段:
接下来创建pvc请求 1Gi 的存储容量,访问模式也是 ReadWriteOnce,YAML 文件如下:(pvc-nfs.yaml)
cat nfs-pvc-deploy.yaml
apiVersion: extensions/v1beta1kind: Deploymentmetadata:name: nfs-pvcspec:replicas: 3template:metadata:labels:app: nfs-pvcspec:containers:
name: nginximage: nginximagePullPolicy: IfNotPresentports: containerPort: 80name: webvolumeMounts: name: /usr/share/nginx/htmlvolumes: name: pvc2-nfs
apiVersion: v1kind: Servicemetadata:name: nfs-pvclabels:app: nfs-pvcspec:type: NodePortports:
port: 80targetPort: webselector:app: nfs-pvc
为啥403没有资源呢,因为我们把nginx默认的目录映射到了pvc上面,pvc上面没东西,接下来我们创建点东西试试
然后创建
两个nginx容器的内容是完全不一样的对吧静态pv和pvc就演示到这里,后面开始动态的pv和pvc
注意事项如果这个时候我们把 PV 给删除了,上面持久化的数据还会存在吗?如果是删除的 PVC 呢?在实际使用的工程中,是很有可能出现这种情况的吧?大家在使用 PV 和 PVC 的时候一定要注意这些细节,不然一不小心就把数据搞丢了
========================================================================================================================
kind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata:name: nfs-client-provisioner-runnerrules:
apiGroups: [""]resources: ["persistentvolumes"]verbs: ["get", "list", "watch", "create", "delete"] apiGroups: [""]resources: ["persistentvolumeclaims"]verbs: ["get", "list", "watch", "update"] apiGroups: ["storage.k8s.io"]resources: ["storageclasses"]verbs: ["get", "list", "watch"] apiGroups: [""]resources: ["events"]verbs: ["list", "watch", "create", "update", "patch"] apiGroups: [""]resources: ["endpoints"]verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata:name: run-nfs-client-provisionersubjects:
kind: ServiceAccountname: nfs-client-provisionernamespace: defaultroleRef:kind: ClusterRolename: nfs-client-provisioner-runnerapiGroup: rbac.authorization.k8s.io
其实上面的都是单独联系的,生产中需要多磨炼多学习才好学习的时候出现任何问题可以私信和联系我
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~