我正在尝试将hostPath配置为kubernetes中的卷。我已经登录到VM服务器,我通常使用kubernetes命令,例如kubectl。
以下是pod yaml:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: helloworldanilhostpath
spec:
replicas: 1
template:
metadata:
labels:
run: helloworldanilhostpath
spec:
volumes:
- name: task-pv-storage
hostPath:
path: /home/openapianil/samplePV
type: Directory
containers:
- name: helloworldv1
image: ***/helloworldv1:v1
ports:
- containerPort: 9123
volumeMounts:
- name: task-pv-storage
mountPath: /mnt/sample
在VM服务器中,我创建了“/ home / openapianil / samplePV”文件夹,其中有一个文件。它有一个sample.txt文件。
一旦我尝试创建此部署。它不会发生错误 -
警告FailedMount 28s(x7超过59s)kubelet,aks-nodepool1-39499429-1卷“task-pv-storage”的MountVolume.SetUp失败:hostPath类型检查失败:/ home / openapianil / samplePV不是目录。
有谁可以帮助我理解这里的问题。
答案 0 :(得分:4)
hostPath
类型卷指的是计划运行Pod的节点(VM /机器)上的目录(在这种情况下为aks-nodepool1-39499429-1
)。因此,您至少需要在该节点上创建此目录。
要确保在特定节点上一致地安排Pod,您需要在PodTemplate中设置spec.nodeSelector
:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: helloworldanilhostpath
spec:
replicas: 1
template:
metadata:
labels:
run: helloworldanilhostpath
spec:
nodeSelector:
kubernetes.io/hostname: aks-nodepool1-39499429-1
volumes:
- name: task-pv-storage
hostPath:
path: /home/openapianil/samplePV
type: Directory
containers:
- name: helloworldv1
image: ***/helloworldv1:v1
ports:
- containerPort: 9123
volumeMounts:
- name: task-pv-storage
mountPath: /mnt/sample
在大多数情况下,使用这种类型的音量是个坏主意;有一些特殊的用例,但是你的机会不是他们的一个!
如果由于某种原因需要本地存储,那么稍微好一点的解决方案是使用local
PersistentVolumes。