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

k8s

去node2 节点过滤volume 名字

find / -name test-volume

如下图所示目录就是node 节点上的挂载目录

/var/lib/kubelet/pods/1b1f0b65-c588-46e3-a17c-429a8c2ac8b4/volumes/kubernetes.io~empty-dir/test-volume

k8s

到该目录下写入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

k8s

测试:curl 访问nginx,

发现已经访问到修改页

curl 10.244.2.23

k8s

删除pod ,去查看node2上的目录是否存在

k8s

k8s

发现目录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

k8s

edit configmap 再次测试:

k8s

k8s

发现容器中nginx访问页内容也自动更新(需要稍微等待几秒中,才会刷新)

k8s


以上是关于k8s 之volume的主要内容,如果未能解决你的问题,请参考以下文章

K8s之deploy挂载Volumes

19,k8s 之 Volume

k8s 之volume

Kubernetes(k8s)之Volume(卷)

Kubernetes K8S之存储Volume详解

k8s1.5.4挂载volume之glusterfs