k8s 之volume
Posted jiaoshou0416
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s 之volume相关的知识,希望对你有一定的参考价值。
volume 为容器提供外部存储,常见的类型有emptyDir 和 hostPath。
1.emptyDir
emptyDir类型的Volume在Pod分配到Node上时被创建,Kubernetes会在Node主机上自动分配一个目录,因此无需指定Node主机上对应的目录文件。 这个目录的初始内容为空,当Pod从Node上移除时,emptyDir中的数据会被永久删除
2.hostPath
hostPath的主要作用是将主机的文件或目录挂载给Pod的容器使用,使得容器能以较为良好的性能来存储数据。这种挂载方式比emptyDir更为持久,除非所在Node发生故障, 弊端是这样的挂载操作增加了Pod文件与Node主机文件的耦合,不利于统一管理。
emptyDir 实验
cat nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-volume
spec:
containers:
- name: proxy-nginx
image: nginx:1.14.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
volumeMounts:
- name: test-volume
mountPath: /usr/share/nginx/html
volumes:
- name: test-volume
emptyDir:
kubectl apply -f nginx.yaml
此时查看pod 启动在哪个node上
kubectl get pod -owide
去node2 节点过滤volume 名字
find / -name test-volume
如下图所示目录就是node 节点上的挂载目录
/var/lib/kubelet/pods/1b1f0b65-c588-46e3-a17c-429a8c2ac8b4/volumes/kubernetes.io~empty-dir/test-volume
到该目录下写入nginx 默认访问页:
[root@k8s-node2 ~]# cd /var/lib/kubelet/pods/1b1f0b65-c588-46e3-a17c-429a8c2ac8b4/volumes/kubernetes.io~empty-dir/test-volume
[root@k8s-node2 test-volume]# echo "volume test" >> index.htm
测试:curl 访问nginx,
发现已经访问到修改页
curl 10.244.2.23
删除pod ,去查看node2上的目录是否存在
发现目录node2上目录已经删除
hostPath 实验
[root@k8s-master1 test]# cat nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-volume
spec:
containers:
- name: proxy-nginx
image: nginx:1.14.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
volumeMounts:
- name: test-volume
mountPath: /usr/share/nginx/html
volumes:
- name: test-volume
hostPath:
path: /data/pod/volume1
type: Directory
备注:type: DirectoryOrCreate
如果类型是DirectoryOrCreate,则node上目录不存在是会自动创建,如果类型是Directory,如果没手动创建目录,则pod不会创建成功
volume 也可以结合configmap 来使用
实验:
configmap 替换nginx 默认访问页
/usr/share/nginx/html/index.html
configmap 文件
[root@k8s-master1 test]# cat config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: html
namespace: default
data:
index.html: |
hello
[root@k8s-master1 test]# cat nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-volume
spec:
containers:
- name: proxy-nginx
image: nginx:1.14.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
volumeMounts:
- name: config-volume
mountPath: /usr/share/nginx/html
volumes:
- name: config-volume
configMap:
name: html
curl 测试:
curl 10.244.2.26
edit configmap 再次测试:
发现容器中nginx访问页内容也自动更新(需要稍微等待几秒中,才会刷新)
以上是关于k8s 之volume的主要内容,如果未能解决你的问题,请参考以下文章