nenhuma correspondência para o tipo "Implantação" na versão "extensions / v1beta1

27

Eu tenho o problema ao implantar o mojaloop .kubernetes está respondendo com um log de erro como

Eu verifiquei minha versão do Kubernetes e 1.16 é a versão, então como posso corrigir esse tipo de problema com a versão da API. Ao investigar, descobri que o Kubernetes não suporta apps / v1beta2, apps / v1beta1, então como posso fazer o Kubernetes usar versão atualmente não obsoleta ou versão suportada Eu sou novo no Kubernetes e qualquer pessoa que possa me apoiar, estou feliz

Erro: falha na validação: [não é possível reconhecer "": não corresponde ao tipo "Implantação" na versão "apps / v1beta2", não é possível reconhecer "": não corresponde ao tipo "Implantação" na versão "extensões / v1beta1", não é possível reconhece "": não corresponde ao tipo "StatefulSet" na versão "apps / v1beta2", não é possível reconhecer "": não corresponde ao tipo "StatefulSet" na versão "apps / v1beta2"]

dan
fonte
11
Reescrever seus arquivos de manifesto para usar APIs suportadas atualmente kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16
zerkms
como posso reproduzir o problema u pode me compartilhar algum passo
dan

Respostas:

56

No Kubernetes 1.16, alguns apis foram alterados.

Você pode verificar quais apis suportam o objeto Kubernetes atual usando

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

Isso significa que apenas apiVersion with appsestá correto para implantações ( extensionsnão é compatível Deployment). A mesma situação com StatefulSet.

Você só precisa alterar a aplicação Deployment e StatefuSet para apiVersion: apps/v1.

Se isso não ajudar, adicione seu YAML à pergunta.

EDITAR Como o problema é causado pelos modelos HELM que incluíram apiVersions antigas em Implantações que não são suportadas na versão 1.16, existem 2 soluções possíveis:

1. git clone repo todo e substituir apiVersion para apps/v1em todos templates / deployment.yaml usando roteiro
2. Use versão mais antiga do Kubernetes (1,15), quando validador aceitar extensionscomo apiVersionpara Deployente StatefulSet.

PjoterS
fonte
i pode rebaixar os kubernettes uma vez que todos arquivo yaml a implantação de mojaloop são compatível com kuberntes versão 1.15 Então, como posso fazer o downgrade ou fazendo o downgrade posso obter uma sol, em seguida,
dan
11
Verifiquei este gráfico de capacete mojaloop / mojaloop. Infelizmente, todos os modelos com implementações têm apiVersions: extensions/v1beta1. Como uma das soluções possíveis é git clonereposicionar e substituir a apiVersion por apps/v1todos os scripts de templates / deployment.yaml usinc A find . -name 'deployment.yaml' | xargs -n 1 perl -pi -e 's/(apps\/v1beta2)|(extensions\/v1beta1)/apps\/v1/g'.segunda solução alternativa pode ser usar apenas a versão mais antiga do Kubernetes (1.15) quando o validador aceitar extensões como apiVersion for Deployent e StatefulSet.
precisa saber é o seguinte
@dan você está usando Minikubeou Kubeadm?
precisa saber é o seguinte
kubeadm eu não usei o minikube #
dan
pode compartilhar u me alguns passos para a instalação de kubeadmn specfic para a versão 1.15 não consigo encontrar recursos specfic considerando instalação de kubeadmn 1,15
dan
4

Você pode alterar manualmente como alternativa. Busque o gráfico de leme:

helm fetch --untar stable/metabase

Acesse a pasta do gráfico:

cd ./metabase

Alterar versão da API:

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

Adicionar spec.selector.matchLabels:

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

Por fim, instale seu gráfico alterado:

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

Aproveitar!

Bruno Wego
fonte
0

Isso estava me incomodando porque estou testando muitos pacotes de lemes, então escrevi um script rápido - que pode ser modificado para classificar seu fluxo de trabalho, talvez veja abaixo

Novo fluxo de trabalho Busque primeiro o gráfico como um tgz no diretório de trabalho

helm fetch repo/chart

então, no seu trabalho, execute diretamente o script bash abaixo - que chamei de helmk

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

Conteúdo do helmk - é necessário editar o nome do cluster do kubeconfig para funcionar

#!/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

É um truque um pouco perigoso, pois eu troco manualmente para o novo contexto de espaço para nome desejado e, em seguida, volto a usá-lo para ser usado apenas para desenvolvedores de um único usuário ou comentar isso.

Você receberá um aviso sobre o uso do recurso kubectl convert como este

Se você precisar editar o YAML para personalizar - basta substituir um dos arquivos / dev / stdin para arquivos intermediários, mas provavelmente é melhor utilizá-lo usando "create" com um save-config como eu tenho e simplesmente "aplique" suas alterações o que significa que eles também serão gravados nos kubernetes. Boa sorte

John Beck
fonte
0

para simplificar, você não força a instalação atual a usar uma versão desatualizada da API, mas simplesmente corrige a versão nos arquivos de configuração, se quiser verificar qual versão o kube atual suporta, basta executar:

root @ ubn64: ~ # kubectl api-versões | grep -i apps

apps / v1

root @ ubn64: ~ #

Shareef
fonte