数据存储
1.数据存储
01.volume存储介绍
docekr更适合无状态服务,如LVS Nginx 阿帕奇,比如数据库这种有状态服
务,因为数据库会不断更新数据,所以如果当这些服务剔除docker集群之后,无
状态服务可以通过NFS恢复,但是数据库则不能,因为k8s是基础设施服务的领航
者,所以他要公破有状态服务的数据也能恢复或持久,所以引申除了PV和PVC
由于容器本身是非持久化的,因此需要解决在容器中运行应用程序遇到的一些
问题。首先,当容器崩溃时,kubelet将重新启动容器,但是写入容器的文件
将会丢失,容器将会以镜像的初始状态重新开始;第二,在通过一个Pod中一
起运行的容器,通常需要共享容器之间一些文件。Kubernetes通过存储卷解
决上述的两个问题。在Docker有存储卷的概念卷,但Docker中存储卷只是磁
盘的或另一个容器中的目录,并没有对其生命周期进行管理。Kubernetes的
存储卷有自己的生命周期,它的生命周期与使用的它Pod生命周期一致。
因此,相比于在Pod中运行的容器来说,存储卷的存在时间会比的其中的任何
容器都长,并且在容器重新启动时会保留数据。当然,当Pod停止存在时,存
储卷也将不再存在。在Kubernetes支持多种类型的卷,而Pod可以同时使用
各种类型和任意数量的存储卷。在Pod中通过指定下面的字段来使用存储卷:
spec.volumes:通过此字段提供指定的存储卷
spec.containers.volumeMounts:通过此字段将存储卷挂接到容器中
常用的数据卷:
• 本地(hostPath,emptyDir)
• 网络(NFS,Ceph,GlusterFS)
• 公有云(AWS EBS)
• K8S资源(configmap,secret)
a.临时存储卷 EmptyDir
案例解释:
第二个案列:
第三个案列:
b.节点存储卷 HostPath
---上面的图片中写错了 应该修改属主属组为kubelete
案例一:
案例二:
c.网络存储卷 NFS
d.PV和PVC
e.PV
案例yaml文件解释:
案例二:
f.PVC
总结:
第一步:要有外部存储设备,比如nfs存储服务器
第二步:创建pv,标明此pv定的多大的存储空间,然后让出pv与nfs关联
第三步:创建PVC让PVC去pv申请存储空间,然后把pvc的申明与pod进行挂载,当找到相应的pv之后,挂载的就是pv了,pvc只是负责申明
g.生命周期
h.ConfigMap
总结:
第一步新建configmap文件
apiVersion: v1 ---版本
kind: ConfigMap ---种类为configmap
metadata: ---定义元数据
name: front-conf ---名称为front-conf
namespace: tsp ---所属名称空间
data: ---定义数据信息
baseUrl.js: | ---key名
window.baseUrl = 'http://xxx.com/' ---value值
window.websocketUrl = 'ws://xxx:8090/ws'
第二步创建pod进行文件名目录挂载
deployment.spec ---使用的是deployment类型的pod
containers:
- name: app
image: xxx.docker.com/project/myapp:myversion
...
volumeMounts: ---挂载导入的configmap文件
- name: front-config ---这个要和下面的volumes定义的name保持一样才能被挂载
mountPath: /mx-nodejs/dist/ ---挂载路径
volumes: ---导入第一步创建的configmap文件
- name: front-config ---名为front-config
configMap:
name: front-conf ---这个要和第一步创建configmap文件的name保持一样才能够被导入
启动deployment后,便可在应用容器内发现/mx-nodejs/dist/baseUrl.js
文件(可见简单理解为在mountPath目录中挂载configMap.data中的多个文件)
可以看到这里的文件路径下的内容已经是configmap文件里面的内容
了,以后的Nginx或者Tomcat等等的配置文件都可以这样使用挂载了
i.secret