перебирать сложные values.yaml, используя диапазон в диаграмме управления

Я новичок здесь, чтобы управлять миром. Я хочу сгенерировать манифест из моих значений и sample.yaml, поэтому я пытаюсь создать шаблон из моих файлов sample.yaml.

Values.yaml

      prodapps:
 alpha:
   name: alpha
   image: alpha.azurecr.io/alpha:latest
   imagePullPolicy: IfNotPresent
   resources:
     requests:
       memory: "10000Mi"
       cpu: "150m"
     limits:
       memory: "800Mi"
       cpu: 600m"
   ingress:
     enabled: true
     annotations:
       zap.ingress.kubernetes.io/rule-type: PathPrefixStrip
       nginx.ingress.kubernetes.io/rewrite-target: /
     path: /alpha/api
     hosts:
       - demo.jumboapps.com
 beta:
   name: beta
   disable: true
   image: beta.azurecr.io/beta:latest
   imagePullPolicy: IfNotPresent
   resources:
     requests:
       memory: "10000Mi"
       cpu: "150m"
     limits:
       memory: "800Mi"
       cpu: 600m"
   ingress:
     enabled: true
     annotations:
       zap.ingress.kubernetes.io/rule-type: PathPrefixStrip
       nginx.ingress.kubernetes.io/rewrite-target: /
     path: /beta/api
     hosts:
       - demo.jumboapps.com

Sample.yaml

      apiVersion: v1
kind: Service
metadata:
 name: "{{ .Values.prodapps.alpha.name }}-svc"
 namespace: "{{ .Release.Namespace }}"
spec:
 ports:
   - port: 80
     name: "http"
 selector:
   app: "{{ .Values.prodapps.alpha.name }}"
---
apiVersion: v1
kind: Service
metadata:
 name: "{{ .Values.prodapps.beta.name }}-svc"
 namespace: "{{ .Release.Namespace }}"
spec:
 ports:
   - port: 80
     name: "http"
 selector:
   app: "{{ .Values.prodapps.beta.name }}"

Моя главная цель - создать шаблон моего sample.yaml.by и создать действительный файл Manifet. следуя документации по рулю . Но я не могу найти какой-либо разумный (мой понятный) синтаксис для цикла по файлам со сложными значениями.

Пожалуйста, помогите мне с этим.

1 ответ

Решение

You need to learn more about the usage of range and how k8s divides resources with '---' when applying resources.

You can imitate the following

Values.yaml

      prodapps:
  alpha:
    name: alpha
    image: alpha.azurecr.io/alpha:latest
    imagePullPolicy: IfNotPresent
    resources:
      requests:
        memory: "10000Mi"
        cpu: "150m"
      limits:
        memory: "800Mi"
        cpu: 600m"
  beta:
    name: beta
    disable: true
    image: beta.azurecr.io/beta:latest
    imagePullPolicy: IfNotPresent
    resources:
      requests:
        memory: "10000Mi"
        cpu: "150m"
      limits:
        memory: "800Mi"
        cpu: 600m"

service.yaml

      {{ if .Values.prodapps }}
{{- range $k, $v := $.Values.prodapps }}
---
apiVersion: v1
kind: Service
metadata:
  name: "{{ $v.name }}-svc"
  namespace: "{{ .Release.Namespace }}"
spec:
  ports:
    - port: 80
      name: "http"
  selector:
    app: "{{ $v.name }}"
{{- end }}
{{- end }}

deployment.yaml

      {{ if .Values.prodapps }}
{{- range $k, $v := $.Values.prodapps }}
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: "{{ $v.name }}-dep"
  namespace: "{{ .Release.Namespace }}"
spec:
  template:
    spec:
      containers:
        - name: {{ $v.Name }}
          image: "{{ $v.image }}"
          imagePullPolicy: {{ $v.imagePullPolicy }}
          resources:
            {{- toYaml $v.resources | nindent 12 }}
{{- end }}
{{- end }}
Другие вопросы по тегам