Volume 存储卷
通过挂载存储卷,可以将应用的数据持久化和共享,在本机测试中,我们通常会将数据挂载到宿主机的目录来保存应用的数据
存储卷的类型有:
- EmptyDir
- 最基础的Volume类型,就是Host上的一个空目录
- 和Pod的生命周期一致,Pod在他就在,Pod如果删除了目录数据就没有了
- 是Host上创建的临时目录,可以当变得为Pod中容器提供共享存储,但是生命周期跟随Pod
- HostPath
- 是将Docker Host文件系统中已经存在的一个目录,如果需要访问Docker内部的资源配置可以使用。
- Pod销毁 hostPath还是能够保留,但是Docker Host如果异常退出了,hostPath将无法访问
- 外部StorageProvider
- k8s主流的分布式存储有:Ceph\GlusterFS,主要解决存储单点故障问题,在正式的生产中必须要考虑这一点
- Ceph的配置有:
spec:
volumes:
- name: ceph-test
cephfs:
path: /somepathinsideceph
monitor: "ip:port"
secretfile: "/etc/admin.secret"
containers:
- image: busybox
name: busytest
volumnMountes:
name: ceph-test
mountPath: /testdemo
将Ceph的目录/somepathinsideceph 挂载到容器的/testdemo下 由于这个是外部存储,所以不受Pod Docker和K8S的影响,保障数据的持久性,分布式能够进一步保障数据的安全性
PV & PVC
数据可以持久化之后,出现了对数据的划分和管控的问题:是否一个人管所有的数据,所有容器细节都需要知晓?是否所有的数据都开给各自管辖,如何控制各个容器对资源的申请与使用?
因此诞生了PV和PVC的概念,将对持久卷PersistentVolume的管理和申请Claim分离,产生了PersistentVolume和
PersistentVolumeClaim
有了PVC,用户只需要说明需要什么样的存储资源,而不需要知道真实数据挂载在什么目录上 管理员会将目录划分好,提供到应用侧进行使用
此外还有的文件方案有:nfs\aws ebs
NFS适合在开发与测试环境使用,以低廉的成本来实现共享存储卷
- 搭建一个nfs服务器
- 创建一个nfsdata共享目录
- 创建指定目录、资源、策略
apiVersion: v1
kind: PersisentVolume
metadata:
name: mypv1
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: nfs
nfs:
path: /nfsdata
sever: 127.0.0.1
kubectl apply -f pv.yaml
kubectl get pv
kubectl get pvc
创建Pod并确认Bound挂载上后,通过手动创建文件或目录进行验证
kubectl exec podname touch /insidedatapath/newdir
通过 ls /nfsdata/newdir
确认是否挂载操作正确
通过YAML文件或者名称直接删除
kubectl delete pvc pvcname
回收策略persistentVolumeReclaimPolicy:
- Recycle: 数据会被清除
- Retain: 保留
- Delete: 删除
PV的分配有两种模式:静态供给(Static Provision)和动态供给(Dynamical Provision):
- 静态供给:手动创建PV,通过PVC申请PV在Pod中使用
- 动态供给:即如果没有满足需求的PV,就动态创建PV,不需要提前创建PV,减少管理员的工作量
动态供给是通过StorageClass实现的 StorageClass standard
kind: StorageClass
apiVersion: stoage.k8s.io/v1
metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
reclaimPolicy: Retain
StorageClass slow
kind: StorageClass
apiVersion: stoage.k8s.io/v1
metadata:
name: slow
provisioner: kubernetes.io/aws-ebs
parameters:
type: io1
zones: s-east-1d,us-east-1c
iopsPerGB: "10"
StorageClass支持Delete和Retain两种reclaimPolicy,默认是Delete