目录
由于k8s中Pod的生命周期短暂,会被频繁的创建和销毁,容器的重启或迁移也会导致数据丢失,而有状态应用需求,如数据库、消息队列等需要持久化存储,确保数据在容器生命周期之外依然存在,方便用户调用,为了实现持久化保存数据,k8s引入Volume实现同一个Pod中的不同容器的数据共享和数据持久化,即使容器重启或迁移等等都不会导致Volume数据丢失。
常见Volume类型:
-
简单基本存储:EmptyDir、HostPath、NFS
-
高级核心存储:PV、PVC
-
配置存储:ConfigMap、Secret
一、简单基本存储
1、EmptyDir
1.1概念
EmptyDir是在Pod被分配到Node时创建的,初始内容为空,无法指定宿主机对应的文件目录,一个EmptyDir相当于一个Host的空目录,当Pod销毁时,EmptyDir的数据也会被永久删除,即EmptyDir只在Pod的生命周期内有效。
1.2作用
由于EmptyDir只在Pod的生命周期内有效,故不适合做持久化的数据存储,只适合做临时存储:
-
作为临时空间,无须长久保留
-
为同一个Pod内的不同容器实现数据共享
1.3配置文件
apiVersion: v1
kind: Pod
metadata:
name: nginx-busybox-log
namespace: default
spec:
containers:
# ---------- Nginx ----------
- name: nginx
image: nginx:1.24.0 # 体积小、镜像拉取快
ports:
- containerPort: 80
volumeMounts:
- name: logs-volume
mountPath: /var/log/nginx # Nginx 默认日志目录
# ---------- BusyBox ----------
- name: busybox
image: busybox:1.36.1 # 推荐稳定版本
command: ["/bin/sh","-c","tail -f /logs/access.log"] # 初始命令,动态读取指定文件内容
volumeMounts:
- name: logs-volume
mountPath: /logs # BusyBox 内查看目录
# ---------- 共享卷 ----------
volumes:
- name: logs-volume # 共享卷名称
emptyDir: {} # 数据卷类型,Pod 级临时目录,两容器共享
1.4测试
最终实现:每当我访问nginx,nginx会将访问的日志信息存储到/var/log/nginx目录下,而busybox可通过命令查看是否有日志生成,即实现同一个Pod中两个不同容器之间通过数据卷emptydir进行了数据共享。
# 创建 Pod
# 记住要在yaml文件目录下
kubectl create -f nginx-busybox-emptydir.yaml
# 查看是否创建 Pod 成功
kubectl get po nginx-busybox-log -o wide
# 访问 nginx
kubectl exec nginx-busybox-log -- curl http://localhost
#-----------------双开终端--------------------------
# 双开终端方便查看指定容器的标准输出
# kubectl logs -f <你创建的数据卷名称> -n <你创建数据卷指定的命名空间> -c <指定容器>
kubectl logs -f nginx-b

最低0.47元/天 解锁文章
1499

被折叠的 条评论
为什么被折叠?



