数据管理:
为了持久化保存数据 可以使用kubernetes volume
Volume的生命周期独立于容器
Pod中的容器有可能出现意外,而volume会被保留
Volume:
1.emptyDir
是主机的一个空目录,对于容器他是持久的,而对于pod则不是,删除pod,emptydir volume也会被删除
示例:
[root@k8smaster ~]# mkdir 7-22
[root@k8smaster ~]# cd 7-22/
[root@k8smaster 7-22]# mkdir emptydir
[root@k8smaster 7-22]# cd emptydir/
[root@k8smaster emptydir]# vim empty.yml
apiVersion: v1
kind: Pod
metadata:
name: empty-pod
spec:
containers:
-
image: busybox
name: test
volumeMounts:- mountPath: /aaa
name: empty
args: - /bin/sh
- -c
- echo “hahahahhahahhaha” >/aaa/aaa; sleep 300000000000
- mountPath: /aaa
-
image: busybox
name: test1
volumeMounts:- mountPath: /hello
name: empty
args: - /bin/sh
- -c
- cat /hello/aaa; sleep 3000000
- mountPath: /hello
volumes:
- name: empty
emptyDir: {}
在一个pod下创建了两个容器,两个容器都挂载了一个相同的volume,虽然在容器内的名字不一样,但是都是指向同一个volume。
查看pod:
[root@k8smaster emptydir]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
empty-pod 2/2 Running 0 2m8s 10.244.1.86 k8snode2
查看kubectl logs:
[root@k8smaster emptydir]# kubectl logs empty-pod test
[root@k8smaster emptydir]# kubectl logs empty-pod test1
hahahahhahahhaha
可以看到第一个的日志没有显示 因为我们只是往里面写入
第二个日志显示了我们在第一个容器写入的信息
去节点查看一下挂载的目录:
[root@k8snode2 ~]# docker inspect 3eda
查看第二个容器:
[root@k8snode2 ~]# docker inspect bf4d2
可以看到2个容器但是挂载的目标位置是一样的
我们查看一下这个目录
[root@k8snode2 default-token-vmm27]# cd /var/lib/kubelet/pods/43ba2f73-184a-49a1-a0ec-6b859c9f4cd8/volumesty-dir/emptyio~emp
[root@k8snode2 empty]# ls
aaa
[root@k8snode2 empty]# cat aaa
hahahahhahahhaha
删除pod 这个目录也就不存在了
[root@k8smaster emptydir]# kubectl delete pod empty-pod
pod “empty-pod” deleted
在节点上查看:
[root@k8snode2 empty]# cd …
cd: 获取当前目录时出错: getcwd: 无法访问父目录: 没有那个文件或目录
可以看到那个目录没有了
这个优点是能够方便的为pod中的容器提供共享存储,但是pod消失了,这个共享存储也就没了
2.hostpath volume:
是把主机的目录共享到pod里的容器上
我们来查看 一下:
[root@k8smaster emptydir]# kubectl edit pod --namespace=kube-system kube-apiserver-k8smaster
volumeMounts:
- mountPath: /etc/ssl/certs
name: ca-certs
readOn