K8S Pod引用PVC 案例
cat 05-deploy-nginx-pvc.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: baimei-nginx-pvc
spec:
replicas: 2
selector:
matchExpressions:
- key: apps
values:
- "nginx"
operator: In
template:
metadata:
labels:
apps: nginx
spec:
volumes:
- name: data
# 声明是一个PVC类型
persistentVolumeClaim:
# 引用哪个PVC
claimName: baimei-linux-pvc
containers:
- name: web
image: harbor.baimei.com/baimei-web/nginx:1.25.1-alpine
volumeMounts:
- name: data
mountPath: /usr/share/nginx/html
---
apiVersion: v1
kind: Service
metadata:
name: baimei-linux-nginx
spec:
type: NodePort
selector:
apps: nginx
ports:
- port: 80
targetPort: 80
nodePort: 30080
创建资源:
kubectl apply -f 05-deploy-nginx-pvc.yaml
kubectl get pods,svc
进入容器:
kubectl exec -it baimei-nginx-pvc-844977cfd9-wlxwx -- sh
cd /usr/share/nginx/html/
echo "<h1>www.baimei.com</h1>" > index.html
如何验证,待完善
小彩蛋: 查看某个Pod的底层使用的存储卷类型。
[root@master231 deployments]# cat /tmp/get-pods-pv-soursh.sh
#!/bin/bash
POD_NAME=${1:-baimei-nginx-pvc-54b6bccf47-4ckv8}
PVC_NAME=`kubectl describe pods ${POD_NAME} | awk '/ClaimName/{print $2}'`
PV_NAME=`kubectl get pvc ${PVC_NAME} | awk 'NR==2{print $3}'`
#kubectl describe pv ${PV_NAME} | sed -n '/Source/,/ReadOnly/p'
#kubectl describe pv ${PV_NAME} | grep Source -A 4
kubectl describe pv ${PV_NAME} | awk '/Source/,/ReadOnly/'
[root@master231 deployments]#
[root@master231 deployments]# kubectl get pods
NAME READY STATUS RESTARTS AGE
baimei-nginx-pvc-54b6bccf47-4ckv8 1/1 Running 0 16m
baimei-nginx-pvc-54b6bccf47-kxf79 1/1 Running 0 16m
baimei-python3-sa-799bdd87b4-4cdsh 1/1 Running 0 69m
baimei-python3-sa-799bdd87b4-crpl7 1/1 Running 0 69m
[root@master231 deployments]#
[root@master231 deployments]#
[root@master231 deployments]# bash /tmp/get-pods-pv-soursh.sh baimei-nginx-pvc-54b6bccf47-kxf79
Source:
Type: NFS (an NFS mount that lasts the lifetime of a pod)
Server: 10.0.0.231
Path: /baimei/data/kubernetes/pv/linux86/pv002
ReadOnly: false
[root@master231 deployments]#
[root@master231 deployments]# bash /tmp/get-pods-pv-soursh.sh
Source:
Type: NFS (an NFS mount that lasts the lifetime of a pod)
Server: 10.0.0.231
Path: /baimei/data/kubernetes/pv/linux86/pv002
ReadOnly: false
[root@master231 deployments]#
- 删除pvc验证pv的回收策略
Retain:
"保留回收"策略允许手动回收资源,删除pvc时,pv仍然存在,并且该卷被视为"已释放(Released)"。
在管理员手动回收资源之前,使用该策略其他Pod将无法直接使用。
温馨提示:
(1)在k8s1.15.12版本测试时,删除pvc发现nfs存储卷的数据并不会被删除,pv也不会被删除;
Delete:
对于支持删除回收策略的卷插件,k8s将删除pv及其对应的数据卷数据。建议使用动态存储类(sc)实现,才能看到效果哟!
对于AWS EBS, GCE PD, Azure Disk, or OpenStack Cinder等存储卷会被删除。
温馨提示:
(1)在k8s1.15.12版本测试时,在不使用sc时,则删除pvc发现nfs存储卷的数据并不会被删除;
(2)在k8s1.15.12版本测试时,在使用sc后,可以看到删除效果哟;
Recycle:
对于"回收利用"策略官方已弃用。相反,推荐的方法是使用动态资源调配。而动态存储类已经不支持该类型啦!
如果基础卷插件支持,回收回收策略将对卷执行基本清理(rm -rf /thevolume/*),并使其再次可用于新的声明。
温馨提示,在k8s1.15.12版本测试时,删除pvc发现nfs存储卷的数据被删除。
-
临时更改pv的回收策略
kubectl patch pv baimei-linux86-pv03 -p '{"spec":{"persistentVolumeReclaimPolicy":"Recycle"}}'
https://kubernetes.io/docs/tasks/administer-cluster/change-pv-reclaim-policy/
基于命令行的方式修改配置,基本上都是临时修改,当资源被删除后,重新创建时依旧会根据资源清单的配置创建。
持久卷Persistent Volume(简称"PV") 案例 : 连接
持久卷声明Persistent Volume Claim(简称"PVC") 案例 : 连接