Ответ 1
После установки kubectl с brew вы должны запустить:
-
rm/usr/local/bin/kubectl
-
brew link --overwrite kubernetes-cli
А также опционально:
brew link --overwrite --dry-run kubernetes-cli
.
Я следую этому руководству (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 локально, как это описано в руководстве. Все работает до развертывания и обслуживания. Я не могу это сделать.
После установки kubectl с brew вы должны запустить:
rm/usr/local/bin/kubectl
brew link --overwrite kubernetes-cli
А также опционально:
brew link --overwrite --dry-run kubernetes-cli
.
Я второй @rennekon ответ. Я обнаружил, что на моей машине работает докер, который также устанавливает kubectl
. Эта установка kubectl вызывает эту проблему, чтобы показать.
Я предпринял следующие шаги:
brew uninstall kubectl
brew install kubectl
brew link --overwrite kubernetes-cli
используя brew link --overwrite kubernetes-cli
После этого я смог успешно kubectl apply
команды kubectl apply
.
У меня тоже была такая же проблема. В моей системе 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)
Я столкнулся с той же проблемой в Minikube/Windows 10 после установки Docker. Это было вызвано несоответствием версий kubectl, которое уже упоминалось пару раз в этой теме. Docker устанавливает версию 1.10 kubectl.
У вас есть несколько вариантов:
1) Убедитесь, что путь к вашей корзине k8s выше, чем в докере
2) Замените kubectl в 'c:\Program Files\Docker\Docker\resources\bin' на правильный
Ваша версия клиента слишком старая. В моем 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"}
Вы используете неправильную версию kubectl.
Kubectl совместим 1 версия вверх и вниз, как описано в официальных документах
Ошибка сбивает с толку, но это просто означает, что ваша версия 1.10 не отправляет все необходимые параметры в API 1.14.
Я на Windows 10 с установленными Docker Client и Minikube. Я получил ошибку ниже;
ошибка: SchemaError (io.k8s.api.core.v1.Node): недопустимый объект не имеет дополнительных свойств
Я решил это, обновив версию kubectl.exe до версии, используемой minikube. Вот шаги:
Примечание: Minikube имеет тенденцию использовать последнюю версию Kubernetes, поэтому рекомендуется взять последнюю версию kubectl.
Перейдите к пути Docker, где находится ваш kubectl, например, C:\Program Files\Docker\Docker\resources\bin
Поместите туда загруженный файл kubectl.exe. Если он просит вас заменить его, пожалуйста, сделайте.
Теперь введите refreshenv
в Powershell.
Проверьте новую версию, если это то, что вы разместили там; kubectl version
.
Теперь у вас все хорошо, попробуйте все, что вы делали.
Сегодня столкнулся с той же проблемой после установки kubectl на моем Mac. Удаление kubectl [через brew uninstall kubectl
] и повторная установка [ brew install kubectl
] решили проблему для меня.
Для меня установка Docker была проблемой. Поскольку Docker теперь поставляется с поддержкой Kubernetes, он устанавливает kubectl вместе со своей собственной установкой. Я скачал kubectl и minikube, не зная об этом, затем мой minikube использовался для установки Docker kubectl.
Убедитесь, что это не происходит с вами.
Вторая причина - устаревшее apiVersion в ваших файлах .yaml.
У меня была похожая проблема с ошибкой
ошибка: SchemaError (io.k8s.api.storage.v1beta1.CSIDriverList): недопустимый объект не имеет дополнительных свойств
Моя проблема заключалась в том, что мой Mac использовал Google Kubectl, который был установлен с помощью инструментов GCP. Мой путь сначала просматривается перед тем, как перейти в /usr/local/bin/
Когда я запустил kubectl из /usr/local/bin, моя проблема исчезла.
В моем случае kubectl всегда использует google kubectl с помощью инструмента gcloud, или, скорее всего, возник конфликт между установленным Homebrew и установленным Gcloud kubectl. Я удалил Homebrew kubectl и обновил инструмент gcloud до последней версии, которая в конечном итоге также обновляет kubectl. Это решило мою проблему.
Вы можете использовать "--validate = false" в вашей команде. Например:
kubectl create -f simple-crud-dpl.yaml --validate=false
Из того, что кажется, у вас есть несогласованность в пространствах. Используйте 2 пробела для отступа. У меня есть полное объяснение развертываний здесь. Я думаю, что это должно работать, когда вы исправляете пробелы.
Надеюсь, поможет
Я не думаю, что проблема с imagePullPolicy
, если у вас нет изображения локально. Ошибка autoscaling
, что означает, что он не может создавать реплики контейнера.
Можете ли вы установить replicas: 1
и попробовать?
Согласно документам kubectl,
Вы должны использовать версию kubectl, которая находится в пределах одной незначительной разницы версий вашего кластера.
Клиент kubectl v1.10, очевидно, выполняет запросы к серверу kubectl v1.14 без каких-либо новых (в 4 минорных версиях) обязательных параметров.
Для пользователей brew
переустановите kubernetes-cli
. Стоит проверить, какая установлена несовместимая версия. Для пользователей brew
проверьте команду ls -l $(which kubectl)
.
В Windows 10.0 удаление Docker помогло мне решить эту проблему. Делаем с кубектл и миникуб.
Я получал ошибку ниже при запуске 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
Пользователь 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