随笔 - 331  文章 - 0  评论 - 5  阅读 - 5050

数据共享

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

测试案例

  1. 创建并应用资源清单:
kubectl apply -f 06-pods-volume-emptyDir.yaml
  1. 验证容器中的数据共享:
kubectl exec xiuxian-emptydir-002 -c xiuxian -- ls -l /xixi
kubectl exec xiuxian-emptydir-002 -c alpine -- ls -l /haha
  1. 测试容器间的数据共享:
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

测试案例

  1. 上传镜像并推送到 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
  1. 创建目录并授权:
mkdir -pv /oldboyedu/data/elasticsearch
chmod +777 /oldboyedu/data/elasticsearch
  1. 创建并应用资源清单:
kubectl apply -f 07-pods-volume-hostPath.yaml
  1. 验证服务:
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
  1. 删除并重新创建 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 和节点的数据持久化。

步骤

  1. 在各个节点上安装 NFS:
apt -y install nfs-kernel-server
  1. 配置 NFS 服务端:
mkdir -pv /oldboyedu/data/nfs-server
tail -1 /etc/exports
/oldboyedu/data/nfs-server *(rw,no_root_squash)
systemctl restart nfs-server
  1. 编写资源清单:
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
  1. 验证:
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数据持久化的文章,请大家多多支持哦~~~

posted on   Leo-Yide  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示