Kubernetes创建部署意外SchemaError

Ark*_*ała 55 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
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时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"}
Run Code Online (Sandbox Code Playgroud)

我也在本地使用minikube,如教程中所述。一切正常,直到部署和服务。我做不到。

小智 132

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

  1. rm /usr/local/bin/kubectl

  2. brew link --overwrite kubernetes-cli

并且可以选择:

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

  • 你能解释一下这是做什么的吗? (15认同)

小智 29

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

我采取了以下步骤:

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

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


Sat*_*amy 26

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

ls -l $(which kubectl) 
Run Code Online (Sandbox Code Playgroud)

返回为

/ usr / local / bin / kubectl-> /Applications/Docker.app/Contents/Resources/bin/kubectlcode。

现在我们必须用用brew安装的kubectl覆盖符号链接

rm /usr/local/bin/kubectl

brew link --overwrite kubernetes-cli
Run Code Online (Sandbox Code Playgroud)

(最佳)

brew unlink kubernetes-cli && brew link kubernetes-cli
Run Code Online (Sandbox Code Playgroud)

验证

ls -l $(which kubectl)
Run Code Online (Sandbox Code Playgroud)


Hen*_*ijn 23

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

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


小智 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"}
Run Code Online (Sandbox Code Playgroud)


Raf*_*lho 6

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

kubectl create -f simple-crud-dpl.yaml --validate=false
Run Code Online (Sandbox Code Playgroud)


And*_*and 5

您使用了错误的 kubectl 版本。

Kubectl 兼容 1 版本上下,如官方文档中所述

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