如何在kubernetes上传递一个认为yaml的配置文件来创建新的复制控制器

时间:2015-12-09 11:57:40

标签: kubernetes

我正在尝试通过kubernetes .. ex在复制控制器创建时在nginx容器上传递配置文件(位于master上)。因为我们在Dockerfile中使用ADD命令...

2 个答案:

答案 0 :(得分:6)

在Kubernetes中实例化文件时,没有办法动态地将文件添加到pod规范中。

以下是一些替代方案(可能会解决您的问题):

  1. 将配置文件构建到容器中(使用docker ADD命令)。这样做的好处是它可以按照您已经熟悉的方式工作,但缺点是您无法再对容器进行参数化而不进行重建。

  2. 使用环境变量而不是配置文件。这可能需要对代码进行一些重构(或创建一个侧车容器,将环境变量转换为应用程序所需的配置文件)。

  3. 将配置文件放入volume。将此卷装入您的pod并从卷中读取配置文件。

  4. 使用secret。这不是秘密的预期用途,但秘密表现为容器内的文件,因此您可以对配置文件进行base64编码,将其作为保密程序存储在apiserver中,然后将应用程序指向机密文件的位置在您的pod中创建。

答案 1 :(得分:0)

我相信您也可以在容器初始化期间下载配置。 请参阅下面的示例,您可以下载config而不是index.html,但我不会将其用于密码等感性信息。

apiVersion: v1
kind: Pod
metadata:
  name: init-demo
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    volumeMounts:
    - name: workdir
      mountPath: /usr/share/nginx/html
  # These containers are run during pod initialization
  initContainers:
  - name: install
    image: busybox
    command:
    - wget
    - "-O"
    - "/work-dir/index.html"
    - http://kubernetes.io
    volumeMounts:
    - name: workdir
      mountPath: "/work-dir"
  dnsPolicy: Default
  volumes:
  - name: workdir
    emptyDir: {}