Wystąpił problem podczas wdrażania programu mojaloop .kubernetes odpowiada dziennikiem błędów podobnym do tego
Sprawdziłem moją wersję Kubernetes i 1.16 jest wersją, więc jak mogę rozwiązać tego rodzaju problem z wersją API. Z dochodzenia odkryłem, że Kubernetes nie obsługuje aplikacji / v1beta2, apps / v1beta1, więc jak mogę sprawić, by Kubernetes używaj aktualnie nieaktualnej wersji lub obsługiwanej wersji Jestem nowy w Kubernetes i każdy, kto może mnie wspierać, jestem szczęśliwy
Błąd: sprawdzanie poprawności nie powiodło się: [nie można rozpoznać „”: brak wyników dla rodzaju „Wdrożenie” w wersji „apps / v1beta2”, nie można rozpoznać „”: brak wyników dla rodzaju „Wdrażanie” w wersji „rozszerzenia / v1beta1”, nie można rozpoznać „”: brak dopasowań dla rodzaju „StatefulSet” w wersji „apps / v1beta2”, nie można rozpoznać „”: brak dopasowań dla rodzaju „StatefulSet” w wersji „apps / v1beta1”]
źródło
Odpowiedzi:
W Kubernetes 1.16 niektóre
api
s zostały zmienione.Możesz sprawdzić, które api obsługują bieżący obiekt Kubernetes za pomocą
Oznacza to, że tylko apiVersion z
apps
jest poprawny dla wdrożeń (extensions
nie obsługujeDeployment
). Ta sama sytuacja z StatefulSet.Musisz tylko zmienić Deployment i StatefuSet apiVersion na
apiVersion: apps/v1
.Jeśli to nie pomoże, dodaj swój YAML do pytania.
EDYCJA Ponieważ problem jest spowodowany przez szablony HELM uwzględniające stare apiVersions we wdrożeniach, które nie są obsługiwane w wersji 1.16, istnieją 2 możliwe rozwiązania:
1.
git clone
Całe repozytorium i zamień apiVersion naapps/v1
we wszystkich templates /loyment.yaml za pomocą skryptu2. Użyj starszej wersji Kubernetes (1.15), gdy walidator zaakceptuje
extensions
jakapiVersion
dlaDeployent
iStatefulSet
.źródło
extensions/v1beta1
. Jednym z możliwych obejść jestgit clone
całkowite repo i zastąpienie apiVersionapps/v1
we wszystkich szablonach / wdrożeniu. Skrypt usinc.find . -name 'deployment.yaml' | xargs -n 1 perl -pi -e 's/(apps\/v1beta2)|(extensions\/v1beta1)/apps\/v1/g'.
Drugim obejściem może być tylko użycie starszej wersji Kubernetes (1.15), gdy walidator zaakceptuje rozszerzenia jako apiVersion dla Deployent i StatefulSet.Minikube
lubKubeadm
?Możesz zmienić ręcznie jako alternatywę. Pobierz tabelę sterów:
Uzyskaj dostęp do folderu wykresu:
Zmień wersję interfejsu API:
Dodaj
spec.selector.matchLabels
:Na koniec zainstaluj zmieniony wykres:
Cieszyć się!
źródło
To mnie denerwowało, ponieważ testuję wiele pakietów sterów, więc napisałem szybki skrypt - który można zmodyfikować w celu uporządkowania przepływu pracy, być może patrz poniżej
Nowy przepływ pracy Najpierw pobierz wykres jako tgz do katalogu roboczego
następnie w swoim działaniu uruchom bezpośrednio poniżej skrypt bash - który nazwałem helmk
Zawartość helmk - musisz edytować nazwę klastra kubeconfig, aby działać
Jest to nieco niebezpieczny hack, ponieważ ręcznie przełączam się do nowego pożądanego kontekstu przestrzeni nazw, a następnie z powrotem, więc tak naprawdę można go używać tylko dla deweloperów pojedynczego użytkownika lub komentować.
Otrzymasz ostrzeżenie o używaniu funkcji konwersji kubectl w ten sposób
Jeśli chcesz zmodyfikować YAML, aby dostosować - po prostu zamień jeden z plików / dev / stdin na pliki pośrednie, ale prawdopodobnie lepiej jest go uruchomić za pomocą „create” z zapisz-config tak jak ja, a następnie po prostu „zastosuj” swoje zmiany co oznacza, że zostaną one również zapisane w kubernetes. Powodzenia
źródło
mówiąc najprościej, nie zmuszaj bieżącej instalacji do używania przestarzałej wersji interfejsu API, ale po prostu naprawiasz wersję w plikach konfiguracyjnych, jeśli chcesz sprawdzić, którą wersję obsługuje obecnie kube, po prostu uruchom:
root @ ubn64: ~ # wersje kubectl api-wersje | aplikacje grep -i
apps / v1
root @ ubn64: ~ #
źródło