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/v1
kind: Deployment
metadata:
name: nginx-dep1
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: wwwroot
mountPath: /usr/share/nginx/html
ports:
- containerPort: 80
volumes:
- name: wwwroot
nfs:
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: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
nfs:
path: /data/nfs
server: 192.168.44.134
kubectl apply -f pv.yaml
创建pvc
vi pvc.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-dep1
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: wwwroot
mountPath: /usr/share/nginx/html
ports:
- containerPort: 80
volumes:
- name: wwwroot
persistentVolumeClaim:
claimName: my-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
kubectl apply -f pvc.yaml
kubectl get pv,pvc
kubectl get pods
emptyDir
一般emptyDir卷用于Pod中的不同Container共享数据。它可以被挂载到相同或不同的路径上
如果pod删除,emptyDir卷中的数据也将被删除,因为主要是用来做数据共享的,并不是存储
直接指定emptyDir为{}即可
volumeMounts:
- mountPath: /share
name: share-volume
volumes:
- name: share-volume
emptyDir: {}
hostPath
nfs
基于nfs创建一个PV来实现的
# 官网实现
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs
spec:
capacity:
storage: 1Mi
accessModes:
- ReadWriteMany
nfs:
server: nfs-server.default.svc.cluster.local
path: "/"
pvc不用关心存储集群是用什么,只需要关心与pv的关联
pv分两种:动态pv、静态pv
静态pv:nfs (手动创建pv)
动态pv:ceph gfs (动态生成pv)