k8s持久化存储
1、存储卷介绍
存储卷的分类
# kubectl explain pod.spec.volumes
存储卷的选择
-
文件存储,如nfs、glusterfs、cephfs等,数据共享,但是性能较差
-
块存储,如iscsi、rbd等,性能较好,不能实现数据共享(部分)
-
对象存储,如ceph对象存储,性能好,数据共享,但是使用方式特殊,支持较少。
2、本地存储卷应用
2.1 emptyDir
实现pod内容器之间数据共享,随着pod被删除,该卷也会被删除
# cat volume-emptydir.yml
apiVersion: v1
kind: Pod
metadata:
name: volume-emptydir
spec:
containers:
- name: write
image: centos:centos7
imagePullPolicy: IfNotPresent
command: ["bash", "-c", "echo haha > /data/1.txt;sleep 6000"]
volumeMounts:
- name: data
mountPath: /data
- name: read
image: centos:centos7
imagePullPolicy: IfNotPresent
command: ["bash", "-c", "cat /data/1.txt; sleep 6000"]
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
emptyDir: {}
# kubectl apply -f volume-emptydir.yml
# kubectl logs -f volume-emptydir write
# kubectl exec -it volume-emptydir -c write -- /bin/bash
2.2 hostPath
Pod内与集群节点主机目录映射
# cat volume-hostpath.yml
apiVersion: v1
kind: Pod
metadata:
name: volume-hostpath
spec:
containers:
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
command: ["/bin/sh", "-c", "echo hahahah > /data/1.txt;sleep 6000"]
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
hostPath:
path: /opt
type: Directory
# kubectl apply -f volume-hostpath.yml
2.3 nfs
# cat volume-nfs.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: volume-nfs
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15-alpine
imagePullPolicy: IfNotPresent
volumeMounts:
- name: documentroot
mountPath: /usr/share/nginx/html
ports:
- containerPort: 80
volumes:
- name: documentroot
nfs:
server: 192.168.16.133
path: /data/nfs
3、PV和PVC
kubernetes存储卷分类太丰富了,每种类型都要写相应的接口与参数才行,这就让维护与管理难度加大。
PersistentVolume(PV)是配置好的一段存储,可以是任意类型的存储卷
PersistentVolumeClaim(PVC)是用户pod使用PV的申请请求
pv与pvc之间的关系,pv提供存储资源,pvc使用存储资源,使用pvc绑定pv
创建pv
# cat pv-nfs.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nfs
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
nfs:
path: /data/nfs
server: 192.168.16.131
创建pvc
# cat pvc-nfs.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-nfs
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
创建使用pvc的deployment资源对象
# cat deploy-nginx-pvc.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-nginx-pvc
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15-alpine
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumes:
- name: www
persistentVolumeClaim:
claimName: pvc-nfs
4、存储动态供给
通过nfs实现存储动态供给,官方不支持nfs,通过第三方插件实现
第三方插件地址:https://github.com/kubernetes-retired/external-storage
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具