#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 вы должны запустить:
-
rm /usr/local/bin/kubectl
-
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.
-
Перейдите к вашему Docker path, где находится ваш kubectl, например
C:Program FilesDockerDockerresourcesbin
-
Разместите загруженный kubectl.exe там. Если он попросит вас заменить его, пожалуйста, сделайте.
-
Теперь введите
refreshenv
в Powershell. -
Проверьте новую версию, соответствует ли она тому, что вы туда поместили;
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, как показано на рисунке ниже