首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不同的kubernetes清单中重用公共配置?

如何在不同的kubernetes清单中重用公共配置?
EN

Stack Overflow用户
提问于 2020-02-06 11:29:44
回答 2查看 1K关注 0票数 1

假设我有这个清单:

代码语言:javascript
复制
apiVersion: batch/v1
kind: Job
metadata:
  name: initialize-assets-fixtures
spec:
  template:
    spec:
      initContainers:
      - name: wait-for-minio
        image: bitnami/minio-client
        env:
          - name: MINIO_SERVER_ACCESS_KEY
            valueFrom:
              secretKeyRef:
                name: minio
                key: access-key
          - name: MINIO_SERVER_SECRET_KEY
            valueFrom:
              secretKeyRef:
                name: minio
                key: secret-key
          - name: MINIO_SERVER_HOST
            value: minio
          - name: MINIO_SERVER_PORT_NUMBER
            value: "9000"
          - name: MINIO_ALIAS
            value: minio
        command: 
          - /bin/sh
          - -c 
          - |
            mc config host add ${MINIO_ALIAS} http://${MINIO_SERVER_HOST}:${MINIO_SERVER_PORT_NUMBER} ${MINIO_SERVER_ACCESS_KEY} ${MINIO_SERVER_SECRET_KEY}
      containers:
      - name: initialize-assets-fixtures
        image: bitnami/minio
        env:
          - name: MINIO_SERVER_ACCESS_KEY
            valueFrom:
              secretKeyRef:
                name: minio
                key: access-key
          - name: MINIO_SERVER_SECRET_KEY
            valueFrom:
              secretKeyRef:
                name: minio
                key: secret-key
          - name: MINIO_SERVER_HOST
            value: minio
          - name: MINIO_SERVER_PORT_NUMBER
            value: "9000"
          - name: MINIO_ALIAS
            value: minio
        command:
          - /bin/sh
          - -c
          - |
            mc config host add ${MINIO_ALIAS} http://${MINIO_SERVER_HOST}:${MINIO_SERVER_PORT_NUMBER} ${MINIO_SERVER_ACCESS_KEY} ${MINIO_SERVER_SECRET_KEY}

            for category in `ls`; do
              for f in `ls $category/*` ; do
                mc cp $f ${MINIO_ALIAS}/$category/$(basename $f)
              done
            done
      restartPolicy: Never

你看,我这里有一个initContainer和一个container。在两个容器中,我都有相同的配置,即相同的env部分。

假设我有另一个Job清单,其中再次使用了完全相同的env部分。

这是许多重复的配置,我敢打赌我可以大大简化,但我不知道如何做。有什么暗示吗?有什么文件的链接吗?在谷歌搜索之后,我没能想出任何有用的东西。也许是库斯特里兹但我不确定。或者我对所有这些环境变量都做错了,但我认为我别无选择,这取决于我正在使用的服务(这里是minio,但我想对其他可能没有minio那样灵活的服务执行相同的操作)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-06 13:26:18

据我所知你有这三种选择

ConfigMap

您可以使用kubectl创建ConfigMap,也可以在kustomization.yaml中使用configmap生成器来创建ConfigMap。

数据源对应于ConfigMap中的键值对,其中

=文件名或在命令行中提供的密钥

=在命令行中提供的文件内容或文字值。

更多关于如何在pod 这里中使用它的信息。

Helm

@Matt在评论中提到,您可以使用helm

掌舵允许您使用值模板yaml。此外,一旦您进入其中,就有了创建和包含部分模板 - Matt的方法。

顺便说一句,helm有它自己创建的极小图,您可以看看它是如何在那里创建的。

Kustomize

很好地描述了这里这里,你怎么能在kustomize中做到这一点。

如果你还有什么问题请告诉我。

票数 2
EN

Stack Overflow用户

发布于 2020-02-08 06:04:08

因此,长话短说:为了解决我的问题,我首先为我的服务创建了一个新的图表,并将我所拥有的k8s清单转换为舵机模板。然后,我用以下代码完成了_helpers.tpl

代码语言:javascript
复制
{{/*
Common minio environment variables setup
*/}}
{{- define "minio.envvarsblock" -}}
- name: MINIO_SERVER_ACCESS_KEY
  valueFrom:
    secretKeyRef:
      name: {{ .Values.minio.fullname }}
      key: access-key
- name: MINIO_SERVER_SECRET_KEY
  valueFrom:
    secretKeyRef:
      name: {{ .Values.minio.fullname }}
      key: secret-key
- name: MINIO_SERVER_HOST
  value: {{ .Values.minio.fullname }}
- name: MINIO_SERVER_PORT_NUMBER
  value: {{ .Values.minio.server.port | quote }}
- name: MINIO_ALIAS
  value: {{ .Values.minio.client.alias }}
{{- end -}}

{{/*
Wait for minio init container definition
*/}}
{{- define "wait-for-minio" -}}
- name: wait-for-minio
  image: {{ .Values.minio.client.image }}
  env: {{- include "minio.envvarsblock" . | nindent 4 }}
  command:
    - /bin/sh
    - -c
    - |
      mc config host add ${MINIO_ALIAS} http://${MINIO_SERVER_HOST}:${MINIO_SERVER_PORT_NUMBER} ${MINIO_SERVER_ACCESS_KEY} ${MINIO_SERVER_SECRET_KEY}
{{- end -}}

上面的第一节允许在我的所有模板中重用env部分,第二节允许重用我在所有地方都使用的initContainer。然后,我能够像这样将这些部分模板注入到我的舵机模板中(例如我在我最初的文章中的例子):

代码语言:javascript
复制
{{- if .Values.fixtures.enabled -}}
apiVersion: batch/v1
kind: Job
metadata:
  name: {{ include "chart.fullname" . }}-init-fixtures
  labels:
{{ include "chart.labels" . | indent 4 }}
spec:
  template:
    spec:
      initContainers:
      {{- include "wait-for-minio" . | nindent 6 }}
      containers:
      - name: {{ .Chart.Name }}-init-fixtures
        image: {{ .Values.image }}
        env: {{- include "minio.envvarsblock" . | nindent 10 }}
        command:
          - /bin/sh
          - -c
          - |
            mc config host add ${MINIO_ALIAS} http://${MINIO_SERVER_HOST}:${MINIO_SERVER_PORT_NUMBER} ${MINIO_SERVER_ACCESS_KEY} ${MINIO_SERVER_SECRET_KEY}

            for category in `ls`; do
              for f in `ls $category/*` ; do
                mc cp $f ${MINIO_ALIAS}/$category/$(basename $f)
              done
            done
      restartPolicy: OnFailure
{{- end -}}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60093964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档