YAML을 JSON으로 변환하는 중 오류가 발생했습니다. 필요한 키 쿠버네를 찾지 못했습니다
나는 구글 클라우드에서 쿠버네티스에 대한 연구를 하고 있다. YAML 파일을 생성했지만 배포하려고 하면 셸에서 다음 오류를 표시합니다:
error converting YAML to JSON: yaml: line 34: did not find expected key
YAML 파일:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
spec:
volumes:
- name: nginx-config
configMap:
name: nginx-config
- name: php-config
configMap:
name: php-config
containers:
- image: php-fpm:7.2
name: php
ports:
- containerPort: 9000
volumeMounts:
- name: persistent-storage
mountPath: /var/www/data
- name: php-config
mountPath: /usr/local/etc/php-fpm.d/www.conf
subPath: www.conf
- image: nginx:latest
name: nginx
- containerPort: 80
volumeMounts:
- name: persistent-storage
mountPath: /var/www/data
- name: nginx-config
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
volumes:
- name: persistent-storage
persistentVolumeClaim:
claimName: nfs-pvc
전체적인 파일이 좋아 보입니다. 들여쓰기와 관련된 몇 가지 문제가 있습니다.
YAML 파일
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
spec:
volumes:
- name: nginx-config
configMap:
name: nginx-config
- name: php-config
configMap:
name: php-config
containers:
- image: php-fpm:7.2
name: php
ports:
- containerPort: 9000
volumeMounts:
- name: persistent-storage
# looks like indentation issue here
mountPath: /var/www/data
- name: php-config
# looks like indentation issue here
mountPath: /usr/local/etc/php-fpm.d/www.conf
subPath: www.conf
- image: nginx:latest
name: nginx
- containerPort: 80
volumeMounts:
- name: persistent-storage
mountPath: /var/www/data
- name: nginx-config
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
volumes:
- name: persistent-storage
persistentVolumeClaim:
claimName: nfs-pvc
yamllint 패키지는 디버깅하고 이런 종류의 오류를 찾는 데 유용합니다. 그렇게 하면 발견할 수 있는 문제를 나열합니다. distro 패키지 관리자를 통해 설치하거나(일반적으로 사용 가능한 경우 권장) 아래의 npm install 명령을 통해 설치합니다(전체적으로 설치됨)
npm install -g yaml-lint
npm 명령에 대해 카일 VG에게 감사드립니다
Helm을 사용하여 yaml 파일을 생성하는 중에 오류가 발생했습니다. 입력 사양으로 이와 같은 것을 사용했습니다
spec:
tls:
- hosts:
- {{ .Values.ingress.host }}
값에 포함됩니다
ingress:
host: "[NAMESPACE]-example.com"
괄호가 오류를 일으킨 것으로 나타났습니다.
함수를 사용하여 값에 따옴표를 붙여 문제를 해결할 수 있습니다.
- {{ .Values.ingress.host | quote }}
이것은 또한 가 추천하는 것이다
형식 변환 오류를 방지하는 가장 쉬운 방법은 문자열에 대해 명시적으로 설명하고 다른 모든 내용에 대해 암시적으로 설명하는 것입니다. 아니면 간단히 말해서.
그리고.
문자열 데이터를 사용할 때는 문자열을 그대로 사용하는 것보다 항상 문자열을 인용하는 것이 안전합니다:
의 답변에 따라 를 사용하여 기계에 모듈을 설치하지 않고도 yaml을 보풀하고 오류를 확인할 수 있습니다. 자주 사용하지 않을 명령에 대해서는 이 방법을 선호합니다. NPX는 패키지를 다운로드하고 명령을 실행한 다음 완료되면 패키지를 제거합니다.
npx yaml-lint yamllint file_name
위의 yaml 파일은 괜찮아 보였지만, 들여쓰기가 문제였다(파일을 볼 때 거의 보이지 않음). 이 오류를 발생시킬 수 있는 또 다른 문제는 누락된 필드 이름 또는 콜론과 같은 파일에 문제가 있다는 것입니다.
나도 같은 문제가 있었지만 RAW Github 파일의 링크 복사를 해결하고 쿠벡틀에 설정한다
kubectl create -f https://raw.githubusercontent.com/user/project/master/file.yml
문제의 원인이 되는 보이지 않는 문자가 없는지 확인합니다.
이 오류:
error converting YAML to JSON: yaml: line 96: could not find expected '':''
다음 줄에서 보이지 않는 사이의 단절 때문이었습니다:
- name: CERT_ALIAS
yaml 파서를 사용하여 문제의 원인을 찾습니다
온라인에는 많은 것들이 있다
값이 누락되어 이 오류가 발생했습니다. yaml
틀렸어
myconf:
application:
properties:
my.prop=1
맞다
myconf:
application:
properties: |-
my.prop=1
최근 values.yaml 파일의 배열에 설정이 저장된 여러 cronjob에 대한 템플릿 yaml 파일을 생성하려고 시도할 때 이와 동일한 오류를 발견했습니다.
다음은 실제 코드를 기반으로 한 값 데이터의 예입니다:
allCronJobs:
- cron1:
cronJobName: hello-world
enabled: true
cronJob:
schedule: "2 * * * *"
job:
backoffLimit: 3
pod:
restartPolicy: OnFailure
- cron2:
cronJobName: foo-bar
enabled: true
cronJob:
schedule: "0 11 * * *"
job:
activeDeadlineSeconds: 10800
pod:
restartPolicy: OnFailure
다음은 범위 구문을 사용하는 템플릿 파일의 일부입니다. (이것은 YAML을 JSON으로 변환하는 데 오류가 발생한 코드입니다.)
{{ range $index, $currCron := .Values.allCronJobs -}}
{{- if $currCron.enabled -}}
{{- with $ }}
apiVersion: batch/v1
kind: CronJob
metadata:
name: {{ include "api-payments.fullname" . }}-{{ $currCron.cronJobName }}
labels:
{{- include "api-payments.labels" . | nindent 4 }}
spec:
schedule: {{ $currCron.cronJob.schedule | quote }}
startingDeadlineSeconds: {{ $currCron.cronJob.startingDeadlineSeconds }}
감사하게도, 많은 검색 끝에, 나는 그것을 알아내는 데 도움이 되는 이 게시물을 우연히 발견했다:
나는 여러 파일(보통 파일당 단일 리소스)을 처리할 때 조타가 하는 것처럼 cronjob의 각 반복 사이에 "---"를 포함해야 했다.
이제 작동하는 수정된 코드가 여기 있습니다. 거스름돈은 4호선입니다.
{{ range $index, $currCron := .Values.allCronJobs -}}
{{- if $currCron.enabled -}}
{{- with $ }}
---
apiVersion: batch/v1
kind: CronJob
metadata:
name: {{ include "api-payments.fullname" . }}-{{ $currCron.cronJobName }}
labels:
{{- include "api-payments.labels" . | nindent 4 }}
spec:
schedule: {{ $currCron.cronJob.schedule | quote }}
startingDeadlineSeconds: {{ $currCron.cronJob.startingDeadlineSeconds }}
'개발하자' 카테고리의 다른 글
비주얼 스튜디오 코드 내에서 주피터 노트북의 모든 출력을 표시하는 방법은 무엇입니까? (0) | 2023.01.22 |
---|---|
Jenkins Declarative: 여러 에이전트가 있는 Kubernetes 플러그인 (0) | 2023.01.22 |
Jupyter 노트북에만 표시되는 환경 변수 업데이트 (0) | 2023.01.21 |
Download file using fastapi (0) | 2023.01.20 |
주피터: 커널이 죽은 것 같습니다. 자동으로 다시 시작됩니다. (Keras Related) (1) | 2023.01.19 |