首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes卷挂载设置类型检查失败

Kubernetes卷挂载设置类型检查失败
EN

Stack Overflow用户
提问于 2021-02-02 14:16:55
回答 3查看 1.1K关注 0票数 2

我无法在kubernetes中部署应用程序,这是部署yaml。

代码语言:javascript
复制
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

这是我收到的错误,我可以验证文件确实存在,并且在这个文件夹中。我试着删除该类型,但它只上传了一个空目录,似乎无法识别该文件的存在。

代码语言:javascript
复制
MountVolume.SetUp failed for volume "testing" : hostPath type check failed: /home/user/docker.jar is not a file
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-02-14 07:01:11

如果在多节点系统上运行,请确保在部署到的节点上可以访问主机路径。

我还在使用helm图表设置一个主节点和一个工作节点时遇到了这个非常类似的问题。

Helm将所有pods部署到 worker 节点,即使部署是从主节点完成,也无法从工作节点访问hostPath。复制并验证员工节点上的主机路径,解决的是我的错误类型。

票数 1
EN

Stack Overflow用户

发布于 2021-02-02 16:11:22

当您使用默认的小库贝驱动程序启动docker时,您将在您的计算机中创建Docker VM

背景

当您使用VM时,您的终端如下所示:

代码语言:javascript
复制
user@nameofyourhost:~$

但是,如果您要ssh到您的Minikube VM终端,如下所示:

代码语言:javascript
复制
docker@minikube:~$ 

HostPath中,您可以获得以下信息:

hostPath卷将文件或目录从主机节点的文件系统挂载到Pod中。

minikube中,当您使用hostPath时,节点不是您的machine,而是在minikube start期间创建的Minikube VM

测试

由于我没有您的文件,所以我使用了nginx。请记住,您应该对要挂载的目录具有适当的权限。我使用了tmp,就像在nginx中一样,这个目录对每个人都有完全的访问权限。

代码语言:javascript
复制
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时。

代码语言:javascript
复制
user@nameOfMyVM:~$ pwd
/home/user
user@nameOfMyVM:~$ ls
docker.jar

当您将hostpath.path压缩为/home/user/docker.jar时,它将返回警告

代码语言:javascript
复制
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中创建这个文件时

代码语言:javascript
复制
$ minikube ssh
docker@minikube:~$ pwd
/home/docker
docker@minikube:~$ ls
docker.jar

并将创建部署hostPath.path/home/docker/docker.jar pod的更改。

代码语言:javascript
复制
$ kubectl get po
NAME                   READY   STATUS    RESTARTS   AGE
test-c68d959c6-kb275   1/1     Running   0          13s

文件可以在YAML中的目录集中找到,即tmp

代码语言:javascript
复制
$ 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

票数 3
EN

Stack Overflow用户

发布于 2021-11-11 13:22:40

如果您验证了Minikube (minikube ssh ls -la /home/user)上存在文件/目录,那么就不会像您期望的那样部署在 k8s上下文中。

使用kubectx --current检查当前使用的上下文是什么。

然后通过kubectx minikubekubectl use-context minikube设置Minikube。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66011511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档