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 后你应该 运行:

  1. rm /usr/local/bin/kubectl

  2. 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。

  1. Download the matching version of kubectl.exe.

  2. 导航到 kubectl 所在的 Docker 路径,例如 C:\Program Files\Docker\Docker\resources\bin

  3. 将下载的 kubectl.exe 放在那里。如果它要求您更换它,请更换。

  4. 现在在 Powershell 中输入 refreshenv

  5. 检查新版本是否是您放置的版本; 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 高级配置部分来修复它,如下图所示