数据共享
Pod数据持久化
1. emptyDir 存储卷
应用场景:
emptyDir 主要用于同一个 Pod 内的多个容器之间的数据共享。典型应用包括日志存储与采集。
特点:
- 生命周期:
emptyDir
存储卷的生命周期与 Pod 绑定。如果删除 Pod,数据会丢失;如果只是删除其中的某个容器,数据仍然会保留。 - 容器间数据共享:在同一个 Pod 内,不同容器可以通过挂载相同的
emptyDir
存储卷进行数据共享。
资源清单示例:
apiVersion: v1
kind: Pod
metadata:
name: xiuxian-emptydir-002
spec:
nodeName: worker232
volumes:
- name: oldboyedu-linux92
emptyDir: {}
- name: oldboyedu-xixi
emptyDir: {}
- name: oldboyedu-haha
emptyDir: {}
containers:
- image: harbor.oldboyedu.com/oldboyedu-web/xiuxian:v2
name: xiuxian
volumeMounts:
- name: oldboyedu-linux92
mountPath: /xixi
- image: harbor.oldboyedu.com/oldboyedu-linux/alpine:3.20.2
name: alpine
volumeMounts:
- name: oldboyedu-linux92
mountPath: /haha
测试案例:
- 创建并应用资源清单:
kubectl apply -f 06-pods-volume-emptyDir.yaml
- 验证容器中的数据共享:
kubectl exec xiuxian-emptydir-002 -c xiuxian -- ls -l /xixi
kubectl exec xiuxian-emptydir-002 -c alpine -- ls -l /haha
- 测试容器间的数据共享:
kubectl exec xiuxian-emptydir-002 -c alpine -it -- sh
cat /haha/hosts
2. hostPath 存储卷
应用场景:
用于 Pod 内容器需要访问宿主机上的特定目录,通常在容器需要持久化数据或访问宿主机文件时使用。
特点:
- 数据持久性:无论 Pod 或容器是否删除,宿主机上的数据都不会丢失。
- 节点共享:不同 Pod 可以在同一节点上共享宿主机的目录,但无法跨节点共享数据。
资源清单示例:
apiVersion: v1
kind: Pod
metadata:
name: xiuxian-hostpath-es
labels:
apps: es7
spec:
nodeName: worker232
volumes:
- name: data
hostPath:
path: /oldboyedu/data/elasticsearch
containers:
- image: harbor.oldboyedu.com/oldboyedu-elasticstack/elasticsearch:7.17.16
name: xiuxian
env:
- name: discovery.type
value: single-node
- name: SCHOOL
value: oldboyedu
- name: Class
value: Linux92
volumeMounts:
- name: data
mountPath: /usr/share/elasticsearch/data
测试案例:
- 上传镜像并推送到 Harbor:
docker load -i oldboyedu-elasticsearch-7.17.16.tar.gz
docker tag harbor.oldboyedu.com/elasticstack-project/elasticsearch:7.17.16 harbor.oldboyedu.com/oldboyedu-elasticstack/elasticsearch:7.17.16
docker push harbor.oldboyedu.com/oldboyedu-elasticstack/elasticsearch:7.17.16
- 创建目录并授权:
mkdir -pv /oldboyedu/data/elasticsearch
chmod +777 /oldboyedu/data/elasticsearch
- 创建并应用资源清单:
kubectl apply -f 07-pods-volume-hostPath.yaml
- 验证服务:
curl 10.100.1.28:9200
curl -X PUT 10.100.1.28:9200/oldboyedu-linux92
curl -X PUT 10.100.1.28:9200/oldboyedu-xixi
curl -X PUT 10.100.1.28:9200/oldboyedu-haha
- 删除并重新创建 Pod:
kubectl delete -f 07-pods-volume-hostPath.yaml
kubectl apply -f 07-pods-volume-hostPath.yaml
kubectl get pods -o wide -l apps
3. NFS 存储卷
应用场景:
在多个节点上共享数据,适用于跨多个 Pod 和节点的数据持久化。
步骤:
- 在各个节点上安装 NFS:
apt -y install nfs-kernel-server
- 配置 NFS 服务端:
mkdir -pv /oldboyedu/data/nfs-server
tail -1 /etc/exports
/oldboyedu/data/nfs-server *(rw,no_root_squash)
systemctl restart nfs-server
- 编写资源清单:
apiVersion: v1
kind: Pod
metadata:
name: xiuxian-nfs-001
spec:
nodeName: worker232
volumes:
- name: data
nfs:
server: master231
path: /oldboyedu/data/nfs-server
containers:
- image: harbor.oldboyedu.com/oldboyedu-web/xiuxian:v2
name: xiuxian
volumeMounts:
- name: data
mountPath: /xixi
- 验证:
kubectl apply -f 09-pods-volumes-nfs.yaml
kubectl get pods -o wide -l apps=es7 --show-labels
curl 10.100.1.28:9200
总结:
- emptyDir 适用于同一 Pod 内多个容器间共享数据,数据随 Pod 生命周期。
- hostPath 用于容器访问宿主机上的目录,适合持久化数据,且不受容器生命周期影响。
- NFS 是一种跨节点共享数据的解决方案,适用于多个节点上的 Pod 共享数据。
-这里的nfs数据共享有点片面,在后续的文章中,我将详细讲解一篇关于nfs数据持久化的文章,请大家多多支持哦~~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!