我无法在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:
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
型
3条答案
按热度按时间3b6akqbq1#
当您使用默认的
docker
驱动程序启动minikube时,您正在计算机内创建Docker VM
。背景
当您使用VM时,您的终端看起来像:
字符串
但如果你将
ssh
到你的Minikube VM
终端看起来像下面:型
在HostPath中,您可以获得以下信息:
hostPath卷将文件或目录从主机节点的文件系统挂载到Pod中。
在
minikube
中,当您使用hostPath
时,节点被认为不是您的machine
,而是在minikube start
期间创建的Minikube VM
测试
因为我没有你的文件,我用了
nginx
。请记住,你应该有适当的权限,你要挂载的目录。我用了tmp
,因为在nginx
这个目录有完全访问权的人。型
在VM上创建
docker.jar
时。型
当您将
hostpath.path
更改为/home/user/docker.jar
时,它将返回警告型
因为Kubernetes没有找到这个文件。
但是,当您在
Minikube VM
中创建此文件时,型
并将创建部署
hostPath.path
到/home/docker/docker.jar
pod的更改。型
文件可以在YAML中设置的目录中找到,即
tmp
。型
总结
当您在
Minikube
上使用HostPath
时,您需要记住filesystem
不是您的Machine
,而是在minikube start
期间创建的Minikube VM
。iklwldmw2#
如果您在多节点系统上运行,请确保在pod部署到的node上可以访问hostpath。
我在使用helm chart设置一个主节点和一个工作节点时也遇到了这个非常类似的问题。
Helm将所有Pod部署到worker节点,即使从master节点完成部署,也无法从worker节点访问hostPath。复制并验证worker节点上的hostpath解决了我的错误类型。
1dkrff033#
如果您验证了Minikube VM(
minikube ssh ls -la /home/user
)上存在该文件/目录,则您没有像预期的那样在minikube
k8s上下文上部署。使用
kubectx --current
检查您当前使用的上下文。然后通过
kubectx minikube
或kubectl use-context minikube
设置Minikube。