[kubernetes] “extensions / v1beta1 버전의”배치 “종류와 일치하지 않습니다

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”종류와 일치하지 않습니다.]



답변

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.


답변

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

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}

즐겨!


답변

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

새로운 워크 플로우 먼저 작업 디렉토리에 차트를 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로도 기록됨을 의미합니다. 행운을 빕니다


답변

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

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

앱 / v1

root @ ubn64 : ~ #


답변