为什么需要数据卷
容器中的文件在磁盘上是临时存在,这给容器中运行一些重要的程序的时候有影响
- 问题1: 当容器升级或者崩溃的时候,kubelet会重建容器,容器内的文件丢失
- 问题2: 一个容器中运行多个容器,可能需要文件共享
k8s的卷(volumn)这一抽象概念可以解决这个问题
常用的数据卷类型
- 节点本地 hostPath emptyDir
- 网络 NFS Ceph ClusterFs
- 公有云 AWS EBS
- k8s资源 configMap Secret
emptyDir卷类型
emptyDir是一个临时存储卷,与pod的生命周期绑在一起,删除pod,emptyDir卷也会被随之删除。
应用场景: pod容器之间数据共享
apiVersion: v1
kind: Pod
metadata:
name: test
spec:
containers:
- name: write
image: centos
command: ["bash","-c","for i in {1..100};do echo $i >> /data/hello;sleep 1;done"]
volumeMounts:
- name: data
mountPath: /data
- name: read
image: centos
command: ["bash","-c","tail -f /data/hello"]
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
emptyDir: {}
寻找emptyDir在宿主机上挂载的位置的方式:
1、查看pod分布在哪个节点上
# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test 2/2 Running 0 64s 10.244.169.141 k8s-node2
2、到相应的节点查看docker 容器
# docker ps -a |grep "podName"
3、查看挂载目录
hostPath卷类型
hostPath卷:挂载的是node节点(pod所在节点)上的文件或目录到容器中
应用场景:pod中容器需要访问宿主机上的文件
缺点:挂载的是pod所在节点上的目录或者文件,如果节点挂了,pod在其他节点上创建,那么写的内容会丢失
apiVersion: v1
kind: Pod
metadata:
name: test
spec:
containers:
- name: write
image: centos
command: ["bash","-c","for i in {1..100};do echo $i >> /data/hello;sleep 1;done"]
volumeMounts:
- name: data
mountPath: /data
- name: read
image: centos
command: ["bash","-c","tail -f /data/hello"]
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
hostPath:
path: /tmp # 将宿主机的/tmp目录挂载到容器中的/data目录下
type: Directory
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net