Kubernetes создает развертывание неожиданной ошибки SchemaError

Я следую этому руководству (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 я 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 локально, как это описано в руководстве. Все работает до развертывания и обслуживания. Я не могу это сделать.

Ответы

Ответ 1

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

  1. rm/usr/local/bin/kubectl

  2. brew link --overwrite kubernetes-cli

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

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

Ответ 2

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

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

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

После этого я смог успешно kubectl apply команды kubectl apply.

Ответ 3

У меня тоже была такая же проблема. В моей системе 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

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

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

Проверять

ls -l $(which kubectl)

Ответ 4

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

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

Ответ 5

Ваша версия клиента слишком старая. В моем 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"}

Ответ 6

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

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

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

Ответ 7

Я на 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.

Теперь у вас все хорошо, попробуйте все, что вы делали.

Ответ 8

Сегодня столкнулся с той же проблемой после установки kubectl на моем Mac. Удаление kubectl [через brew uninstall kubectl ] и повторная установка [ brew install kubectl ] решили проблему для меня.

Ответ 9

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

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

Вторая причина - устаревшее apiVersion в ваших файлах .yaml.

Ответ 10

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

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

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

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

Ответ 11

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

Ответ 12

Вы можете использовать "--validate = false" в вашей команде. Например:

kubectl create -f simple-crud-dpl.yaml --validate=false

Ответ 13

Из того, что кажется, у вас есть несогласованность в пространствах. Используйте 2 пробела для отступа. У меня есть полное объяснение развертываний здесь. Я думаю, что это должно работать, когда вы исправляете пробелы.

Надеюсь, поможет

Ответ 14

Я не думаю, что проблема с imagePullPolicy, если у вас нет изображения локально. Ошибка autoscaling, что означает, что он не может создавать реплики контейнера.

Можете ли вы установить replicas: 1 и попробовать?

Ответ 15

Согласно документам kubectl,

Вы должны использовать версию kubectl, которая находится в пределах одной незначительной разницы версий вашего кластера.

Клиент kubectl v1.10, очевидно, выполняет запросы к серверу kubectl v1.14 без каких-либо новых (в 4 минорных версиях) обязательных параметров.

Для пользователей brew переустановите kubernetes-cli. Стоит проверить, какая установлена несовместимая версия. Для пользователей brew проверьте команду ls -l $(which kubectl).

Ответ 16

В Windows 10.0 удаление Docker помогло мне решить эту проблему. Делаем с кубектл и миникуб.

Ответ 17

Я получал ошибку ниже при запуске kubectl explain pod в Windows 10

error: SchemaError(io.k8s.api.core.v1.NodeCondition): invalid object does not have additional properties

У меня были установлены Minikube и Docker Desktop. Причиной этой ошибки, как уже упоминалось в предыдущих ответах, было несоответствие между версией сервера (основной 1 младший 15) и клиентской версией (основной 1 младший 10). Клиентская версия исходила от Docker Desktop. Чтобы исправить это, я обновил версию клиента kubectl до v1.15.1, как описано здесь

curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.15.1/bin/windows/amd64/kubectl.exe

Ответ 18

Пользователь Mac !!! Это для тех, кто первым установил докер. Ошибка появится, когда вы используете команду apply. Ошибка возникает из-за несоответствия версий, как некоторые люди говорят здесь. Я не устанавливал kubectl, используя homebrew. Скорее kubectl auto get install при установке рабочего стола Docker для Mac.

Чтобы исправить это, я сделал следующее: Удалить исполняемый файл kubectl

rm /usr/local/bin/kubectl

Скачать kubectl: curl -LO https://storage.googleapis.com/kubernetes-release/release/$ (curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl

Изменить разрешение:

chmod +x ./kubectl

Переместите исполняемый файл:

sudo mv ./kubectl /usr/local/bin/kubectl

Вот и все! Просто чтобы показать, что это работает, вот вывод:

kubectl apply -f ./deployment.yaml
deployment.apps/tomcat-deployment created

Убедитесь, что файл yml правильный. Я скачал действительный файл отсюда, чтобы проверить:https://github.com/LevelUpEducation/kubernetes-demo/tree/master/Introduction%20to%20Kubernetes/Your%20First%20k8s%20App