Kubernetes创建部署意外SchemaError


68

我正在关注该教程(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,如教程中所述。一切正常,直到部署和服务为止。我做不到。


我通常希望看到一条线apiVersion: v1; 添加该帮助吗?
David Maze

对于其他apiVersion,结果仍然相同
ArkadiuszMigała19年

您是否尝试过整理Yaml?有时,这有助于解决一些细微的格式错误。
Frank Yucheng Gu

1
我只是在Mac上安装了minikube,并且在另一个使用远程文件的教程中遇到了类似的问题。我的错误略有不同: 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设置在某处弄乱了
rennekon

Answers:



33

我第二个@rennekon的答案。我发现我的机器上同时运行了docker,该机器也可以安装kubectl。安装kubectl导致显示此问题。

我采取了以下步骤:

  • 使用卸载它 brew uninstall kubectl
  • 重新安装使用 brew install kubectl
  • (由于符号链接创建失败)我强制brew使用以下命令创建符号链接 brew link --overwrite kubernetes-cli

这样我便能够kubectl apply成功运行命令。


相同,但是gcloud相对于我要定位的集群,它是安装了自己的过时的工具,kubectl
Tom McKenzie,

29

我也有同样的问题。在我的Mac系统中,kubectldocker运行,而docker是在我安装Docker时预先安装的。您可以使用以下命令进行检查

ls -l $(which kubectl) 

返回为

/ 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)

26

安装Docker后,我在minikube / Windows 10上遇到了相同的问题。这是由于该线程中已经多次提及kubectl的版本不匹配引起的。Docker安装了1.10版本的kubectl。
您有两种选择:

1)确保k8s bin的路径在docker中的路径上方
2)用正确的路径替换'c:\ Program Files \ Docker \ Docker \ resources \ bin'中的kubectl


为我修复了此问题,我只是where kubectl在命令行中运行以验证默认使用的版本,然后curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.15.0/bin/windows/amd64/kubectl.exe获取最新版本。
詹姆斯·埃比

12

您的客户端版本太旧。在我的环境中,该版本随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"}

对我来说一样,只是替换了exe,现在一切都很好
PmanAce

似乎比接受的答案更相关。它回答“什么”和“为什么”。
弗拉德·尼基福罗夫



2

我在同时安装了Docker Client和Minikube的Windows 10上。我在下面收到错误;

错误:SchemaError(io.k8s.api.core.v1.Node):无效的对象没有其他属性

我通过将kubectl.exe的版本更新为minikube使用的版本来解决该问题。步骤如下:

注意:Minikube倾向于使用最新版本的Kubernetes,因此建议抓住最新的Kubectl。

  1. 下载匹配版本的kubectl.exe

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

  3. 将下载的kubectl.exe放在此处。如果它要求您更换它,请这样做。

  4. 现在输入refreshenvPowershell。

  5. 检查新版本是否已放置在此处;kubectl version

现在您感觉很好,请重试您正在执行的所有任务。


2

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

2

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/达尔文/ 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


1

今天在我的Mac上安装了kubectl之后遇到了同样的问题。[通过brew uninstall kubectl]卸载kubectl并重新安装[ brew install kubectl]为我解决了该问题。


1

根据kubectl文档

您所使用的kubectl版本必须在集群的一个较小版本差异之内。

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

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


1

对我来说,Docker安装是个问题。由于Docker现在具有Kubernetes支持,因此它会同时安装kubectl和自己的安装程序。我在不知道的情况下下载了kubectl和minikube,然后Docker的kubectl安装正在使用我的minikube。

确保您也没有发生这种情况。

第二个原因是您的.yaml文件中的apiVersion不推荐使用。


1

我有一个类似的错误问题

错误:SchemaError(io.k8s.api.storage.v1beta1.CSIDriverList):无效的对象没有其他属性

我的问题是我的Mac正在使用随gcp工具安装的Google的kubectl。我的路径先进入那里,然后进入/ usr / local / bin /

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


1

就我而言,kubectl始终使用Google的gcloud kubectl工具,或者安装的Homebrew和安装Gcloud的kubectl之间很可能存在冲突。我卸载了Homebrew kubectl并将gcloud工具升级到最新版本,最终在此过程中也升级了kubectl。它解决了我的问题。


0

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

您可以设置replicas: 1并尝试一下吗?


0

在Windows 10.0上,卸载Docker帮助我解决了这个问题。使用kubectl和minikube。


0

我知道已经回答了这个问题,但是我应该发布我的回答,因为上面的回答很有帮助,但是花了我一段时间才将其与Azure Dev Ops相关。

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

Azure Dev Ops屏幕截图

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.