【发布时间】: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 时。我对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>
【问题讨论】:
-
您可能会发现创建具有所需内容的自定义图像更容易且更易于维护。尤其是如果您有多个主机或者您正在使用 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