您是否尝试使用 kuberneters/configMap 将目录挂载到文件(或反之亦然)?
Are you trying to mount a directory onto a file (or vice-versa) with kuberneters/configMap?
我按照此 post Kubernetes configMap - only one file 将配置文件传递给部署,但出现错误。为什么?
配置文件config-prom-prometheus.yml
:
scrape_configs:
- job_name: job-leo-prometheus
kubernetes_sd_configs:
- role: endpoints
.yaml 文件prom-prometheus.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: prom-prometheus-deployment
spec:
selector:
matchLabels:
app: prom-prometheus
replicas: 1
template:
metadata:
labels:
app: prom-prometheus
spec:
containers:
- name: prom-prometheus
image: 127.0.0.1:30400/prom/prometheus
ports:
- name: port9090
containerPort: 9090
volumeMounts:
- name: volume-prometheus
mountPath: /etc/prometheus/prometheus.yml
subPath: prometheus.yml
volumes:
- name: volume-prometheus
configMap:
name: config-prom
---
apiVersion: v1
kind: Service
metadata:
name: prom-prometheus
spec:
type: NodePort
ports:
- name: port9090
protocol: TCP
port: 9090
targetPort: 9090
nodePort: 30090
selector:
app: prom-prometheus
命令:
kubectl create configmap config-prom --from-file=config-prom-prometheus.yml
kubectl -f prom-prometheus.yaml apply
结果:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 17s default-scheduler Successfully assigned prom-prometheus-deployment-66887dcdbf-bfqd4 to minikube
Normal SuccessfulMountVolume 17s kubelet, minikube MountVolume.SetUp succeeded for volume "default-token-ml6w5"
Normal SuccessfulMountVolume 17s kubelet, minikube MountVolume.SetUp succeeded for volume "volume-prometheus"
Warning Failed 9s kubelet, minikube Error: failed to start container "prom-prometheus": Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"rootfs_linux.go:58: mounting \\"/var/lib/kubelet/pods/ec99da92-e994-11e8-a578-08002742f2a3/volume-subpaths/volume-prometheus/prom-prometheus/0\\" to rootfs \\"/var/lib/docker/overlay2/12c7da1c07c55fe2ec5dff61e5c457fa8aeaa32d47232c28a1d7e127c4f81bf0/merged\\" at \\"/var/lib/docker/overlay2/12c7da1c07c55fe2ec5dff61e5c457fa8aeaa32d47232c28a1d7e127c4f81bf0/merged/etc/prometheus/prometheus.yml\\" caused \\"not a directory\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
Normal Pulling 7s (x2 over 13s) kubelet, minikube pulling image "127.0.0.1:30400/prom/prometheus"
Normal Pulled 7s (x2 over 13s) kubelet, minikube Successfully pulled image "127.0.0.1:30400/prom/prometheus"
Normal Created 6s (x2 over 10s) kubelet, minikube Created container
Warning Failed 4s kubelet, minikube Error: failed to start container "prom-prometheus": Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"rootfs_linux.go:58: mounting \\"/var/lib/kubelet/pods/ec99da92-e994-11e8-a578-08002742f2a3/volume-subpaths/volume-prometheus/prom-prometheus/0\\" to rootfs \\"/var/lib/docker/overlay2/7b07728ae4439e4d479386eab6b042948e2cb586c54171941f24d03352a7c8b4/merged\\" at \\"/var/lib/docker/overlay2/7b07728ae4439e4d479386eab6b042948e2cb586c54171941f24d03352a7c8b4/merged/etc/prometheus/prometheus.yml\\" caused \\"not a directory\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
这没有很好的记录,但根据我的经验,configmap yaml 的名称(在您的情况下为 config-prom-prometheus.yml)应该与 mountPath
和 subPath
相同Deployment
.
如果您使用 subPath: prometheus.yml
- 将 config-prom-prometheus.yml
重命名为 prometheus.yml
并重试。
这可能是对已接受答案的稍微改写,但让我感到困惑的一件事是挂载路径需要 完整 目标文件路径。
subPath
是源卷(例如配置映射)中的键。
mountPath
是文件的目标完整路径。
出于某种原因,我的大脑认为 mountPath
是目标目录,而 subPath
会推断出目标文件名。我所要做的就是在 mountPath
.
的末尾添加文件名
例如:
差:
- name: config-volume
mountPath: "/opt/config/path/"
subPath: "config-file.json"
好:
- name: config-volume
mountPath: "/opt/config/path/config-file.json"
subPath: "config-file.json"
我按照此 post Kubernetes configMap - only one file 将配置文件传递给部署,但出现错误。为什么?
配置文件config-prom-prometheus.yml
:
scrape_configs:
- job_name: job-leo-prometheus
kubernetes_sd_configs:
- role: endpoints
.yaml 文件prom-prometheus.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: prom-prometheus-deployment
spec:
selector:
matchLabels:
app: prom-prometheus
replicas: 1
template:
metadata:
labels:
app: prom-prometheus
spec:
containers:
- name: prom-prometheus
image: 127.0.0.1:30400/prom/prometheus
ports:
- name: port9090
containerPort: 9090
volumeMounts:
- name: volume-prometheus
mountPath: /etc/prometheus/prometheus.yml
subPath: prometheus.yml
volumes:
- name: volume-prometheus
configMap:
name: config-prom
---
apiVersion: v1
kind: Service
metadata:
name: prom-prometheus
spec:
type: NodePort
ports:
- name: port9090
protocol: TCP
port: 9090
targetPort: 9090
nodePort: 30090
selector:
app: prom-prometheus
命令:
kubectl create configmap config-prom --from-file=config-prom-prometheus.yml
kubectl -f prom-prometheus.yaml apply
结果:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 17s default-scheduler Successfully assigned prom-prometheus-deployment-66887dcdbf-bfqd4 to minikube
Normal SuccessfulMountVolume 17s kubelet, minikube MountVolume.SetUp succeeded for volume "default-token-ml6w5"
Normal SuccessfulMountVolume 17s kubelet, minikube MountVolume.SetUp succeeded for volume "volume-prometheus"
Warning Failed 9s kubelet, minikube Error: failed to start container "prom-prometheus": Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"rootfs_linux.go:58: mounting \\"/var/lib/kubelet/pods/ec99da92-e994-11e8-a578-08002742f2a3/volume-subpaths/volume-prometheus/prom-prometheus/0\\" to rootfs \\"/var/lib/docker/overlay2/12c7da1c07c55fe2ec5dff61e5c457fa8aeaa32d47232c28a1d7e127c4f81bf0/merged\\" at \\"/var/lib/docker/overlay2/12c7da1c07c55fe2ec5dff61e5c457fa8aeaa32d47232c28a1d7e127c4f81bf0/merged/etc/prometheus/prometheus.yml\\" caused \\"not a directory\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
Normal Pulling 7s (x2 over 13s) kubelet, minikube pulling image "127.0.0.1:30400/prom/prometheus"
Normal Pulled 7s (x2 over 13s) kubelet, minikube Successfully pulled image "127.0.0.1:30400/prom/prometheus"
Normal Created 6s (x2 over 10s) kubelet, minikube Created container
Warning Failed 4s kubelet, minikube Error: failed to start container "prom-prometheus": Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"rootfs_linux.go:58: mounting \\"/var/lib/kubelet/pods/ec99da92-e994-11e8-a578-08002742f2a3/volume-subpaths/volume-prometheus/prom-prometheus/0\\" to rootfs \\"/var/lib/docker/overlay2/7b07728ae4439e4d479386eab6b042948e2cb586c54171941f24d03352a7c8b4/merged\\" at \\"/var/lib/docker/overlay2/7b07728ae4439e4d479386eab6b042948e2cb586c54171941f24d03352a7c8b4/merged/etc/prometheus/prometheus.yml\\" caused \\"not a directory\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
这没有很好的记录,但根据我的经验,configmap yaml 的名称(在您的情况下为 config-prom-prometheus.yml)应该与 mountPath
和 subPath
相同Deployment
.
如果您使用 subPath: prometheus.yml
- 将 config-prom-prometheus.yml
重命名为 prometheus.yml
并重试。
这可能是对已接受答案的稍微改写,但让我感到困惑的一件事是挂载路径需要 完整 目标文件路径。
subPath
是源卷(例如配置映射)中的键。
mountPath
是文件的目标完整路径。
出于某种原因,我的大脑认为 mountPath
是目标目录,而 subPath
会推断出目标文件名。我所要做的就是在 mountPath
.
例如:
差:
- name: config-volume
mountPath: "/opt/config/path/"
subPath: "config-file.json"
好:
- name: config-volume
mountPath: "/opt/config/path/config-file.json"
subPath: "config-file.json"