0

我是新来掌舵世界的。我想从我的值和 sample.yaml 生成清单,所以我尝试从我的 sample.yaml 文件创建一个模板。

值.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

示例.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 文件。 遵循helm文档。但是我找不到任何明智的(我可以理解的)语法来循环遍历复杂的值文件。

请任何人帮助我解决这个问题。

4

1 回答 1

0

需要详细了解range的使用以及k8s在应用资源时如何用'---'来划分资源。

你可以模仿以下

值.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"

服务.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 }}

部署.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 }}
于 2021-08-23T03:03:14.067 回答