"extensions / v1beta1 버전의"배치 "종류와 일치하지 않습니다


27

mojaloop를 배포하는 동안 문제가 발생했습니다 .kubernetes는 다음과 같은 오류 로그로 응답합니다.

Kubernetes 버전과 1.16 버전을 확인 했으므로 API 버전에서 이러한 종류의 문제를 어떻게 해결할 수 있습니까? 조사에서 Kubernetes가 apps / v1beta2, apps / v1beta1을 지원하지 않으므로 Kubernetes를 어떻게 만들 수 있습니까? 현재 사용되지 않는 버전 또는 지원되는 버전을 사용합니다. Kubernetes를 처음 사용하는 사람과 저를 지원할 수있는 사람은 행복합니다

오류 : 유효성 검사에 실패했습니다 : [ ""을 (를) 인식 할 수 없습니다 : "apps / v1beta2"버전의 "Deployment"종류와 일치하지 않습니다. ""을 인식 할 수 없습니다 : "extensions / v1beta1"버전의 "Deployment"종류와 일치하지 않습니다. ""인식 : "apps / v1beta2"버전에서 "StatefulSet"종류와 일치하지 않으며 ""인식 할 수 없음 : "apps / v1beta1"버전에서 "StatefulSet"종류와 일치하지 않습니다.]


1
현재 지원되는 API를 사용하는 매니페스트 파일을 다시 작성 kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16을
zerkms

어떻게 문제를 재현 할 수
dan

답변:


56

Kubernetes 1.16에서는 일부 api가 변경되었습니다.

현재 Kubernetes 객체를 지원하는 API를 확인할 수 있습니다.

$ kubectl api-resources | grep deployment
deployments                       deploy       apps                           true         Deployment

이는 apps배치에 올바른 apiVersion 만 ( extensions지원하지 않음 Deployment)을 의미합니다. StatefulSet과 동일한 상황입니다.

Deployment 및 StatefuSet apiVersion을로 변경하면됩니다 apiVersion: apps/v1.

도움이되지 않으면 질문에 YAML을 추가하십시오.

편집 버전 1.16에서 지원되지 않는 Deployments에 이전 apiVersion이 포함 된 HELM 템플릿으로 인해 문제가 발생하므로 가능한 해결책은 두 가지입니다.

1. git clone 전체의 repo과에 apiVersion을 대체 apps/v1모든 템플릿 / deployment.yaml 사용하여 스크립트에서
2 는 Kubernetes의 사용 이전 버전 (1.15) 때 동의 유효성 검사기 extensionsapiVersionDeployentStatefulSet.


mojaloop의 모든 배치 yaml 파일이 kuberntes 버전 1.15와 호환되므로 kubernettes를 다운 그레이드 할 수 있습니다. 다운 그레이드하거나 다운 그레이드를 수행하여 soln을 얻을 수있는 방법
dan

1
이 mojaloop / mojaloop 조타 차트를 확인했습니다. 불행히도 배포가있는 모든 템플릿에는 apiVersions가 extensions/v1beta1있습니다. 가능한 해결 방법 중 하나는 모든 템플릿 /deployment.yaml usinc 스크립트에서 전체 git clone리포지토리 및 apiVersion을 교체하는 것 apps/v1입니다. find . -name 'deployment.yaml' | xargs -n 1 perl -pi -e 's/(apps\/v1beta2)|(extensions\/v1beta1)/apps\/v1/g'.유효성 검사기가 확장 프로그램을 배포 및 StatefulSet의 apiVersion으로 확장 할 때 두 번째 해결 방법은 Kubernetes의 이전 버전 (1.15)을 사용할 수 있습니다.
PjoterS

@dan을 사용 Minikube하고 Kubeadm있습니까?
PjoterS

kubeadm 나는 minikube를 사용하지 않았다
dan

kubeadmn 스펙을 버전 1.15로 설치하는 몇 가지 단계를 공유 할 수 있습니까? kubeadmn 1.15의 설치를 고려하여 특정 자원을 찾을 수 없습니다
dan

4

대안으로 수동으로 변경할 수 있습니다. 조타 차트를 가져옵니다.

helm fetch --untar stable/metabase

차트 폴더에 액세스하십시오.

cd ./metabase

API 버전 변경 :

sed -i 's|extensions/v1beta1|apps/v1|g' ./templates/deployment.yaml

추가 spec.selector.matchLabels:

spec:
[...]
selector:
    matchLabels:
    app: {{ template "metabase.name" . }}
[...]

마지막으로 변경된 차트를 설치하십시오.

helm install ./ \
  -n metabase \
  --namespace metabase \
  --set ingress.enabled=true \
  --set ingress.hosts={metabase.$(minikube ip).nip.io}

즐겨!


0

조타 패키지를 많이 테스트하고 있기 때문에 짜증이 났으므로 빠른 스크립트를 작성했습니다.이 스크립트는 워크 플로우를 정렬하도록 수정되어 아래에서 볼 수 있습니다.

새로운 워크 플로우 먼저 작업 디렉토리에 차트를 tgz로 가져옵니다.

helm fetch repo/chart

그런 다음 작업에서 직접 bash 스크립트를 실행하십시오.

helmk myreleasename mynamespace chart.tgz [any parameters for kubectl create]

helmk의 내용-작동하려면 kubeconfig 클러스터 이름을 편집해야합니다.

#!/bin/bash
echo usage $0 releasename namespace chart.tgz [createparameter1] [createparameter2] ... [createparameter n]
echo This will use your namespace then shift back to default so be careful!!
kubectl create namespace $2   #this will create harmless error if namespace exists have to ignore
kubectl config set-context MYCLUSTERNAME --namespace $2
helm template -n $1 --namespace $2 $3 | kubectl convert -f /dev/stdin | kubectl create --save-config=true ${@:4}  -f /dev/stdin
#note the --namespace parameter in helm template above seems to be ignored so we have to manually switch context
kubectl config set-context MYCLUSTERNAME --namespace default

원하는 새로운 네임 스페이스 컨텍스트로 수동 전환 한 다음 다시 돌아가서 단일 사용자 개발자에게만 사용하거나 실제로 주석 처리하기 때문에 약간 위험한 해킹입니다.

다음과 같이 kubectl 변환 기능 사용에 대한 경고가 표시됩니다

사용자 정의하기 위해 YAML을 편집해야하는 경우 / dev / stdin 중 하나를 중간 파일로 바꾸면됩니다. "create"를 save-config와 함께 사용하고 변경 내용을 "적용"하는 것이 좋습니다. 이는 kubernetes로도 기록됨을 의미합니다. 행운을 빕니다


0

간단히 말해서 현재 설치에서 오래된 버전의 API를 사용하도록 강요하지는 않지만 현재 kube가 지원하는 버전을 확인하려면 구성 파일의 버전을 수정하면됩니다.

root @ ubn64 : ~ # kubectl API 버전 | grep -i 앱

앱 / v1

root @ ubn64 : ~ #

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.