Kubernetes создает непредвиденную ошибку схемы развертывания

#kubernetes #kubectl #kubernetes-deployment

#kubernetes #kubectl #kubernetes-развертывание

Вопрос:

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

Комментарии:

1. Обычно я ожидаю увидеть строку apiVersion: v1 ; помогает ли это добавление?

2. Результат остается тем же для других версий

3. вы пробовали компоновать yaml? Иногда это помогает устранить некоторые незначительные ошибки форматирования.

4. Я только что настроил minikube на Mac и столкнулся с аналогичной проблемой в другом руководстве, в котором используется удаленный файл. Моя ошибка немного отличается: kubectl create -f https://raw.githubusercontent.com/kelseyhightower/kubernetes-initializer-tutorial/master/deployments/helloworld.yaml error: SchemaError(io.k8s.api.core.v1.DaemonEndpoint): invalid object doesn't have additional properties Я предполагаю, что где-то что-то не так с нашей настройкой kubectl

Ответ №1:

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

  1. rm /usr/local/bin/kubectl

  2. brew link --overwrite kubernetes-cli

А также необязательно:

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

Комментарии:

1. не могли бы вы объяснить, что это делает, пожалуйста?

2. Это сработало и для меня, знаете ли вы причину этого?

3. в чем причина повторного связывания?

Ответ №2:

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

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

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

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

Комментарии:

1. то же самое, но это были gcloud инструменты, которые установили свои собственные, устаревшие относительно кластера, на который я нацеливался, kubectl

Ответ №3:

У меня тоже была такая же проблема. В моей системе Mac kubectl запускается из docker, который предварительно установлен при установке 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 amp;amp; brew link kubernetes-cli
  

Для проверки

 ls -l $(which kubectl)
  

Ответ №4:

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

1) Убедитесь, что путь к вашей ячейке k8s находится выше, чем в docker
2) Замените kubectl в ‘c:Program FilesDockerDockerresourcesbin’ с правильным

Комментарии:

1. Исправлено для меня, я просто запустил where kubectl в командной строке, чтобы убедиться, что по умолчанию используется версия, а затем curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.15.0/bin/windows/amd64/kubectl.exe чтобы получить последнюю.

Ответ №5:

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

Комментарии:

1. То же самое для меня, просто заменил exe, и теперь все в порядке

2. Кажется более актуальным, чем принятый ответ. Он отвечает как на «что», так и на «почему».

Ответ №6:

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

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

Комментарии:

1. Спасибо, у меня это сработало!!! Также работает с: kubectl apply -f filename.yaml --validate=false

Ответ №7:

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

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

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

Ответ №8:

Я нахожусь в Windows 10 с установленными Docker Client и Minikube. Я получал сообщение об ошибке, приведенное ниже;

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

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

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

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

  2. Перейдите к вашему Docker path, где находится ваш kubectl, например C:Program FilesDockerDockerresourcesbin

  3. Разместите загруженный kubectl.exe там. Если он попросит вас заменить его, пожалуйста, сделайте.

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

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

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

Ответ №9:

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

 error: SchemaError(io.k8s.api.core.v1.NodeCondition): invalid object doesn't 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
  

Ответ №10:

Пользователь Mac!!! Это для тех, кто первым установил docker desktop. Ошибка будет отображаться при использовании команды apply. Ошибка возникает из-за несоответствия версии, как сказали здесь некоторые люди. Я не устанавливал kubectl с помощью homebrew. Скорее kubectl автоматически устанавливается при установке docker desktop для 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 to Kubernetes/Your First k8s App

Ответ №11:

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

Ответ №12:

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

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

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

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

Ответ №13:

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

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

Второй причиной может быть устаревший apiVersion в вашем .файлы yaml.

Ответ №14:

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

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

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

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

Ответ №15:

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

Ответ №16:

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

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

Ответ №17:

В Windows 10.0 удаление Docker помогло мне устранить эту проблему. Что происходит с kubectl и minikube.

Ответ №18:

Я знаю, что на этот вопрос уже был дан ответ, но я подумал, что должен опубликовать свой ответ, поскольку приведенные выше ответы были полезными, но мне потребовалось некоторое время, чтобы связать его с Azure Dev Ops.

Я получал эту ошибку, когда пытался развернуть приложение в кластере AKS из Azure Devops. Как упоминалось выше, одна из проблем, из-за которой могла возникнуть эта ошибка, связана с несоответствием версии, которое было причиной в моем случае. Я исправил это, обновив свою версию AKS в разделе расширенной конфигурации kubectl, как показано на рисунке ниже

Скриншот Azure Dev Ops