Kubernetes创建部署意外SchemaError

时间:2019-03-29 12:25:58

标签: kubernetes kubectl kubernetes-deployment

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

19 个答案:

答案 0 :(得分:45)

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

  1. rm /usr/local/bin/kubectl

  2. brew link --overwrite kubernetes-cli

以及可选地:

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

答案 1 :(得分:14)

我第二次回答@rennekon。我发现我的机器上运行了docker,该机器还安装了kubectl。安装kubectl导致显示此问题。

我采取了以下步骤:

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

然后,我能够成功运行我的kubectl apply命令。

答案 2 :(得分:12)

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

1)确保k8s bin的路径在docker中的路径上方
2)用正确的

替换'c:\ Program Files \ Docker \ Docker \ resources \ bin'中的kubectl

答案 3 :(得分:5)

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

答案 4 :(得分:5)

我也有同样的问题。在我的系统中, kubectl 是从安装了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)

答案 5 :(得分:4)

您使用了错误的kubectl版本。

Kubectl与in the official docs所述的向上和向下兼容的版本1。

该错误令人困惑,但这仅表示您的版本1.10并未将所有必需的参数发送到1.14 API。

答案 6 :(得分:2)

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

  

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

我通过将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

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

答案 7 :(得分:1)

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

答案 8 :(得分:1)

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

答案 9 :(得分:1)

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

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

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

答案 10 :(得分:1)

我也遇到了类似的错误

  

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

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

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

答案 11 :(得分:1)

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

答案 12 :(得分:0)

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

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

Azure Dev Ops screenshot

答案 13 :(得分:0)

从表面上看,您在空格中存在不一致之处。缩进使用2个空格。 我对部署here有完整的解释。我认为当您固定空间时应该可以使用。

希望有帮助

答案 14 :(得分:0)

在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 Desktop。 要修复,我已按照here

中的说明将kubectl客户端版本升级到v1.15.1。
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.15.1/bin/windows/amd64/kubectl.exe

答案 15 :(得分:0)

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

答案 16 :(得分:0)

您可以在命令中使用“ --validate = false”。例如:

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

答案 17 :(得分:0)

根据kubectl docs

  

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

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

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

答案 18 :(得分:0)

除非您没有本地图像,否则我认为问题imagePullPolicy不会出问题。该错误与autoscaling有关,这意味着它无法创建容器的副本。

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