将本地目录托管到 Kubernetes Pod
Hosting local directory to Kubernetes Pod
我有一个单节点 Kubernetes 集群。我希望我创建的 pod 能够访问本地计算机(集群的主机)上的 /mnt/galahad。
这是我的 Kubernetes 配置 yaml:
apiVersion: v1
kind: Pod
metadata:
name: galahad-test-distributor
namespace: galahad-test
spec:
volumes:
- name: place-for-stuff
hostPath:
path: /mnt/galahad
containers:
- name: galahad-test-distributor
image: vergilkilla/distributor:v9
volumeMounts:
- name: place-for-stuff
mountPath: /mnt
resources:
limits:
memory: "200Mi"
requests:
memory: "100Mi"
我是这样启动我的 pod 的:
kubectl apply -f ./create-distributor.yaml -n galahad-test
我在新制作的 pod 中安装了一个终端:
kubectl exec -it galahad-test-distributor -n galahad-test -- /bin/bash
我转到我的 pod 中的 /mnt,它没有来自 /mnt/galahad 的任何内容。我在主机 /mnt/galahad 文件夹中创建了一个新文件 - 没有反映在 pod 中。我如何实现此功能以拥有主机路径 files/etc。反映在豆荚里?这是否可能以我在这里尝试的有点直接的方式实现(在不创建单独的 PersistentVolumes 和 PersistentVolumeRequests 的情况下为每个 pod 定义它)?
你的 yaml 文件看起来不错。
使用此配置:
apiVersion: v1
kind: Pod
metadata:
name: galahad-test-distributor
namespace: galahad-test
spec:
volumes:
- name: place-for-stuff
hostPath:
path: /mnt/galahad
containers:
- name: galahad-test-distributor
image: busybox
args: [/bin/sh, -c,
'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']
volumeMounts:
- name: place-for-stuff
mountPath: /mnt
resources:
limits:
memory: "200Mi"
requests:
memory: "100Mi"
我 运行 这一切都按预期工作:
>>> kubectl apply -f create-distributor.yaml # side node: you don't need
# to specify the namespace here
# since it's inside the yaml file
pod/galahad-test-distributor created
>>> touch /mnt/galahad/file
>>> kubectl -n galahad-test exec galahad-test-distributor ls /mnt
file
您确定将文件添加到正确的位置吗?例如,如果您 运行 您的集群在 VM(例如 minikube)中,请确保将文件添加到 VM 中,而不是在托管 VM 的机器上。
我有一个单节点 Kubernetes 集群。我希望我创建的 pod 能够访问本地计算机(集群的主机)上的 /mnt/galahad。
这是我的 Kubernetes 配置 yaml:
apiVersion: v1
kind: Pod
metadata:
name: galahad-test-distributor
namespace: galahad-test
spec:
volumes:
- name: place-for-stuff
hostPath:
path: /mnt/galahad
containers:
- name: galahad-test-distributor
image: vergilkilla/distributor:v9
volumeMounts:
- name: place-for-stuff
mountPath: /mnt
resources:
limits:
memory: "200Mi"
requests:
memory: "100Mi"
我是这样启动我的 pod 的:
kubectl apply -f ./create-distributor.yaml -n galahad-test
我在新制作的 pod 中安装了一个终端:
kubectl exec -it galahad-test-distributor -n galahad-test -- /bin/bash
我转到我的 pod 中的 /mnt,它没有来自 /mnt/galahad 的任何内容。我在主机 /mnt/galahad 文件夹中创建了一个新文件 - 没有反映在 pod 中。我如何实现此功能以拥有主机路径 files/etc。反映在豆荚里?这是否可能以我在这里尝试的有点直接的方式实现(在不创建单独的 PersistentVolumes 和 PersistentVolumeRequests 的情况下为每个 pod 定义它)?
你的 yaml 文件看起来不错。
使用此配置:
apiVersion: v1
kind: Pod
metadata:
name: galahad-test-distributor
namespace: galahad-test
spec:
volumes:
- name: place-for-stuff
hostPath:
path: /mnt/galahad
containers:
- name: galahad-test-distributor
image: busybox
args: [/bin/sh, -c,
'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']
volumeMounts:
- name: place-for-stuff
mountPath: /mnt
resources:
limits:
memory: "200Mi"
requests:
memory: "100Mi"
我 运行 这一切都按预期工作:
>>> kubectl apply -f create-distributor.yaml # side node: you don't need
# to specify the namespace here
# since it's inside the yaml file
pod/galahad-test-distributor created
>>> touch /mnt/galahad/file
>>> kubectl -n galahad-test exec galahad-test-distributor ls /mnt
file
您确定将文件添加到正确的位置吗?例如,如果您 运行 您的集群在 VM(例如 minikube)中,请确保将文件添加到 VM 中,而不是在托管 VM 的机器上。