Kubernetes 创建部署意外的 SchemaError

我正在学习这个教程(https://www.baeldung.com/spring-boot-minikube) 我想在 yaml 文件(simple-crud-dpl. yaml)中创建 Kubernetes 部署:

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,正如教程中所描述的那样。一切正常,直到部署和服务。我做不到。

40580 次浏览

我认为问题不在于 imagePullPolicy,除非你没有本地的图像。错误是关于 autoscaling的,这意味着它不能创建容器的副本。

你能设置 replicas: 1并试一下吗?

今天在我的 Mac 上安装了 kubectl 之后也遇到了同样的问题。卸载 kubectl [ via brew uninstall kubectl]和重新安装[ brew install kubectl]为我解决了这个问题。

我附议@rennekon 的回答。我发现我有码头运行在我的机器,也安装 kubectl。Kubectl 的安装导致显示此问题。

我采取了以下步骤:

  • 使用 brew uninstall kubectl卸载它
  • 使用 brew install kubectl重新安装
  • (由于符号链接创建失败)我强制酿造使用 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个版本

这个错误令人困惑,但它只是意味着您的版本1.10没有将所有必需的参数发送到1.14 api。

在安装 Docker 之后,我在 minikube/Windows10上遇到了同样的问题。 它是由于 kubectl 的版本不匹配引起的,这个线程中已经提到过几次了。Docker 安装 kubectl 的1.10版本。
你有两个选择:

1)确保到达 k8s 仓的路径在 docker 中的路径之上
2)将“ c: Program Files Docker Docker resources bin”中的 kubectl 替换为正确的

在使用 brew 安装 kubectl 之后,应该运行:

  1. rm /usr/local/bin/kubectl

  2. brew link --overwrite kubernetes-cli

也可以选择:

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

根据 Kubectl 医生,

您必须使用与您的集群版本相差不大的 kubectl 版本。

Kubectl v1.10客户端显然对 kubectl v1.14服务器发出了请求,而没有一些新的(在4个次要版本中)所需的参数。

对于 brew用户,重新安装 kubernetes-cli。值得检查一下是什么安装了不兼容的版本。对于 brew用户,请检查命令符号链接 ls -l $(which kubectl)

对我来说 Docker 的安装是个问题。由于 Docker 现在提供了对 Kubernetes 的支持,所以它在安装 kubectl 的同时也安装了自己的安装。我在不知情的情况下下载了 kubectl 和 minikube 然后我的 minikube 被 Docker 的 kubectl 安装使用了。

确保它不会同时发生在你身上。

第二个原因是. yaml 文件中的 apiVersion 已被弃用。

我也有同样的问题。在我的 Mac 系统中,Kubectl是从 Docker 运行的,这是在我安装 Docker 时预先安装的。您可以使用以下命令检查这一点

ls -l $(which kubectl)

返回为

/usr/local/bin/kubectl-> /Applications/Docker.app/Content/Resources/bin/kubectlcode/应用程序/Docker.app/内容/资源/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)

我也有过类似的错误问题

Error: SchemaError (io.k8s.api.storage.v1beta1.CSIDriver List) : 无效对象没有其他属性

我的问题是,我的 Mac 使用的是安装了 gcp 工具的 google 的 kubectl。我的路径在进入/usr/local/bin/之前首先查看那里

一旦我从/usr/local/bin 运行 kubectl,我的问题就消失了。

在我的例子中,kubectl 总是通过 Gcloud 工具使用 google 的 kubectl,或者很可能在安装 Homebrew 和安装 Gcloud kubectl 之间存在冲突。我卸载了 Homebrewkubectl 并将 gcloud 工具升级到最新版本,最终在这个过程中也升级了 kubectl。这解决了我的问题。

我在安装了 Docker Client 和 Minikube 的 Windows10上

Error: 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. 现在输入 Powershell 的 ABc0。

  5. 检查新版本,如果它是你放在那里; kubectl version

现在你是好的,重新尝试你正在做的任务。

您可以在命令中使用“—— valid= false”,例如:

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

在 Windows 10.0上,卸载 Docker 帮助我解决了这个问题。

在 Windows10上运行 kubectl explain pod时,出现了以下错误

error: SchemaError(io.k8s.api.core.v1.NodeCondition): invalid object doesn't have additional properties

我安装了 Minikube 和 Docker 桌面。这个错误的原因,如前面的答案所提到的,是服务器(主要1次要15)和客户端版本(主要1次要10)之间的不匹配。客户端版本来自 Docker 桌面。 为了修复这个问题,我将 kubectl 客户端版本升级到 v1.15.1,如下所述

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

Mac 用户! ! !这是为那些谁安装了多克桌面第一。使用 application 命令时将显示错误。正如一些人在这里所说的,错误来自于版本错误匹配。我没有用自制程序安装 kubectl。当您安装 mac 的 docker 桌面时,更愿意选择 kubectl 自动获得安装。

为了解决这个问题,我所做的如下: 删除 kubectl 可执行文件

rm /usr/local/bin/kubectl

下载 kubectl: Curl-LO https://storage.googleapis.com/kubernetes-release/release/ $(curl-s < a href = “ https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl”rel = “ nofollow norefrer”> 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

我知道这已经被回答了,但是我想我应该发布我的回应,因为上面的回应是有帮助的,但是它花了我一段时间把它与 Azure 开发操作系统联系起来。

当我试图将一个应用程序从 Azure Devops 部署到 AKS 集群时,我遇到了这个错误。如上所述,这个错误可能出现的问题之一是因为版本不匹配,这是我的情况的原因。我通过将我的 AKS 版本更新到 kubectl 高级配置部分来修复它,如下图所示

Azure Dev Ops screenshot