如何解决kubernetes 无法看到挂载的文件夹内容 背景测试结论
我正在尝试将本地文件夹挂载到容器。每一步都很顺利,没有任何错误,但我仍然看不到安装。
我在 index.html
中创建了一个文件 /home/azureuser/mnt/host
我的目标是将本地文件夹 host
挂载到容器中的 /usr/share/nginx/html0
。
pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
capacity:
storage: 100Mi
hostPath:
path: "/home/azureuser/mnt/host"
pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Mi
pod.yaml
kind: Pod
apiVersion: v1
metadata:
name: pod0
labels:
name: pod
spec:
volumes:
- name: mount
persistentVolumeClaim:
claimName: pvc
containers:
- name: container
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: mount
mountPath: /usr/share/nginx/html0
resources:
limits:
memory: "128Mi"
cpu: "250m"
按出现的顺序应用三个yaml。我炮轰 pod0
,ls -al /usr/share/nginx/html0
它是 empty
。也没有到 html0
到 host
仅供参考,整个事情都是在 azure 中发生的,它是 minikube
kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod0 1/1 Running 0 26h 172.17.0.4 minikube <none> <none>
解决方法
当您使用 Minikube 时,它改变了我的观点。
背景
在 Using Minikube to Create a Cluster 文档中,您可以找到信息,
Minikube 是一种轻量级的 Kubernetes 实现,它在您的本地机器上创建一个 VM,并部署一个仅包含一个节点的简单集群。
你提到,你已经创建了文件
我在 /home/azureuser/mnt/host 中创建了一个 index.html 文件
我猜您已经在 Azure VM
中创建了它,但是当您使用 Minikube
时,它应该在您的 Minikube VM / Docker conainter
中的 Azure VM
中创建。这取决于您使用的驱动程序。
测试
在我的测试中,我使用了 docker driver
,它创建了 minikube container
来存储数据。
我已创建 VM 并使用 Minikube
启动 docker driver
。
创建后,您将登录到您的 VM(我已经部署了您的 YAML)。
user@minikube-new:~$ ls
minikube-linux-amd64 po.yaml pv.yaml pvc.yaml
user@minikube-new:~$ kubectl get po
NAME READY STATUS RESTARTS AGE
pod0 1/1 Running 0 26s
应用您的 YAML 后应该有 /home/azureuser/mnt/host
但它不在那里。
user@minikube-new:~$ pwd
/home/user
Minikube 在启动期间,在您的 VM 内创建自己的 docker 容器。您可以使用 minikube ssh
输入它。
$ minikube ssh
Last login: Thu Jan 7 09:16:46 2021 from 192.168.49.1
docker@minikube:~$ pwd
/home/docker
docker@minikube:~$ cd ..
docker@minikube:/home$ ls
azureuser docker
docker@minikube:/home$ cd azureuser/mnt/host/
docker@minikube:/home/azureuser/mnt/host$ touch index.html
touch: cannot touch 'index.html': Permission denied
我已将权限更改为 host
目录 (chmod
) 并创建文件。
docker@minikube:/home/azureuser/mnt/host$ touch index.thml
docker@minikube:/home/azureuser/mnt/host$ echo "This is test message from Minikube MV" > index.html
docker@minikube:/home/azureuser/mnt/host$ cat index.thml
This is test message from Minikube MV
docker@minikube:/home/azureuser/mnt/host$ exit
logout
user@minikube-new:~$
现在,如果您检查 pod /usr/share/nginx/html0
文件夹,您会发现 index.html
。
user@minikube-new:~$ kubectl exec -ti pod0 -- bash
root@pod0:/# cd /usr/share/nginx/html0
root@pod0:/usr/share/nginx/html0# ls
index.thml
root@pod0:/usr/share/nginx/html0# cat index.thml
This is test message from Minikube MV
结论
当您创建 Minikube
时,您会自动在您的 Minikube VM/container
内创建新的 Azure VM
。要输入 Minikube VM/container
,您必须使用 minikube ssh
命令。如果您将 pod 配置为将 Persistent Volume
与 HostPath 一起使用,它将安装到 Minikube VM/container
而不是您的 Azure VM
。
hostPath 卷将文件或目录从主机节点的文件系统挂载到您的 Pod。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。