容器部署过程中一般有以下三种数据:
- 启动时需要的初始数据,可以是配置文件
- 启动过程中产生的临时数据,该临时数据需要多个容器间共享
- 启动过程中产生的持久化数据
我们希望容器重启可以保存以上类型的数据,所以存储卷就必须使用,那么应对以上不同类型需求,我们使用什么类型存储卷呢?
volumes:
启动依赖数据:configmap secret
临时存储数据:emptyDir hostPath
持久化数据:nfs cephfs GlutserFS cloud等
存储系统与应用系统区分开,单独资源对象, 它不直接和Pod发生关系,通过另一个资源对象PersistentVolumeClaim来绑定关联,生命周期与POD关联。
举例几个典型的类型:
emptyDir
apiVersion v1
kind Pod
metadata
name demo
labels
purpose demonstrate-envars
spec
volumes - name volume1
emptyDir:
containers - name demo1
image busybox
command'sh''-c''sleep 5000'
volumeMounts - mountPath /xx
name volume1 - name demo2
image busybox
command'sh''-c''sleep 5000'
volumeMounts - mountPath /xx
name volume1
hostpath
apiVersion v1
kind Pod
metadata
name demo
labels
purpose demonstrate-envars
spec
volumes - name volume1
hostPath
path:/zz
containers - name demo1
image busybox
command'sh''-c''sleep 5000'
volumeMounts - mountPath /xx
name volume1 - name demo2
image busybox
command'sh''-c''sleep 5000'
volumeMounts - mountPath /xx
name volume1
NFS
apiVersion v1
kind Pod
metadata
labels
run nginx
name nginx
spec
volumes - name nfs
nfs
server192.168.26.102
path:"/123" containers - image nginx
name nginx
volumeMounts - name nfs
mountPath:"/usr/share/nginx/html"
issci存储
apiVersion v1
kind Pod
metadata
name iscsipd
spec
containers - name iscsipd-rw
image nginx
volumeMounts - mountPath"/mnt/iscsipd"
name iscsipd-rw
volumes - name iscsipd-rw
iscsi
targetPortal 192.168.26.1023260
iqn iqn.2018-10.cc.rhce disk
lun0
fsType xfs
readOnly fals
主要来讲讲持久化存储PV:
PV的预制创建有两种模式:静态模式和动态模式。
静态模式:除创建PVC外,还需手动创建PV。
动态模式:只需创建PVC,系统根据PVC自动创建PV。
apiVersion v1
kind PersistentVolume
metadata
name pv0003
spec
capacity
storage 5Gi
volumeMode Filesystem
accessModes
ReadWriteOnce
persistentVolumeReclaimPolicy Recycle
storageClassName slow
mountOptions
hard
nfsvers=4.1
nfs
path /tmp
server172.17.0.2
那么对于用户来说更关心的是什么呢?存储访问模式,存储大小,甚至类型适配能力等。这就需要我们申明存储,所以引入持久化存储申明(PVC)
apiVersion v1
kind PersistentVolumeClaim
metadata
name redis-pv-claim
labels
app redis
spec
accessModes
ReadWriteOnce
resources
requests
storage 5Gi
storageClassName:sata
下面放一个示例,当然你也可以k8s官网文档去看。
apiVersion v1
kind PersistentVolumeClaim
metadata
annotations
volume.beta.kubernetes.io/storage-class sata
volume.beta.kubernetes.io/storage-provisioner
flexvolume-huawei.com/fuxivol
labels
failure-domain.beta.kubernetes.io/region
southchina
failure-domain.beta.kubernetes.io/zone kvmxen.dc1
name test
spec
accessModes
ReadWriteMany
resources
requests
storage 10Gi
spec
containers
image nginx latest
imagePullPolicy IfNotPresent
name container-0
volumeMounts
name test
mountPath /tmp
volumes
persistentVolumeClaim
claimName test
name test
PS:代码块YAML格式缩进有问题。