2

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

我有一个nginx图像,我index.html在它的/usr/share/nginx/html/目录中有文件。当我想编排它Kubernetes并制作一个 pod 并使用PVfor 使其持久化时,它将挂载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

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

4

1 回答 1

0

这些数据是静态的(您将其构建到映像中),还是会发生变化(您想要一个卷来保存它)?当这个内容改变时你想要什么行为?

您在此处尝试指定的选项组合实际上没有意义。Kubernetes 没有做 Docker 所做的事情,如果你将一个空卷挂载到一个容器中,它会填充来自图像的匹配内容。即便如此,如果您进行更改并重建映像,普通的 Docker 和 Kubernetes 都不会修改卷;它仍然会有旧的内容。

我对 HTML 文件和相关资产树的直觉是,它可能更像是“类似数据”而不是“类似代码”,所以我会使用普通的 nginx 图像,将树复制到作为主机路径安装的目录中,并继续这样做。当此树更改时,您将在主机路径目录中进行更改。

于 2019-05-09T10:03:34.113 回答