71
votes

aucune correspondance pour le genre "Déploiement" dans la version "extensions / v1beta1

J'ai eu le problème lors du déploiement de mojaloop .kubernetes répond avec un journal d'erreurs comme

J'ai vérifié ma version de Kubernetes et 1.16 est la version, alors comment puis-je résoudre ce genre de problème avec la version de l'API. À partir d'une enquête, j'ai constaté que Kubernetes ne prend pas en charge apps / v1beta2, apps / v1beta1 alors comment puis-je faire en sorte que Kubernetes utiliser une version actuellement non obsolète ou une version prise en charge Je suis nouveau sur Kubernetes et quiconque peut me soutenir Je suis heureux

Erreur: échec de la validation: [impossible de reconnaître "": aucune correspondance pour le genre "Deployment" dans la version "apps / v1beta2", impossible de reconnaître "": aucune correspondance pour le genre "Deployment" dans la version "extensions / v1beta1", impossible de reconnaître "": aucune correspondance pour le genre "StatefulSet" dans la version "apps / v1beta2", impossible de reconnaître "": aucune correspondance pour le genre "StatefulSet" dans la version "apps / v1beta1"]


3 commentaires

Réécrivez vos fichiers manifestes pour utiliser les apis actuellement pris en chargekubernetes.io/blog/2019/07/18/api-deprecations-in-1-16


comment puis-je reproduire le problème puis-je me partager une étape


twitter.com/IanColdwater/status/1213607102595424258


5 Réponses :


124
votes

Dans Kubernetes 1.16, certaines api ont été modifiées.

Vous pouvez vérifier quelles API prennent en charge l'objet Kubernetes actuel en utilisant

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

Cela signifie que seule apiVersion avec apps est correcte pour les déploiements (les extensions ne prennent pas en charge le Deployment ). La même situation avec StatefulSet.

Vous devez modifier Deployment et StatefulSet apiVersion en apiVersion: apps/v1 .

Si cela ne vous aide pas, veuillez ajouter votre YAML à la question.

EDIT Comme le problème est causé par les modèles HELM inclus d'anciennes apiVersions dans les déploiements qui ne sont pas prises en charge dans la version 1.16, il existe 2 solutions possibles:

1. git clone tout le référentiel et remplace apiVersion par apps/v1 dans tous les templates / deployment.yaml à l'aide d'un script
2. Utilisez une ancienne version de Kubernetes (1.15) lorsque le validateur accepte des extensions comme apiVersion pour Deployment et StatefulSet .


6 commentaires

puis-je rétrograder les kubernettes puisque tous les fichiers yaml de déploiement pour mojaloop sont compatibles avec kuberntes version 1.15 alors comment puis-je rétrograder ou en rétrogradant puis-je obtenir un soln alors


J'ai vérifié ce graphique de barre de mojaloop / mojaloop. Malheureusement, tous les modèles avec des déploiements ont des apiVersions: extensions/v1beta1 . L'une des solutions de contournement possibles consiste à git clone tout le dépôt et à remplacer apiVersion par apps/v1 dans tous les scripts templates / deployment.yaml usinc find . -name 'deployment.yaml' | xargs -n 1 perl -pi -e 's/(apps\/v1beta2)|(extensions\/v1beta1)/apps\/v1/g'. La deuxième solution de contournement pourrait être simplement d'utiliser une version plus ancienne de Kubernetes (1.15) lorsque le validateur accepte les extensions comme apiVersion pour Deployent et StatefulSet.


@dan utilisez-vous Minikube ou Kubeadm ?


kubeadm je n'ai pas utilisé minikube


pouvez-vous me partager quelques étapes pour l'installation de kubeadmn specfic vers la version 1.15 je ne trouve pas de ressource spécifique compte tenu de l'installation de kubeadmn 1.15


J'ai vu que vous avez déjà créé une question sur l'installation de kubeadm 1.15 et que vous avez reçu une bonne réponse. stackoverflow.com/a/58500250/11148139



0
votes

Cela m'ennuyait parce que je testais beaucoup de packages de barre, j'ai donc écrit un script rapide - qui pourrait être modifié pour trier votre flux de travail, voir peut-être ci-dessous

Nouveau flux de travail Commencez par récupérer le graphique au format tgz dans votre répertoire de travail

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

puis dans votre travail, exécutez directement le script bash ci-dessous - que j'ai nommé helmk

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

Contenu de helmk - besoin de modifier votre nom de clustername kubeconfig pour fonctionner

helm fetch repo/chart

C'est un hack légèrement dangereux puisque je passe manuellement à votre nouveau contexte d'espace de noms souhaité, puis à nouveau, donc à utiliser uniquement pour les développeurs mono-utilisateur ou commenter cela.

Vous recevrez un avertissement concernant l'utilisation de la fonction de conversion kubectl comme celle-ci

Si vous avez besoin d'éditer le YAML pour le personnaliser - remplacez simplement l'un des fichiers / dev / stdin par des fichiers intermédiaires, mais il est probablement préférable de le créer en utilisant "create" avec une configuration de sauvegarde comme je l'ai, puis simplement "appliquer" vos modifications ce qui signifie qu'ils seront également enregistrés dans kubernetes. Bonne chance


0 commentaires

9
votes

Vous pouvez également modifier manuellement. Récupérez le diagramme de barre:

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

Accédez au dossier des graphiques:

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

Changer la version de l'API:

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

Ajoutez spec.selector.matchLabels :

cd ./metabase

Enfin, installez votre graphique modifié:

helm fetch --untar stable/metabase

Prendre plaisir!


0 commentaires

2
votes

Pour faire simple, vous ne forcez pas l'installation actuelle à utiliser une version obsolète de l'API; vous corrigez la version dans vos fichiers de configuration. Si vous souhaitez vérifier la version prise en charge par votre kube actuel, exécutez:

root@ubn64:~# kubectl api-versions | grep -i apps

apps/v1


0 commentaires

8
votes

pour convertir un ancien déploiement en apps / v1, vous pouvez exécuter:

kubectl convert -f ./my-deployment.yaml --output-version apps/v1


1 commentaires

Résolu pour moi - merci! Juste un kubectl convert is DEPRECATED and will be removed in a future version. "In order to convert, kubectl apply the object to the cluster, then kubectl get at the desired version" pour les futures versions gracieuseté du terminal: kubectl convert is DEPRECATED and will be removed in a future version. "In order to convert, kubectl apply the object to the cluster, then kubectl get at the desired version"