为什么这个 curl 从 k8s pod 中容器内的 tmp 获取?

why does this curl fetch from tmp inside container in k8s pod?

此部署创建了 1 个 pod,其中包含 init 容器。容器将卷装入 tmp/web-content 并将 1 行 'check this out' 写入 index.html

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-init-container
  namespace: mars
spec:
  replicas: 1
  selector:
    matchLabels:
      id: test-init-container
  template:
    metadata:
      labels:
        id: test-init-container
    spec:
      volumes:
      - name: web-content
        emptyDir: {}
      initContainers:
      - name: init-con
        image: busybox:1.31.0
        command: ['sh', '-c' ,"echo 'check this out' > /tmp/web-content/index.html"]
        volumeMounts:
        - name: web-content
          mountPath: /tmp/web-content/
      containers:
      - image: nginx:1.17.3-alpine
        name: nginx
        volumeMounts:
        - name: web-content
          mountPath: /usr/share/nginx/html
        ports:
        - containerPort: 80

我启动临时 pod 以检查我是否可以使用 curl 看到此行 'check this out'。

k run tmp --restart=Never --rm -i --image=nginx:alpine -- curl 10.0.0.67

确实显示了该行。然而,curl 是如何知道进入哪个目录的呢? 我没有指定它应该明确地转到 /tmp/web-content

这是因为 mountPath:

The root directive indicates the actual path on your hard drive where this virtual host's assets (HTML, images, CSS, and so on) are located, ie /usr/share/nginx/html. The index setting tells Nginx what file or files to serve when it's asked to display a directory

当您 curl 到默认端口 80 时,curl 会返回 html 目录的内容。 .

只是@P 的详细说明....回答。

  • 以下是创建一个公共存储space“已标记”,名称为“web-content”
     ​volumes:
     ​- name: web-content
       ​emptyDir: {}
  • web-content 安装在名为 init-con 的初始容器上的 /tmp/web-content/ 位置,它正在 index.html
  • 中写入 check this out
      initContainers:
      - name: init-con
        image: busybox:1.31.0
        command: ['sh', '-c' ,"echo 'check this out' > /tmp/web-content/index.html"]
        volumeMounts:
        - name: web-content
          mountPath: /tmp/web-content/
  • 具有 index.html 的相同 web-content 卷正在作为目录 /usr/share/nginx/html 安装,因此 index.html 位置将被视为 /usr/share/nginx/html/index.html 。 (nginx 的默认登陆页面)对于容器 nginx 因此当你 curl 到它时它显示 check this out
      containers:
      - image: nginx:1.17.3-alpine
        name: nginx
        volumeMounts:
        - name: web-content
          mountPath: /usr/share/nginx/html