kubernetes资源——pv/pvc持久卷
一、volume数据卷
用于pod中的数据的持久化存储
支持很多的卷类型, 例如EmptyDir、hostPath、NAS、SAN、CEPH
1、hostPath
挂载物理机上的目录做持久化
apiVersion: apps/v1
kind: Deployment
metadata:
name: test1-hostpath
spec:
replicas: 1
selector:
matchLabels:
app: hostpath
template:
metadata:
labels:
app: hostpath
spec:
containers:
- name: test1-hostpath
image: centos:7
imagePullPolicy: IfNotPresent
command:
- sleep
- "3600"
volumeMounts: // 挂载卷
- name: test1-volume
mountPath: /test1
volumes: // 创建卷,名称为test1-volume, 类型为hostpath
- name: test1-volume
hostPath:
path: /test/data
[root@k8s-master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test1-hostpath-584f599fcf-wzt2q 1/1 Running 0 117s 10.88.201.193 k8s-node01.linux.com <none> <none>
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl exec -ti test1-hostpath-584f599fcf-wzt2q bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
[root@test1-hostpath-584f599fcf-wzt2q /]#
[root@test1-hostpath-584f599fcf-wzt2q /]# touch /test1/{1..10}
[root@test1-hostpath-584f599fcf-wzt2q /]# ls /test1/
1 10 2 3 4 5 6 7 8 9
[root@test1-hostpath-584f599fcf-wzt2q /]#
[root@test1-hostpath-584f599fcf-wzt2q /]# exit
exit
2、挂载nfs实现持久化
apiVersion: apps/v1
kind: Deployment
metadata:
name: test2-pod-nfs
spec:
replicas: 1
selector:
matchLabels:
app: nfs
template:
metadata:
labels:
app: nfs
spec:
containers:
- name: test2-pod-nfs
image: centos:7
imagePullPolicy: IfNotPresent
command:
- sleep
- "3600"
volumeMounts:
- name: test2-nfs-volume
mountPath: /test2
volumes:
- name: test2-nfs-volume
nfs:
server: "192.168.140.13"
path: "/test2"
二、pv/pvc 持久卷/持久卷声明
1、pv/pvc介绍
pv, 持久卷,后端真实存储空间的映射
pvc, 持久卷声明,使用存储的申请
使用流程:
1、创建pv,描述后端真实的存储空间
2、创建pvc,描述使用存储的申请
3、创建pod,挂载pvc使用存储
2、pv/pvc的使用流程
2.1 创建pv
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-2g
spec:
capacity:
storage: 2G
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
server: "192.168.140.13"
path: "/test6"
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-3g
spec:
capacity:
storage: 3G
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
nfs:
server: "192.168.140.13"
path: "/test7"
accessModes:用于指定PV的访问模式,共有四种
-
ReadWriteOnce
被单个节点以读写模式挂载 -
ReadWriteMany
被多个节点以读写模式挂载 -
ReadOnlyMany
被多个节点以只读模式挂载 -
ReadOnlyOnce, k8s 1.29
被单节点以只读模式挂载
persistentVolumeReclaimPolicy:
指定回收模式是自动回收,当空间被释放时,K8S自动清理,然后可以继续绑定使用
[root@k8s-master pvTest]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE
pv-2g 2G RWX Recycle Available <unset> 2m26s
pv-3g 3G RWO Recycle Available <unset> 46s
2.2 创建pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-1g
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1G
[root@k8s-master pvTest]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
pvc-1g Bound pv-2g 2G RWX <unset> 10s
```bash
[root@k8s-master pvTest]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE
pv-2g 2G RWX Recycle Bound default/pvc-1g <unset> 10m
pv-3g 3G RWO Recycle Available <unset> 8m34s
2.3 创建pod,使用pv做持久化
apiVersion: apps/v1
kind: Deployment
metadata:
name: test1-pod
spec:
replicas: 1
selector:
matchLabels:
app: pv
template:
metadata:
labels:
app: pv
spec:
containers:
- name: test1-pod
image: centos:7
imagePullPolicy: IfNotPresent
command:
- sleep
- "3600"
volumeMounts:
- name: test1-pod-pv-volume
mountPath: /test1
volumes:
- name: test1-pod-pv-volume
persistentVolumeClaim: // 通过关联pvc创建数据卷
claimName: pvc-1g