将本地目录托管到Kubernetes Pod

时间:2019-05-16 18:05:25

标签: kubernetes persistent-volumes

我有一个单节点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"

我像这样启动我的吊舱:

kubectl apply -f ./create-distributor.yaml -n galahad-test

我将终端插入到我的新荚中

kubectl exec -it galahad-test-distributor -n galahad-test -- /bin/bash

我去了/ mnt,但没有/ mnt / galahad的内容。我在主机/ mnt / galahad文件夹中创建了一个新文件-未反映在pod中。我如何实现此功能以拥有主机路径文件/等。反映在豆荚里?是否可以通过我在这里尝试的某种简单方法(在没有创建单独的PersistentVolumes和PersistentVolumeRequests的情况下按每个pod定义它)来实现?

1 个答案:

答案 0 :(得分:2)

您的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的计算机上。