#kubernetes #yaml #kubernetes-helm
#kubernetes #yaml #kubernetes-helm
Вопрос:
Я получаю следующую ошибку в моем конвейере развертывания
Error: YAML parse error on cnhsst/templates/deployment.yaml: error converting YAML to JSON: yaml: line 38: did not find expected key
Файл yml, соответствующий этой ошибке, приведен ниже:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ template "fullname" . }}
namespace: {{ .Values.namespace }}
labels:
app: {{ template "fullname" . }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
spec:
replicas: {{ .Values.replicas }}
selector:
matchLabels:
app: {{ template "fullname" . }}
release: "{{ .Release.Name }}"
# We dont need a large deployment history limit as Helm keeps it's own
# history
revisionHistoryLimit: 2
template:
metadata:
namespace: {{ .Values.namespace }}
labels:
app: {{ template "fullname" . }}
release: "{{ .Release.Name }}"
annotations:
recreatePods: {{ randAlphaNum 8 | quote }}
spec:
containers:
- name: {{ template "fullname" . }}
image: {{ template "docker-image" . }}
imagePullPolicy: Always
ports:
# The port that our container listens for HTTP requests on
- containerPort: {{ default 8000 .Values.portOverride }}
name: http
{{- if .Values.resources }}
resources:
{{ toYaml .Values.resources | indent 10 }}
{{- end }}
{{- if and (.Values.livenessProbe) (.Values.apipod)}}
livenessProbe:
{{ toYaml .Values.livenessProbe | indent 10 }}
{{- end }}
{{- if and (.Values.readinessProbe) (.Values.apipod)}}
readinessProbe:
{{ toYaml .Values.readinessProbe | indent 10 }}
{{- end }}
imagePullSecrets:
- name: regcred
securityContext:
runAsNonRoot: true
runAsUser: 5000
runAsGroup: 5000
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- {{ template "fullname" . }}
topologyKey: failure-domain.beta.kubernetes.io/zone
Я застрял с этой проблемой на несколько часов. Я просмотрел множество сообщений, пробовал онлайн-инструменты, пытаясь выяснить синтаксические ошибки, но, к сожалению, безуспешно. Если кто-нибудь сможет указать на проблему, это было бы действительно здорово.
Комментарии:
1. Просто выстрел в темноте: есть единственная пустая строка 37. Может ли эта пустая строка быть причиной ошибки?
2. Я попытался удалить эту пустую строку, но она по-прежнему показывает ту же ошибку при ее проверке yamllint.com
3. Я не эксперт в YAML. Вы уверены, что yamllint.com совместим ли с kubernetes-helm? Я попытался вставить в линтер несколько примеров из документов helm: helm.sh/docs/chart_template_guide/control_structures и этот линтер почти всегда допускает ошибки.
Ответ №1:
Вы можете увидеть несоответствующий отступ под regcred
:
imagePullSecrets:
- name: regcred
# <-- indented "-"
#VVV not indented
securityContext:
runAsNonRoot: true
которая, как назло, является 38-й строкой в выходном YAML
$ helm template --debug my-chart . 2>amp;1| sed -e '1,/^apiVersion:/d' | sed -ne 38p
securityContext: