Kubernetes создает неожиданное развертывание SchemaError - PullRequest
44 голосов
/ 29 марта 2019

Я следую этому руководству (https://www.baeldung.com/spring-boot-minikube) Я хочу создать развертывание Kubernetes в файле yaml (simple-crud-dpl.yaml):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: simple-crud
spec:
  selector:
      matchLabels:
        app: simple-crud
  replicas: 3
  template:
    metadata:
      labels:
        app: simple-crud
    spec:
      containers:
        - name: simple-crud
          image: simple-crud:latest
          imagePullPolicy: Never
          ports:
            - containerPort: 8080

, но когда я запускаю kubectl create -f simple-crud-dpl.yaml я получил: error: SchemaError(io.k8s.api.autoscaling.v2beta2.MetricTarget): invalid object doesn't have additional properties

Я использую новейшую версию kubectl:

kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.11", GitCommit:"637c7e288581ee40ab4ca210618a89a555b6e7e9", GitTreeState:"clean", BuildDate:"2018-11-26T14:38:32Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.0", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-25T15:45:25Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}

Я также использую minikube локально, как описано в руководстве. Все работает до развертыванияи обслуживание. Я не могу это сделать.

Ответы [ 16 ]

101 голосов
/ 08 апреля 2019

После установки kubectl с заваркой вы должны запустить:

  1. rm /usr/local/bin/kubectl

  2. brew link --overwrite kubernetes-cli

А также опционально:

brew link --overwrite --dry-run kubernetes-cli.

24 голосов
/ 31 марта 2019

Я второй ответ Реннекона.Я обнаружил, что на моей машине работает докер, который также устанавливает kubectl.Эта установка kubectl вызывает эту проблему, чтобы показать.

Я предпринял следующие шаги:

  • удалил его с помощью brew uninstall kubectl
  • переустановил его с помощью brew install kubectl
  • (из-за создания символической ссылкиошибка) Я заставил brew создавать символические ссылки, используя brew link --overwrite kubernetes-cli

. Затем я смог успешно выполнить свои команды kubectl apply.

20 голосов
/ 06 апреля 2019

Я столкнулся с той же проблемой в minikube / Windows 10 после установки Docker. Это было вызвано несоответствием версий kubectl, которое уже упоминалось пару раз в этой теме. Docker устанавливает версию 1.10 kubectl.
У вас есть несколько вариантов:

1) Убедитесь, что путь к вашей корзине k8s выше, чем в докере
2) Замените kubectl в 'c: \ Program Files \ Docker \ Docker \ resources \ bin' на правильный

14 голосов
/ 18 апреля 2019

У меня тоже была такая же проблема. В моей системе kubectl выполняется из докера, который предустановлен, когда мы устанавливаем Docker. Вы можете проверить это с помощью следующей команды

ls -l $(which kubectl) 

, который возвращается как

/ usr / local / bin / kubectl -> /Applications/Docker.app/Contents/Resources/bin/kubectlcode.

Теперь мы должны перезаписать символическую ссылку с помощью kubectl, установленного с помощью brew

rm /usr/local/bin/kubectl

brew link --overwrite kubernetes-cli

(*) необязательный 1015 *

brew unlink kubernetes-cli && brew link kubernetes-cli

Для проверки

ls -l $(which kubectl)
8 голосов
/ 05 апреля 2019

Ваша клиентская версия слишком старая. В моем env эта версия поставляется с Docker. Я должен загрузить новый клиент с https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/windows/amd64/kubectl.exe и теперь работает нормально:

kubectl version
Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.0", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-25T15:53:57Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.0", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-25T15:45:25Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}
4 голосов
/ 05 апреля 2019

Вы используете неправильную версию kubectl.

Kubectl совместима 1 версия вверх и вниз, как описано в официальных документах

Ошибка сбивает с толку, но это просто означает, что ваша версия 1.10 не отправляет всеобязательные параметры до 1,14 апи.

2 голосов
/ 13 июня 2019

Я на Windows 10 с установленными Docker Client и Minikube.Я получаю сообщение об ошибке ниже:

ошибка: SchemaError (io.k8s.api.core.v1.Node): недопустимый объект не имеет дополнительных свойств

Я решил это путем обновления версии kubectl.exe до версии, используемой minikube .Вот шаги:

Примечание: Minikube, как правило, использует последнюю версию Kubernetes, поэтому рекомендуется взять последнюю версию kubectl.

  1. Загрузитьсоответствующая версия kubectl.exe .

  2. Перейдите на путь Docker, где находится ваш kubectl, например C:\Program Files\Docker\Docker\resources\bin

  3. Поместите свойскачал kubectl.exe там.Если вас попросят заменить, пожалуйста, сделайте.

  4. Теперь введите refreshenv в Powershell.

  5. Проверьте новую версию, если это то, что выразместили там;kubectl version.

Теперь у вас все хорошо, повторите все задания, которые вы выполняли.

1 голос
/ 12 мая 2019

В моем случае kubectl всегда использует Google kubectl с помощью инструмента gcloud, или, скорее всего, возник конфликт между установленным Homebrew и установленным Gcloud kubectl. Я удалил Homebrew kubectl и обновил инструмент gcloud до последней версии, которая в конечном итоге также обновляет kubectl. Это решило мою проблему.

1 голос
/ 21 апреля 2019

У меня была похожая проблема с ошибкой

ошибка: SchemaError (io.k8s.api.storage.v1beta1.CSIDriverList): недопустимый объект не имеет дополнительных свойств

Моя проблема заключалась в том, что мой Mac использовал Google kubectl, который был установлен с помощью инструментов gcp.Мой путь сначала просматривается там, прежде чем перейти в / usr / local / bin /

Как только я запустил kubectl из / usr / local / bin, моя проблема исчезла.

1 голос
/ 14 апреля 2019

Для меня установка Docker была проблемой.Поскольку Docker теперь поставляется с поддержкой Kubernetes, он устанавливает kubectl вместе со своей собственной установкой.Я скачал kubectl и minikube, не зная об этом, затем мой minikube использовался установкой Docker для kubectl.

Убедитесь, что это не происходит с вами.

Второй причиной будетне рекомендуется использовать apiVersion в ваших файлах .yaml.

...