替换配置文件中变量的掌舵秘密

时间:2021-07-09 13:47:31

标签: kubernetes kubernetes-helm

我正在尝试使用 helm 在 kubernetes 中部署一个 rest api 应用程序。一些配置文件中包含凭据,我想在部署期间用 Kubernetes 机密替换 helm 模板中的变量。

有没有人有一个指向我可以探索的文档的指针?

2 个答案:

答案 0 :(得分:1)

如果您希望直接将 ENV 部署到部署文件,您也可以这样做,前提是环境变量很少,但是创建秘密并将它们全部注入的最佳实践进入部署

这里分享一个直接的例子,将秘密注入到部署中

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: "{{  .Chart.Name }}-deployment"
  labels:
    chart: '{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}'
spec:
  replicas: {{ .Values.replicaCount }}
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 1
  selector:
    matchLabels:
      app: "{{  .Chart.Name }}-selector"
      version: "current"
  revisionHistoryLimit: {{ .Values.revisionHistoryLimit }}
  template:
    metadata:
      labels:
        app: "{{  .Chart.Name }}-selector"
        version: "current"
    spec:
      containers:
      - name: "{{  .Chart.Name  }}"
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        ports:
        - containerPort: {{ .Values.service.servicePort}}
        resources:
          requests:
            cpu: "{{ .Values.image.resources.requests.cpu }}"
            memory: "{{ .Values.image.resources.requests.memory }}"
        env:
          - name: PORT
            value : "{{ .Values.service.servicePort }}"
        {{- if .Values.image.livenessProbe }}
        livenessProbe:
{{ toYaml .Values.image.livenessProbe | indent 10 }}
        {{- end }}
        {{- if .Values.image.readinessProbe }}
        readinessProbe:
{{ toYaml .Values.image.readinessProbe | indent 10 }}
        {{- end }}

values.yaml

image:
  repository: nodeserver
  tag: 1.0.0
  pullPolicy: IfNotPresent 
  resources:
    requests:
      cpu: 200m
      memory: 300Mi
  readinessProbe: {}
  # Example (replace readinessProbe: {} with the following):
  # readinessProbe:
  #   httpGet:
  #     path: /ready
  #     port: 3000
  #   initialDelaySeconds: 3
  #   periodSeconds: 5
  livenessProbe: {}
  # Example (replace livenessProbe: {} with the following)::
  # livenessProbe:
  #   httpGet:
  #     path: /live
  #     port: 3000
  #   initialDelaySeconds: 40
  #   periodSeconds: 10  
service:
  name: Node
  type: NodePort
  servicePort: 3000

可以看到deployment.yaml里面的代码块

env:
          - name: PORT
            value : "{{ .Values.service.servicePort }}"

它正在从 values.yaml 文件中获取值

service:
  name: Node
  type: NodePort
  servicePort: 3000

如果您不想更新 values.yaml 文件,您也可以使用该命令重写该值

helm install chart my-chart -n namespace-name --set service.servicePort=5000 

答案 1 :(得分:0)

在您的模板文件夹中创建一个 Secret 模板。然后,您可以通过 helm cli 传递值。

例如,这是我的 secret.yaml 文件。

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  password: {{ .Values.password | b64enc }}

现在,我可以将 password 的值设置如下:

helm install  my-chart-instance my-chart -n my-namespace --set password=my-secret-value 
相关问题