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
没有提供参数。只需将其替换为上面第二个示例中的常规 -
即可使命令正常工作。
我正在尝试使用 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
没有提供参数。只需将其替换为上面第二个示例中的常规 -
即可使命令正常工作。