容器内的目录和宿主机目录进行挂载。
容器在系统上的生命周期是短暂的。
k8s用控制器创建的pod。delete相当于重启。容器的状态也会恢复到初始状态。一旦恢复到初始状态,所有的后天编辑的文件都会消失
容器和节点之间创建一个可以持久化保存容器内文件的存储卷。即使容器被摧毁、删除、重启,节点上存储卷的数据依旧存在。后续也可以继续使用。可以继续讲容器内的目录和宿主机挂载。保存的数据可以继续使用。
存储卷的方式
-
emptyDir:
-
hostPath:
-
NFS:
emptyDir
emptyDir:容器内部共享存储卷。在k8s中表示一个pod当中的多个容器共享一个存储卷目录。
emptyDir卷可以使pod当中的容器在这个存储卷上读取和写入。
emptyDir不能挂载到节点。随着pod生命周期结束。emptyDir也会结束。数据不会保留
主要用于容器内部共享数据
实验举例:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx1
name: nginx1
spec:
replicas: 3
selector:
matchLabels:
app: nginx1
template:
metadata:
labels:
app: nginx1
spec:
containers:
- image: nginx:1.22
name: nginx1
volumeMounts:
#开始创建挂载卷
- name: html
#定义存储卷的名称
mountPath: /usr/share/nginx/html
#mountPath:定义容器内的挂载点。或者其他容器的共享目录
- image: nginx:1.22
name: nginx2
volumeMounts:
- name: html
#需要和上面定义的名称保持一致
mountPath: /data
#引用上一个挂载的名称。
#表示我将使用/data目录和/usr/share/nginx/html这个目录挂载
command: ["/bin/bash", "-c", "while true; do echo $(data) >> /data/index.html; sleep 2; done"]
volumes:
- name: html
emptyDir: {}
hostPath
hostPath:将容器内的挂载点和节点上的目录进行挂载。hostPath可以实现数据持久。node节点被销毁,那么数据也会丢失。
污点设置为NoExecute时节点上的pod会被驱逐。文件数据在不在?
文件数据肯定在的。只是pod节点被销毁了。并不是node节点被销毁。所有数据还保留在节点上。
只有基于控制器创建的pod会在其他节点重新部署。他又会在其他节点生成一个新的存储卷。数据依然可以持久化。
驱逐不会使文件数据丢失
实验举例:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx1
name: nginx1
spec:
replicas: 3
selector:
matchLabels:
app: nginx1
template:
metadata:
labels:
app: nginx1
spec:
containers:
- image: nginx:1.22
name: nginx1
volumeMounts:
#开始创建挂载卷
- name: html
#定义存储卷的名称
mountPath: /usr/share/nginx/html
#mountPath:定义容器内的挂载点。或者其他容器的共享目录
- image: nginx:1.22
name: nginx2
volumeMounts:
- name: html
#需要和上面定义的名称保持一致
mountPath: /data
#引用上一个挂载的名称。
#表示我将使用/data目录和/usr/share/nginx/ht