Keine Übereinstimmungen für die Art "Bereitstellung" in Version "extensions / v1beta1"

27

Ich habe das Problem während der Bereitstellung von mojaloop .kubernetes reagiert mit einem Fehlerprotokoll wie

Ich habe meine Kubernetes-Version überprüft und 1.16 ist die Version. Wie kann ich ein solches Problem mit der API-Version beheben? Nach einer Untersuchung habe ich festgestellt, dass Kubernetes keine Apps / v1beta2, apps / v1beta1 unterstützt. Wie kann ich Kubernetes dazu bringen? Derzeit nicht veraltete oder unterstützte Version verwenden Ich bin neu bei Kubernetes und jeder, der mich unterstützen kann, ist glücklich

Fehler: Validierung fehlgeschlagen: [nicht erkennbar "": keine Übereinstimmungen für die Art "Bereitstellung" in Version "apps / v1beta2", nicht erkennbar "": keine Übereinstimmungen für die Art "Bereitstellung" in Version "extensions / v1beta1", nicht möglich erkennen "": keine Übereinstimmungen für die Art "StatefulSet" in Version "apps / v1beta2", nicht erkennbar "": keine Übereinstimmungen für die Art "StatefulSet" in Version "apps / v1beta1"]

Dan
quelle
1
Schreiben Sie Ihre Manifest-Dateien neu, um die derzeit unterstützten apis kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16
zerkms
wie kann ich das Problem reproduzieren kann u teilen Sie mir einigen Schritt
dan

Antworten:

56

In Kubernetes 1.16 wurden einige apis geändert.

Sie können überprüfen, welche APIs das aktuelle Kubernetes-Objekt verwenden

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

Dies bedeutet, dass nur apiVersion mit appsfür Bereitstellungen korrekt ist ( extensionswird nicht unterstützt Deployment). Die gleiche Situation mit StatefulSet.

Sie müssen lediglich die Bereitstellung und die StatefuSet-Anwendung auf ändern apiVersion: apps/v1.

Wenn dies nicht hilft, fügen Sie bitte Ihre YAML zur Frage hinzu.

BEARBEITEN Da das Problem durch HELM-Vorlagen verursacht wird, die alte APIVersionen in Bereitstellungen enthalten, die in Version 1.16 nicht unterstützt werden, gibt es zwei mögliche Lösungen:

1. git clone Ganzes Repo und Ersetzen von apiVersion apps/v1in allen Templates / Deployment.yaml mithilfe des Skripts.
2. Verwenden Sie eine ältere Version von Kubernetes (1.15), wenn der Validator extensionswie apiVersionfür Deployentund akzeptiert StatefulSet.

PjoterS
quelle
Kann ich die Kubernettes downgraden, da alle Deployment-Yaml-Dateien für Mojaloop mit Kuberntes Version 1.15 kompatibel sind? Wie kann ich also ein Downgrade durchführen oder durch Herabstufen eine Lösung erhalten
dan
1
Ich habe diese Mojaloop / Mojaloop-Helmkarte überprüft. Leider haben alle Vorlagen mit Bereitstellungen API-Versionen : extensions/v1beta1. Eine der möglichen git cloneProblemumgehungen besteht darin, apiVersion apps/v1in allen Vorlagen / Deployment.yaml usinc script vollständig zu repo und zu ersetzen. Die zweite Problemumgehung besteht find . -name 'deployment.yaml' | xargs -n 1 perl -pi -e 's/(apps\/v1beta2)|(extensions\/v1beta1)/apps\/v1/g'.möglicherweise darin, nur eine ältere Version von Kubernetes (1.15) zu verwenden, wenn der Validator Erweiterungen als apiVersion für Deployent und StatefulSet akzeptiert.
PjoterS
@dan benutzt du Minikubeoder Kubeadm?
PjoterS
kubeadm ich habe minikube nicht benutzt
dan
Kannst du mir einige Schritte zur Installation von kubeadmn specfic auf Version 1.15 mitteilen? Ich kann keine spezifische Ressource finden, wenn ich die Installation von kubeadmn 1.15
dan
4

Sie können alternativ manuell ändern. Holen Sie sich die Steuerkarte:

helm fetch --untar stable/metabase

Greifen Sie auf den Diagrammordner zu:

cd ./metabase

API-Version ändern:

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

Hinzufügen spec.selector.matchLabels:

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

Installieren Sie schließlich Ihr geändertes Diagramm:

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

Genießen!

Bruno Wego
quelle
0

Das hat mich geärgert, weil ich viele Helmpakete teste, also habe ich ein schnelles Skript geschrieben - das geändert werden könnte, um Ihren Workflow zu sortieren, siehe unten

Neuer Workflow Rufen Sie zuerst das Diagramm als TGZ in Ihr Arbeitsverzeichnis ab

helm fetch repo/chart

Führen Sie dann in Ihrer Arbeit direkt das unten stehende Bash-Skript aus, das ich helmk nannte

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

Inhalt von helmk - Sie müssen Ihren kubeconfig-Clusternamen bearbeiten, damit er funktioniert

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

Es ist ein etwas gefährlicher Hack, da ich manuell zu Ihrem neuen gewünschten Namespace-Kontext und dann wieder zurück wechsle, um ihn nur für Einzelbenutzer-Entwickler zu verwenden oder dies zu kommentieren.

Sie erhalten eine Warnung zur Verwendung dieser Kubectl-Konvertierungsfunktion

Wenn Sie die YAML bearbeiten müssen, um sie anzupassen, ersetzen Sie einfach eine der Dateien / dev / stdin durch Zwischendateien. Es ist jedoch wahrscheinlich besser, sie mit "create" mit einer Save-Konfiguration wie ich aufzurufen und dann einfach Ihre Änderungen "anzuwenden" was bedeutet, dass sie auch in Kubernetes aufgezeichnet werden. Viel Glück

John Beck
quelle
0

Um es einfach auszudrücken: Sie erzwingen nicht, dass die aktuelle Installation eine veraltete Version der API verwendet. Sie korrigieren jedoch einfach die Version in Ihren Konfigurationsdateien, wenn Sie überprüfen möchten, welche Version Ihr aktueller Kube unterstützt. Führen Sie einfach Folgendes aus:

root @ ubn64: ~ # kubectl API-Versionen | grep -i Apps

apps / v1

root @ ubn64: ~ #

Shareef
quelle