Kubernetes 创建部署意外的 SchemaError
Kubernetes create deployment unexpected SchemaError
我正在学习该教程 (https://www.baeldung.com/spring-boot-minikube)
我想在 yaml 文件中创建 Kubernetes 部署 (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,如教程中所述。一切正常,直到部署和服务。我做不到。
我认为问题不在于 imagePullPolicy
,除非您没有本地图像。错误是关于 autoscaling
,这意味着它无法创建容器的副本。
你可以设置 replicas: 1
并试一试吗?
今天 Mac 在我的 Mac 上安装 kubectl 后 运行 遇到了同样的问题。 [通过 brew uninstall kubectl
] 卸载 kubectl 并重新安装 [brew install kubectl
] 解决了我的问题。
我支持@rennekon 的回答。我发现我的机器上有 docker 运行ning,它也安装了 kubectl
。安装 kubectl 会导致显示此问题。
我采取了以下步骤:
- 已使用
brew uninstall kubectl
卸载它
- 使用
brew install kubectl
重新安装
- (由于符号链接创建失败)我强制 brew 使用
brew link --overwrite kubernetes-cli
创建符号链接
然后我能够 运行 我的 kubectl apply
命令成功。
您的客户端版本太旧。在我的环境中,这个版本带有 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 个版本 in the official docs
该错误令人困惑,但这只是意味着您的 1.10 版没有将所有必需的参数发送到 1.14 api。
安装 Docker 后,我在 minikube/ Windows 10 上遇到了同样的问题。
这是由 kubectl 的版本不匹配引起的,在这个线程中已经提到了几次。 Docker 安装 kubectl 1.10 版。
您有几个选择:
1) 确保你的 k8s bin 的路径在 docker
中的路径之上
2) 将 'c:\Program Files\Docker\Docker\resources\bin' 中的 kubectl 替换为正确的
用 brew 安装 kubectl 后你应该 运行:
rm /usr/local/bin/kubectl
brew link --overwrite kubernetes-cli
也可选择:
brew link --overwrite --dry-run kubernetes-cli
.
根据kubectl docs,
You must use a kubectl version that is within one minor version difference of your cluster.
kubectl v1.10 客户端显然向 kubectl v1.14 服务器发出请求时没有一些新的(在 4 个次要版本中)必需的参数。
对于 brew
用户,重新安装 kubernetes-cli
。值得检查是什么安装了不兼容的版本。对于 brew
用户,检查命令符号链接 ls -l $(which kubectl)
。
对我来说 Docker 安装是个问题。由于 Docker 现在带有 Kubernetes 支持,它会在安装 kubectl 的同时安装它自己的安装。我在不知不觉中下载了 kubectl 和 minikube,然后 Docker 的 kubectl 安装使用了我的 minikube。
确保它不会发生在你身上。
第二个原因是您的 .yaml 文件中已弃用的 apiVersion。
我也遇到了同样的问题。在我的 Mac 系统中,kubectl 是 docker 中的 运行,它是在我安装 Docker 时预装的。你可以使用下面的命令
来检查这个
ls -l $(which kubectl)
其中returns为
/usr/local/bin/kubectl ->
/Applications/Docker.app/Contents/Resources/bin/kubectlcode.
现在我们必须用使用 brew 安装的 kubectl 覆盖符号链接
rm /usr/local/bin/kubectl
brew link --overwrite kubernetes-cli
(可选)
brew unlink kubernetes-cli && brew link kubernetes-cli
验证
ls -l $(which kubectl)
我遇到了类似的错误
error: SchemaError(io.k8s.api.storage.v1beta1.CSIDriverList): invalid object doesn't have additional properties
我的问题是我的 mac 使用的是 google 的 kubectl,它是与 gcp 工具一起安装的。在进入 /usr/local/bin/
之前,我的路径先看那里
一旦我从 /usr/local/bin 运行 kubectl 我的问题就消失了。
在我的例子中,kubectl 总是通过 gcloud 工具使用 google 的 kubectl,或者安装的 Homebrew 和安装的 Gcloud kubectl 之间很可能存在冲突。我卸载了 Homebrew kubectl 并将 gcloud 工具升级到最新版本,最终也在此过程中升级了 kubectl。它解决了我的问题。
我在 Windows 10 上安装了 Docker 客户端和 Minikube。我收到以下错误;
error: SchemaError(io.k8s.api.core.v1.Node): invalid object doesn't have additional properties
我通过将 kubectl.exe 的版本更新为 minikube 使用的版本来解决它。以下是步骤:
注意:Minikube 倾向于使用最新版本的 Kubernetes,因此建议获取最新的 kubectl。
导航到 kubectl 所在的 Docker 路径,例如
C:\Program Files\Docker\Docker\resources\bin
将下载的 kubectl.exe 放在那里。如果它要求您更换它,请更换。
现在在 Powershell 中输入 refreshenv
。
检查新版本是否是您放置的版本; kubectl version
.
现在你很好了,重试你正在做的任何任务。
您可以在命令中使用“--validate=false”。例如:
kubectl create -f simple-crud-dpl.yaml --validate=false
在 windows 10.0 上,卸载 Docker 帮助我解决了这个问题。使用 kubectl 和 minikube。
我在 windows 10
运行 kubectl explain pod
时遇到错误
error: SchemaError(io.k8s.api.core.v1.NodeCondition): invalid object doesn't have additional properties
我同时安装了 Minikube 和 Docker Desktop。正如前面的答案中提到的,此错误的原因是服务器(主要 1 次要 15)和客户端版本(主要 1 次要 10)之间不匹配。客户端版本来自 Docker 桌面版。
为了解决这个问题,我按照 here
的描述将 kubectl 客户端版本升级到了 v1.15.1
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.15.1/bin/windows/amd64/kubectl.exe
Mac 用户!!!这是为那些先安装 docker 桌面的人准备的。当您使用 apply 命令时,将显示该错误。正如一些人在这里所说的那样,错误来自版本不匹配。我没有使用自制软件安装 kubectl。当您为 mac.
安装 docker 桌面时,kubectl 会自动安装
为了解决这个问题,我所做的如下:
删除 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
我知道这已经得到回答,但我应该 post 我的回复,因为上面的回复很有帮助,但我花了一段时间才将其与 Azure Dev Ops 联系起来。
我在尝试从 Azure Devops 将应用程序部署到 AKS 群集时收到此错误。如上所述,此错误可能出现的问题之一是版本不匹配,这是我的原因。我通过将我的 AKS 版本更新到 kubectl 高级配置部分来修复它,如下图所示
我正在学习该教程 (https://www.baeldung.com/spring-boot-minikube) 我想在 yaml 文件中创建 Kubernetes 部署 (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,如教程中所述。一切正常,直到部署和服务。我做不到。
我认为问题不在于 imagePullPolicy
,除非您没有本地图像。错误是关于 autoscaling
,这意味着它无法创建容器的副本。
你可以设置 replicas: 1
并试一试吗?
今天 Mac 在我的 Mac 上安装 kubectl 后 运行 遇到了同样的问题。 [通过 brew uninstall kubectl
] 卸载 kubectl 并重新安装 [brew install kubectl
] 解决了我的问题。
我支持@rennekon 的回答。我发现我的机器上有 docker 运行ning,它也安装了 kubectl
。安装 kubectl 会导致显示此问题。
我采取了以下步骤:
- 已使用
brew uninstall kubectl
卸载它
- 使用
brew install kubectl
重新安装
- (由于符号链接创建失败)我强制 brew 使用
brew link --overwrite kubernetes-cli
创建符号链接
然后我能够 运行 我的 kubectl apply
命令成功。
您的客户端版本太旧。在我的环境中,这个版本带有 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 个版本 in the official docs
该错误令人困惑,但这只是意味着您的 1.10 版没有将所有必需的参数发送到 1.14 api。
安装 Docker 后,我在 minikube/ Windows 10 上遇到了同样的问题。
这是由 kubectl 的版本不匹配引起的,在这个线程中已经提到了几次。 Docker 安装 kubectl 1.10 版。
您有几个选择:
1) 确保你的 k8s bin 的路径在 docker
中的路径之上
2) 将 'c:\Program Files\Docker\Docker\resources\bin' 中的 kubectl 替换为正确的
用 brew 安装 kubectl 后你应该 运行:
rm /usr/local/bin/kubectl
brew link --overwrite kubernetes-cli
也可选择:
brew link --overwrite --dry-run kubernetes-cli
.
根据kubectl docs,
You must use a kubectl version that is within one minor version difference of your cluster.
kubectl v1.10 客户端显然向 kubectl v1.14 服务器发出请求时没有一些新的(在 4 个次要版本中)必需的参数。
对于 brew
用户,重新安装 kubernetes-cli
。值得检查是什么安装了不兼容的版本。对于 brew
用户,检查命令符号链接 ls -l $(which kubectl)
。
对我来说 Docker 安装是个问题。由于 Docker 现在带有 Kubernetes 支持,它会在安装 kubectl 的同时安装它自己的安装。我在不知不觉中下载了 kubectl 和 minikube,然后 Docker 的 kubectl 安装使用了我的 minikube。
确保它不会发生在你身上。
第二个原因是您的 .yaml 文件中已弃用的 apiVersion。
我也遇到了同样的问题。在我的 Mac 系统中,kubectl 是 docker 中的 运行,它是在我安装 Docker 时预装的。你可以使用下面的命令
来检查这个ls -l $(which kubectl)
其中returns为
/usr/local/bin/kubectl -> /Applications/Docker.app/Contents/Resources/bin/kubectlcode.
现在我们必须用使用 brew 安装的 kubectl 覆盖符号链接
rm /usr/local/bin/kubectl
brew link --overwrite kubernetes-cli
(可选)
brew unlink kubernetes-cli && brew link kubernetes-cli
验证
ls -l $(which kubectl)
我遇到了类似的错误
error: SchemaError(io.k8s.api.storage.v1beta1.CSIDriverList): invalid object doesn't have additional properties
我的问题是我的 mac 使用的是 google 的 kubectl,它是与 gcp 工具一起安装的。在进入 /usr/local/bin/
之前,我的路径先看那里一旦我从 /usr/local/bin 运行 kubectl 我的问题就消失了。
在我的例子中,kubectl 总是通过 gcloud 工具使用 google 的 kubectl,或者安装的 Homebrew 和安装的 Gcloud kubectl 之间很可能存在冲突。我卸载了 Homebrew kubectl 并将 gcloud 工具升级到最新版本,最终也在此过程中升级了 kubectl。它解决了我的问题。
我在 Windows 10 上安装了 Docker 客户端和 Minikube。我收到以下错误;
error: SchemaError(io.k8s.api.core.v1.Node): invalid object doesn't have additional properties
我通过将 kubectl.exe 的版本更新为 minikube 使用的版本来解决它。以下是步骤:
注意:Minikube 倾向于使用最新版本的 Kubernetes,因此建议获取最新的 kubectl。
导航到 kubectl 所在的 Docker 路径,例如
C:\Program Files\Docker\Docker\resources\bin
将下载的 kubectl.exe 放在那里。如果它要求您更换它,请更换。
现在在 Powershell 中输入
refreshenv
。检查新版本是否是您放置的版本;
kubectl version
.
现在你很好了,重试你正在做的任何任务。
您可以在命令中使用“--validate=false”。例如:
kubectl create -f simple-crud-dpl.yaml --validate=false
在 windows 10.0 上,卸载 Docker 帮助我解决了这个问题。使用 kubectl 和 minikube。
我在 windows 10
运行kubectl explain pod
时遇到错误
error: SchemaError(io.k8s.api.core.v1.NodeCondition): invalid object doesn't have additional properties
我同时安装了 Minikube 和 Docker Desktop。正如前面的答案中提到的,此错误的原因是服务器(主要 1 次要 15)和客户端版本(主要 1 次要 10)之间不匹配。客户端版本来自 Docker 桌面版。 为了解决这个问题,我按照 here
的描述将 kubectl 客户端版本升级到了 v1.15.1curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.15.1/bin/windows/amd64/kubectl.exe
Mac 用户!!!这是为那些先安装 docker 桌面的人准备的。当您使用 apply 命令时,将显示该错误。正如一些人在这里所说的那样,错误来自版本不匹配。我没有使用自制软件安装 kubectl。当您为 mac.
安装 docker 桌面时,kubectl 会自动安装为了解决这个问题,我所做的如下: 删除 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
我知道这已经得到回答,但我应该 post 我的回复,因为上面的回复很有帮助,但我花了一段时间才将其与 Azure Dev Ops 联系起来。
我在尝试从 Azure Devops 将应用程序部署到 AKS 群集时收到此错误。如上所述,此错误可能出现的问题之一是版本不匹配,这是我的原因。我通过将我的 AKS 版本更新到 kubectl 高级配置部分来修复它,如下图所示