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数据持久化的文章,请大家多多支持哦~~~
标签:oldboyedu,name,数据共享,nfs,xiuxian,Pod,data From: https://www.cnblogs.com/leojazz/p/18676614