共享存储

共享存储

在 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
下一页