我无法在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发布于 2021-02-14 07:01:11
如果在多节点系统上运行,请确保在部署到的节点上可以访问主机路径。
我还在使用helm图表设置一个主节点和一个工作节点时遇到了这个非常类似的问题。
Helm将所有pods部署到 worker 节点,即使部署是从主节点完成,也无法从工作节点访问hostPath。复制并验证员工节点上的主机路径,解决的是我的错误类型。
发布于 2021-02-02 16:11:22
当您使用默认的小库贝驱动程序启动docker时,您将在您的计算机中创建Docker VM。
背景
当您使用VM时,您的终端如下所示:
user@nameofyourhost:~$但是,如果您要ssh到您的Minikube VM终端,如下所示:
docker@minikube:~$ 在HostPath中,您可以获得以下信息:
hostPath卷将文件或目录从主机节点的文件系统挂载到Pod中。
在minikube中,当您使用hostPath时,节点不是您的machine,而是在minikube start期间创建的Minikube VM。
测试
由于我没有您的文件,所以我使用了nginx。请记住,您应该对要挂载的目录具有适当的权限。我使用了tmp,就像在nginx中一样,这个目录对每个人都有完全的访问权限。
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当您在VM上创建docker.jar时。
user@nameOfMyVM:~$ pwd
/home/user
user@nameOfMyVM:~$ ls
docker.jar当您将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 VM中创建这个文件时
$ 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上使用Minikube时,您需要记住,filesystem不是您的Machine,而是在minikube start期间创建的Minikube VM。
发布于 2021-11-11 13:22:40
如果您验证了Minikube (minikube ssh ls -la /home/user)上存在文件/目录,那么就不会像您期望的那样部署在 k8s上下文中。
使用kubectx --current检查当前使用的上下文是什么。
然后通过kubectx minikube或kubectl use-context minikube设置Minikube。
https://stackoverflow.com/questions/66011511
复制相似问题