我想要的是将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内容,但是当我使用pv
和VolumeMount
时,它将显示403错误
是否可以挂载hostpath
并将容器文件放在同一目录中?
答案 0 :(得分:0)
此数据是静态的(您将其构建到映像中)还是更改了(您要使卷保留该数据)?当内容更改时,您想要什么行为?
您要在此处指定的选项组合实际上没有任何意义。 Kubernetes不会做Docker要做的事情,如果您将一个空卷装载到一个容器中,则它会填充映像中的匹配内容。即使这样,如果您进行更改并重建映像,纯Docker和Kubernetes都不会修改该卷。它将仍然具有旧内容。
我对HTML文件和相关资产树的直觉是,它可能更像“数据”而不是“类似代码”,因此,我将使用普通的nginx图像,将树复制到要安装的目录中主机路径,然后按照这种方式进行。当该树更改时,您将在hostpath目录中进行更改。