共享存储
共享存储
在 K8s 中,您可以使用共享的 K8s 卷作为在 Pod 中的容器之间共享数据的简单有效的方法。在大多数情况下,使用主机上与 Pod 中所有容器共享的目录就足够了。K8s Volumes 使数据能够在容器重启后幸存下来。它的寿命与 Pod 相同。这意味着只要 Pod 存在,它就一直存在。如果出于任何原因删除了该 Pod,即使创建了相同的替换,共享卷也将被破坏并重新创建。
具有共享卷的多容器 Pod 的标准用例是:一个容器写入共享目录(日志或其他文件),而另一个容器从共享目录读取。例:
apiVersion: v1
kind: Pod
metadata:
name: mc1
spec:
volumes:
- name: html
emptyDir: {}
containers:
- name: 1st
image: nginx
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
- name: 2nd
image: debian
volumeMounts:
- name: html
mountPath: /html
command: ["/bin/sh", "-c"]
args:
- while true; do
date >> /html/index.html;
sleep 1;
done
在此示例中,我们定义了一个名为 html 的卷,其类型为 emptyDir:该卷是在将 Pod 分配给节点时首次创建的,并且只要该 Pod 在该节点上运行就存在。顾名思义,它最初是空的。第一个容器运行 nginx 服务器,并将共享卷安装到目录 /usr/share/nginx/html
。第二个容器使用 Debian 映像,并将共享卷安装到目录/ html。第二个容器每秒将当前日期和时间添加到共享卷中的 index.html 中。Nginx 服务器读取此文件,并将其发送到 Web 服务器的每个 HTTP 请求给用户。
您可以通过暴露 Nginx 端口并使用浏览器访问 Pod 来检查 Pod 是否正常工作。直接在容器中检查共享目录的另一种方法:
$ kubectl exec mc1 -c 1st -- /bin/cat /usr/share/nginx/html/index.html
...
Fri Aug 25 18:36:06 UTC 2017
$ kubectl exec mc1 -c 2nd -- /bin/cat /html/index.html
...
Fri Aug 25 18:36:06 UTC 2017
Fri Aug 25 18:36:07 UTC 2017