在将“ hostpath PV”安装到pod时保留pod目录文件

时间:2019-05-09 09:46:15

标签: docker kubernetes volume mount kubernetes-pvc

我想要的是将hostpath pv挂载到我的pod目录中,例如/usr/share/nginx/html/,并保留我在该目录中的文件。

我有一个nginx图像,我在index.html目录中有/usr/share/nginx/html/个文件。 当我想用Kubernetes编排它并制作一个pod并使用PV使其持久化时,它将hostpath挂载到容器/usr/share/nginx/html/目录中,然后index.html将消失。 这些是我的清单

Dockerfile

FROM nginx
WORKDIR /usr/share/nginx/html
COPY . /usr/share/nginx/html
EXPOSE 80
VOLUME /usr/share/nginx/html

在我的.目录中,我有index.html

pod.yaml

kind: Pod
apiVersion: v1
metadata:
  labels:
    app: nginx
  name: task-pv-pod23
spec:
  volumes:
    - name: task-pv-storage2
      persistentVolumeClaim:
       claimName: task-pv-claim2
  containers:
    - name: task-pv-container
      image: meysambbb/nginx:2
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - name: task-pv-storage2
          mountPath: /usr/share/nginx/html/

pv.yaml

kind: PersistentVolume
apiVersion: v1
metadata:
  name: task-pv-volume2
  labels:
    type: local
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadOnlyMany
  hostPath:
    path: "/mnt/2/data/"

pvc.yaml


kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: task-pv-claim2
spec:
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage: 3Gi

当我在没有VolumeMount的情况下运行pod时,在运行curl <POD_IP>时,它会显示index.html内容,但是当我使用pvVolumeMount时,它将显示403错误 是否可以挂载hostpath并将容器文件放在同一目录中?

1 个答案:

答案 0 :(得分:0)

此数据是静态的(您将其构建到映像中)还是更改了(您要使卷保留该数据)?当内容更改时,您想要什么行为?

您要在此处指定的选项组合实际上没有任何意义。 Kubernetes不会做Docker要做的事情,如果您将一个空卷装载到一个容器中,则它会填充映像中的匹配内容。即使这样,如果您进行更改并重建映像,纯Docker和Kubernetes都不会修改该卷。它将仍然具有旧内容。

我对HTML文件和相关资产树的直觉是,它可能更像“数据”而不是“类似代码”,因此,我将使用普通的nginx图像,将树复制到要安装的目录中主机路径,然后按照这种方式进行。当该树更改时,您将在hostpath目录中进行更改。