73

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

4

18 回答 18

153

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

  1. rm /usr/local/bin/kubectl

  2. brew link --overwrite kubernetes-cli

并且还可以选择:

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

于 2019-04-07T21:56:39.523 回答
33

我支持@rennekon 的回答。我发现我的机器上运行了 docker,它也安装了kubectl. 安装 kubectl 会导致出现此问题。

我采取了以下步骤:

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

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

于 2019-03-31T05:21:24.790 回答
31

我也有同样的问题。在我的 Mac 系统中, 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)
于 2019-04-18T01:29:32.923 回答
26

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

1) 确保您的 k8s bin 的路径高于 docker 中的路径
2) 将 'c:\Program Files\Docker\Docker\resources\bin' 中的 kubectl 替换为正确的

于 2019-04-06T07:52:12.710 回答
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"}
于 2019-04-05T10:13:35.250 回答
6

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

kubectl create -f simple-crud-dpl.yaml --validate=false
于 2019-06-29T21:23:10.393 回答
5

您使用了错误的 kubectl 版本。

Kubectl与官方文档中描述的 1 版本上下兼容

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

于 2019-04-05T11:25:22.437 回答
2

我在安装了 Docker 客户端和 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.

现在你很好,重试你正在做的任何任务。

于 2019-06-13T10:43:35.897 回答
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
于 2019-07-28T07:33:13.827 回答
2

Mac用户!!!这是为那些首先安装 docker desktop 的人准备的。使用 apply 命令时会显示该错误。正如一些人在这里所说的那样,错误来自版本未匹配。我没有使用自制软件安装 kubectl。而是在为 mac 安装 docker desktop 时安装 kubectl auto get install。

为了解决这个问题,我所做的如下:删除 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

于 2019-08-31T21:18:47.343 回答
1

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

于 2019-03-30T21:28:41.243 回答
1

根据kubectl 文档

您必须使用与集群的一个次要版本差异内的 kubectl 版本。

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

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

于 2019-04-08T20:10:45.663 回答
1

对我来说,安装 Docker 是个问题。由于 Docker 现在带有 Kubernetes 支持,它会安装 kubectl 以及它自己的安装。我在不知不觉中下载了 kubectl 和 minikube,然后我的 minikube 被 Docker 的 kubectl 安装使用。

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

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

于 2019-04-14T15:18:02.550 回答
1

我有一个类似的错误问题

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

我的问题是我的 Mac 使用的是与 gcp 工具一起安装的谷歌 kubectl。我的路径在进入 /usr/local/bin/ 之前先看那里

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

于 2019-04-21T04:59:29.830 回答
1

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

于 2019-05-12T07:17:58.697 回答
0

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

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

于 2019-03-30T04:54:49.973 回答
0

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

于 2019-07-15T09:00:58.307 回答
0

我知道这已经得到了回答,但我应该发布我的回复,因为上面的回复很有帮助,但我花了一段时间才将它与 Azure Dev Ops 联系起来。

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

Azure Dev Ops 屏幕截图

于 2020-05-21T21:44:44.200 回答