kubectl apply 失败,就像提供互斥选项一样

kubectl apply fails as if providing mutually exclusive options

我正在尝试使用 kubectl apply 命令更新 k8s deployment。该部署已存在于集群中,并且是使用现在提供给 apply 命令的相同 YAML 文件创建的,但略有更改。

$ kubectl apply –f ./my_app_deployment_update.yaml
error: must specify one of -f and -k

第一次创建对象时也出现了这个问题,但我当时使用 kubectl create.

解决了这个问题

当然,该文件在当前文件夹中可用。我还检查过我没有定义为 kubectl 的别名,所以我 运行 的实际命令就是您在上面看到的 kubectl

最后,我的kubectl版本是:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.4", GitCommit:"e6c093d87ea4cbb530a7b2ae91e54c0842d8308a", GitTreeState:"clean", BuildDate:"2022-02-16T12:30:48Z", GoVersion:"go1.17.6", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.12", GitCommit:"e2a822d9f3c2fdb5c9bfbe64313cf9f657f0a725", GitTreeState:"clean", BuildDate:"2020-05-06T05:09:48Z", GoVersion:"go1.12.17", Compiler:"gc", Platform:"linux/amd64"}
WARNING: version difference between client (1.23) and server (1.15) exceeds the supported minor version skew of +/-1

我知道上面的警告,但我既不能降低我的 kubectl 当前版本(因为我使用 +1 集群),也不能更新 k8s 中的版本簇。除了 IMO,client/server 版本不匹配不应该是上述错误的原因,关于提供给客户端本身的参数。

最后,我一直在检查文档,但我没有发现任何对故障排除有用的东西,甚至对 -k 选项本身也没有。

知道发生了什么或如何解决吗?也许我在更高层次上误解了 kubectl apply?

的用法

更新 1

我检查过 this other post 也有同样的错误,但我没有缩进错误。 Linter 没有抱怨,在线验证器也说没问题,并且 create 命令没有抱怨任何东西,所以文件的缩进一直没问题。

这似乎不是一个非常用户友好的错误,并且可以由其他类型的问题触发,所以我们在这里玩猜...

问题是它正在接收 no argument,而不是两者。

我似乎是从 powerpoint 文件中复制了命令,我在测试之前直接在其中编写了它。原来的字符被替换为另一个看起来相似的字符:

–f vs -f

First: 8211, Hex 2013, Oct 20023, Digr -N
Second: 45,  Hex 2d,  Octal 055

所以这个不正确的字符破坏了解析,并且 kubectl 没有提供参数。只需将其替换为上面第二个示例中的常规 - 即可使命令正常工作。