如何使用hostPath将单个文件映射到kubernetes pod?

时间:2017-08-03 12:35:07

标签: kubernetes kvm minikube

我有一个由脚本生成的自己的nginx配置/home/ubuntu/workspace/web.conf。除了/etc/nginx/conf.d

之外,我更愿意将其置于default.conf之下

以下是nginx.yaml

apiVersion: v1
kind: Pod
metadata:
    name: nginx
spec:
    volumes:
      - name: webconf
        hostPath:
          path: /home/ubuntu/workspace/web.conf
    containers:
      - image:  nginx
        name: nginx
        ports:
          - containerPort: 18001
            protocol: TCP                               
        volumeMounts:
          - mountPath: /etc/nginx/conf.d/web.conf
            name: web

虽然它仅映射为文件夹

$ kubectl create -f nginx.yaml
pod "nginx" created
$ kubectl exec -it nginx -- bash
root@nginx:/app# ls -al /etc/nginx/conf.d/
total 12
drwxr-xr-x 1 root root 4096 Aug  3 12:27 .
drwxr-xr-x 1 root root 4096 Aug  3 11:46 ..
-rw-r--r-- 2 root root 1093 Jul 11 13:06 default.conf
drwxr-xr-x 2 root root    0 Aug  3 11:46 web.conf

适用于泊坞容器-v hostfile:containerfile

我怎样才能在kubernetes中这样做?

顺便说一句:我在0.21.0 Ubuntu 16.04 LTS上使用minikube kvm

2 个答案:

答案 0 :(得分:4)

尝试使用subPath上的volumeMounts键,如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: singlefile
spec:
  containers:
  - image: ubuntu
    name: singlefiletest
    command:
      - /bin/bash
      - -c
      - ls -la /singlefile/ && cat /singlefile/hosts
    volumeMounts:
    - mountPath: /singlefile/hosts
      name: etc
      subPath: hosts
  volumes:
  - name: etc
    hostPath:
      path: /etc

示例:

$ kubectl apply -f singlefile.yaml
pod "singlefile" created
$ kubectl logs singlefile
total 24
drwxr-xr-x. 2 root root 4096 Aug  3 12:50 .
drwxr-xr-x. 1 root root 4096 Aug  3 12:50 ..
-rw-r--r--. 1 root root 1213 Apr 26 21:25 hosts
# /etc/hosts: Local Host Database
#
# This file describes a number of aliases-to-address mappings for the for 
# local hosts that share this file.
...

答案 1 :(得分:0)

实际上它是由minikube使用的kvm引起的。

path: /home/ubuntu/workspace/web.conf

如果我登录minikube,它是vm中的文件夹。

$ ls -al /home/ubuntu/workspace # in minikube host
total 12
drwxrwxr-x 2 ubuntu ubuntu 4096 Aug  3 12:11 .
drwxrwxr-x 5 ubuntu ubuntu 4096 Aug  3 19:28 ..
-rw-rw-r-- 1 ubuntu ubuntu 1184 Aug  3 12:11 web.conf
$ minikube ssh
$ ls -al /home/ubuntu/workspace # in minikube vm
total 0
drwxr-xr-x 3 root root 0 Aug  3 19:41 .
drwxr-xr-x 4 root root 0 Aug  3 19:41 ..
drwxr-xr-x 2 root root 0 Aug  3 19:41 web.conf

我不确切地知道为什么kvm主机文件夹代表这样共享。

因此,我使用minikube mount命令,请参阅host_folder_mount.md,然后按预期工作。