Kubernetes卷装载设置类型检查失败
我无法在kubernetes中部署应用程序,这是部署yamlKubernetes卷装载设置类型检查失败,kubernetes,Kubernetes,我无法在kubernetes中部署应用程序,这是部署yaml apiVersion: apps/v1 kind: Deployment metadata: name: test labels: app: test spec: replicas: 1 selector: matchLabels: app: test template: metadata: labels: app: test spec:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 1
selector:
matchLabels:
app: test
template:
metadata:
labels:
app: test
spec:
containers:
- name: test
image: openjdk:14
ports:
- containerPort: 8080
volumeMounts:
- name: testing
mountPath: "/usr/src/myapp/docker.jar"
workingDir: "/usr/src/myapp"
command: ["java"]
args: ["-jar", "docker.jar"]
volumes:
- hostPath:
path: /home/user/docker.jar
type: File
name: testing
这是我收到的错误,我可以验证该文件是否存在以及是否在该文件夹中。
我尝试删除该类型,但它只上载一个空目录,它似乎无法识别该文件是否存在
MountVolume.SetUp failed for volume "testing" : hostPath type check failed: /home/user/docker.jar is not a file
当您使用默认的docker
驱动程序启动时,您正在您的机器内创建docker-VM
背景
当您使用VM时,您的终端看起来像:
user@nameofyourhost:~$
但是如果您将ssh
连接到您的Minikube VM
终端,则如下所示:
docker@minikube:~$
在这方面,您有以下信息:
hostPath卷将文件或目录从主机节点的文件系统装载到Pod中
在minikube
中,当您使用hostPath
时,节点不是您的机器
,而是在minikube启动期间创建的minikube虚拟机
测验
因为我没有你的文件,所以我使用了nginx
。请记住,您应该对要装载的目录具有适当的权限。我在nginx
中使用了tmp
,每个人都可以完全访问该目录
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 1
selector:
matchLabels:
app: test
template:
metadata:
labels:
app: test
spec:
containers:
- name: test
image: nginx
ports:
- containerPort: 8080
volumeMounts:
- name: testing
mountPath: "/tmp/docker.jar" #this is path to the file
volumes:
- hostPath:
path: <path to docker.jar file> #should be on Minikube VM
type: File
name: testing
当您在hostpath.path
中切换到/home/user/docker.jar
时,它将返回警告
Warning FailedMount 4s (x4 over 7s) kubelet MountVolume.SetUp failed for volume "testing" : hostPath type check failed: /home/sekreta/docker.jar is not a file`
因为Kubernetes没有找到这个文件
但是当您将在Minikube虚拟机中创建此文件时
$ minikube ssh
docker@minikube:~$ pwd
/home/docker
docker@minikube:~$ ls
docker.jar
并将创建部署hostPath.path
更改为/home/docker/docker.jar
pod
$ kubectl get po
NAME READY STATUS RESTARTS AGE
test-c68d959c6-kb275 1/1 Running 0 13s
文件可以在YAML中设置的目录中找到,即tmp
$ kubectl exec -ti test-c68d959c6-kb275 -- bin/bash
root@test-c68d959c6-kb275:/# cd /tmp
root@test-c68d959c6-kb275:/tmp# ls
docker.jar
结论
当您在Minikube
上使用HostPath
时,您需要记住文件系统
不是您的机器
,而是Minikube虚拟机
,它是在Minikube启动
期间创建的,如果您在多节点系统上运行,确保主机路径在部署POD的节点上可访问
在使用helm图表设置一个主节点和一个工作节点时,我也遇到了类似的问题
Helm将所有POD部署到工作者节点,并且即使从主节点部署,也无法从工作者节点访问主机路径。
复制并验证工作节点上已解决的hostpath是否为我的错误类型。如果Kubernetes找不到此文件,您可能会遇到此问题。您使用的是minikube还是某些云环境?是的,我使用的是MinikubeId。您是在您的虚拟机中创建此文件,还是通过ssh连接到您的minikube虚拟机并安装在那里?不在虚拟机中,我现在非常感谢您的帮助!!!!
$ kubectl exec -ti test-c68d959c6-kb275 -- bin/bash
root@test-c68d959c6-kb275:/# cd /tmp
root@test-c68d959c6-kb275:/tmp# ls
docker.jar