根据应用本身是否 需要持久存储数据,以及某一此请求和此前的请求是否有关联性,可以分为四类应用:
1.有状态要存储 2.有状态无持久存储 3.无状态无持久存储4.无状态有持久存储
在k8s上的数据持久性:1.emptyDir:只在节点本地使用,一旦pod删除存储卷也删除。只是用来做临时目录,可是做缓存用 没有任何持久性
2.hostPath:主机路径,直接在宿主机上找一个目录与容器建立关联关系,也不具有真正意义上的持久性
3.网络连接性存储 1)传统意义上的存储设备,本地的san(iscsi),nas(nfs,cifs)
2) 分布式存储 文件系统级别的(glusterfs,cephfs) 块存储级别的(ceph)
3)云存储 EBS、Azure Disk、
可以通过命令 kubectl explain pod.spec.volumes
一、emptyDir:同一个pod内的多个容器可以共享同一个存储卷,pod删除存储卷也删除。不能实现数据存储化
apiVersion: v1kind: Podmetadata: ?name: pod-volume ?namespace: default ?labels: ???app: myapp ???tier: frontend ?annotations: ???create_by: yiruiduanspec: ?containers: ?- name: nginx ???image: ikubernetes/myapp:v1 ???imagePullPolicy: IfNotPresent ???ports: ???- name: http ?????containerPort: 80 ???volumeMounts: ???- name: html ?????mountPath: /usr/share/nginx/html/ ?- name: busybox ???image: busybox:latest ???imagePullPolicy: IfNotPresent ???volumeMounts: ???- name: html ?????mountPath: /data ???command: [‘/bin/sh‘,‘-c‘,"while true;do echo $(date) >>/data/index.html;sleep 2;done"] ?volumes: ?- name: html ???emptyDir: {}
访问nginx就可以看到动态生成的index.html
二、hostPathsu宿主机路径,把pod所在的宿主机之上的文件 系统的某一目录,与pod建立关系,在pod被删除的时候,这个存储卷是不会被删除的。所以只要同一个pod能够调度到同一个节点上,对应的数据依然是存在的。这只是节点及的持久,节点down了数据也就没有了。存在数据丢失
apiVersion: v1kind: Podmetadata: ?name: pod-vol-hostpath ?namespace: defaultspec: ?containers: ?- name: myapp ???image: ikubernetes/myapp:v1 ???volumeMounts: ???- name: html ?????mountPath: /usr/share/nginx/html ?volumes: ?- name: html ???hostPath: ?????path: /data/pod/volume1 ?????type: DirectoryOrCreate ????#如果目录不存在就创建
三、nfs共享存储,节点挂在共享存储。无论调度在那个节点上所有数据能共享访问。
kubernetes 的数据的存储 ?存储卷
原文地址:https://www.cnblogs.com/both/p/9662825.html