Pod使用Volume步骤:
1、在Pod上定义存储卷,并关联至目标存储服务上;
2、在需要用到存储卷的容器上,挂载其所属的Pod的存储卷;
存储卷类型:
Host级别:hostPath, Local
网络级别:NFS、GlusterFS、rbd(块设备)、CephFS(文件系统)、…
临时存储:emptyDir
本质上,K8s volume是一个目录,这点和Docker volume差不多,当Volume被mount到Pod上,这个Pod中的所有容器都可以访问这个volume,在生产场景中,我们常用的类型有这几种:
emptyDir:在宿主机上创建一个临时空目录并挂载到容器,pod删,emptyDir数据也会删
hostPath:挂载宿主机目录或文件到容器
PersistentVolume(PV) & PersistentVolumeClaim(PVC)
StorageClass
pv 持久卷
pvc 持久卷消费
先创建pv.yaml,再创建pvc.yaml,把pv绑定到pvc上
pvc挂载到pv上,status为Bound
pv被pvc消费,claim为pvc
deployment.yaml则开始挂载这个pvc
如何回收pvc以及pv
PV与PVC绑定依据:存储容量、匹配模式
创建nfs
vi nfs-nginx.yaml
apiVersion: apps/v1kind: Deploymentmetadata:name: nginx-dep1spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginxvolumeMounts:- name: wwwrootmountPath: /usr/share/nginx/htmlports:- containerPort: 80volumes:- name: wwwrootnfs:server: 192.168.xxx.xxx # nfs服务器地址path: /data/nfs
kubectl apply -f nfs-nginx.yaml
kubectl get pods
kukbectl exec -it pod-name /bin/bash
ls /usr/share/nginx/html # 在pod中查看挂载目录是否有内容
创建pv
vi pv.yaml
apiVersion: v1kind: PersistentVolumemetadata:name: my-pvspec:capacity:storage: 5GiaccessModes:- ReadWriteManynfs:path: /data/nfsserver: 192.168.44.134
kubectl apply -f pv.yaml
创建pvc
vi pvc.yaml
apiVersion: apps/v1kind: Deploymentmetadata:name: nginx-dep1spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginxvolumeMounts:- name: wwwrootmountPath: /usr/share/nginx/htmlports:- containerPort: 80volumes:- name: wwwrootpersistentVolumeClaim:claimName: my-pvc---apiVersion: v1kind: PersistentVolumeClaimmetadata:name: my-pvcspec:accessModes:- ReadWriteManyresources:requests:storage: 5Gi
kubectl apply -f pvc.yaml
kubectl get pv,pvc
kubectl get pods
emptyDir
一般emptyDir卷用于Pod中的不同Container共享数据。它可以被挂载到相同或不同的路径上
如果pod删除,emptyDir卷中的数据也将被删除,因为主要是用来做数据共享的,并不是存储
直接指定emptyDir为{}即可
volumeMounts:- mountPath: /sharename: share-volumevolumes:- name: share-volumeemptyDir: {}
hostPath
nfs
基于nfs创建一个PV来实现的
# 官网实现apiVersion: v1kind: PersistentVolumemetadata:name: nfsspec:capacity:storage: 1MiaccessModes:- ReadWriteManynfs:server: nfs-server.default.svc.cluster.localpath: "/"

pvc不用关心存储集群是用什么,只需要关心与pv的关联
pv分两种:动态pv、静态pv
静态pv:nfs (手动创建pv)
动态pv:ceph gfs (动态生成pv)
