【问题标题】:Kubernetes puzzle: Populate environment variable from file (mounted volume)Kubernetes 谜题:从文件填充环境变量(挂载卷)
【发布时间】:2019-10-05 05:59:45
【问题描述】:

我有一个 Pod 或 Job yaml 规范文件(我可以编辑它),我想从我的本地机器启动它(例如,使用 kubectl create -f my_spec.yaml

规范声明了一个卷挂载。该卷中会有一个文件,我想将其用作环境变量的值。

我想使卷文件内容最终出现在环境变量中(无需我通过某种方式将文件“下载”到我的本地计算机并将其插入到规范中来跳过箍)。

附:如果您可以控制commandcontainer,那么很明显如何做到这一点。但是在启动任意图像的情况下,我无法控制command 属性,因为我不知道。

apiVersion: batch/v1
kind: Job
metadata:
  generateName: puzzle
spec:
  template:
    spec:
      containers:
      - name: main
        image: arbitrary-image
        env:
        - name: my_var
          valueFrom: <Contents of /mnt/my_var_value.txt>
        volumeMounts:
        - name: my-vol
          path: /mnt
      volumes:
      - name: my-vol
        persistentVolumeClaim:
          claimName: my-pvc

【问题讨论】:

  • 您是否考虑过接受“元作业”的自定义控制器,发现该内容,然后使用它从 PVC 中发现的信息创建 真实 Job?这将与您所说的仅自动化的步骤完全相同

标签: kubernetes volumes


【解决方案1】:

您可以使用 kubectl 无限循环创建部署,该循环将不断轮询卷并从中更新 configmap。之后,您可以将创建的 configmap 挂载到您的 pod 中。这有点 hacky,但会自动工作并更新您的 configmap。唯一的要求是 PV 必须是 ReadWriteMany 或 ReadOnlyMany(但在这种情况下,您可以将其以只读模式挂载到所有 pod)。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: cm-creator
  namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: cm-creator
rules:
- apiGroups: [""]
  resources: ["configmaps"]
  verbs: ["create", "update", "get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: cm-creator
  namespace: default
subjects:
- kind: User
  name: system:serviceaccount:default:cm-creator
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: cm-creator
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cm-creator
  namespace: default
  labels:
    app: cm-creator
spec:
  replicas: 1
  serviceAccountName: cm-creator
  selector:
    matchLabels:
      app: cm-creator
  template:
    metadata:
      labels:
        app: cm-creator
    spec:
      containers:
      - name: cm-creator
        image: bitnami/kubectl
        command:
        - /bin/bash
        - -c
        args:
        - while true; 
            kubectl create cm myconfig --from-file=my_var=/mnt/my_var_value.txt --dry-run -o yaml | kubectl apply -f-;
            sleep 60;
          done
        volumeMounts:
        - name: my-vol
          path: /mnt
          readOnly: true
      volumes:
      - name: my-vol
        persistentVolumeClaim:
          claimName: my-pvc

【讨论】:

    猜你喜欢
    • 2018-11-21
    • 2021-06-01
    • 2020-08-07
    • 1970-01-01
    • 2019-08-24
    • 2021-10-26
    • 2019-10-09
    • 2012-12-17
    • 1970-01-01
    相关资源
    最近更新 更多