【问题标题】:kubernetes unable to see the mounted folder contentskubernetes 看不到挂载的文件夹内容
【发布时间】:2021-04-11 06:48:13
【问题描述】:

我正在尝试将本地文件夹挂载到容器中。每一步都很顺利,没有任何错误,但我仍然看不到安装。

我在/home/azureuser/mnt/host中创建了一个文件index.html

我的目标是将本地文件夹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 时。我对pod0ls -al /usr/share/nginx/html0 进行了炮击,它是empty。也没有到html0host 的符号链接

仅供参考,整个事情都是在 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>

【问题讨论】:

  • 您可能会发现创建具有所需内容的自定义图像更容易且更易于维护。尤其是如果您有多个主机或者您正在使用 Azure 托管的 Kubernetes,那么在每个节点上获取相同的内容将是一个持续的维护问题。
  • @DavidMaze 我还在学习阶段。
  • 我在我的 GKE 集群上尝试了您的 YAML,它可以正常工作。我想到的只有: 1. 您的 pod 是否部署在您拥有此文件夹 /home/azureuser/mnt/host 的节点上?如果集群中有 3 个节点。您仅在节点 2 上创建了 /mnt/host 文件夹,pod 部署在节点 1 或 3 上,它将为空,因为这些文件夹不在节点上。 Kubernetes 将在节点 1 或 3 上创建文件夹,它是空的。在 pod 中将没有文件,因为它已安装在没有您创建的此文件的节点上。
  • 第二件事可能是权限问题,但我想说第一个选项是这里的问题。如果您没有创建此文件夹和文件,则 Pod 已安排在节点上。请提供kubectl get po -o wide 的输出以及您在其中创建此文件夹的节点名称//home/azureuser/mnt/host 和文件。
  • @PjoterS 我正在使用 minikube,所以我没有多个节点的奢侈,只有一个节点。我将输出粘贴到我的问题中。因为我只使用一台机器,所以文件夹和 pod 都在同一台机器上。就权限而言,它有 _rwxrwxrwx 权限

标签: azure docker kubernetes containers minikube


【解决方案1】:

当您使用Minikube 时,它改变了我的观点。

背景

Using Minikube to Create a Cluster 文档中,您可以找到相关信息

Minikube 是一种轻量级的 Kubernetes 实现,它在您的本地机器上创建一个虚拟机并部署一个仅包含一个节点的简单集群。

你提到,你已经创建了文件

我在 /home/azureuser/mnt/host 中创建了一个文件 index.html

我猜你已经在Azure VM 中创建了它,但是当你使用Minikube 时,它应该在Azure VM 中的Minikube VM / Docker conainter 中创建。这取决于您使用的驱动程序。

测试

在我的测试中,我使用了docker driver,它创建了minikube container,并在其中存储了它的数据。

我已经创建了虚拟机并使用docker driver 启动了Minikube

创建后,您将登录到您的虚拟机(我已经部署了您的 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 时,您会自动在您的Azure VM 中创建新的Minikube VM/container。要输入Minikube VM/container,您必须使用minikube ssh 命令。如果您将 pod 配置为使用 Persistent VolumeHostPath,它将安装到 Minikube VM/container 而不是您的 Azure VM

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

【讨论】:

    猜你喜欢
    • 2021-11-21
    • 2018-05-19
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    相关资源
    最近更新 更多