【问题标题】:How to fix json unmarshal error while executing kubectl patch command?执行 kubectl patch 命令时如何修复 json unmarshal 错误?
【发布时间】:2019-11-08 18:20:29
【问题描述】:

学习教程时:https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/ 我遇到了错误。以下命令失败:

kubectl patch sts web -p '{"spec":{"replicas":3}}'

Error from server (BadRequest): json: cannot unmarshal string into Go value of type map[string]interface {}

我该如何解决这个问题?

这是 pod 上的容器镜像:k8s.gcr.io/nginx-slim:0.8

我在 Windows 7 Pro 和标准 cmd shell 上使用 minikube。

kubectl 版本

Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.0", 
GitCommit:"2bd9643cee5b3b3a5ecbd3af
9d09018f0773c77", GitTreeState:"clean", BuildDate:"2019-09-18T14:36:53Z", 
GoVersion:"go1.12.9", Compiler:"gc"
Platform:"windows/amd64"}

Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.0", 
GitCommit:"2bd9643cee5b3b3a5ecbd3af
9d09018f0773c77", GitTreeState:"clean", BuildDate:"2019-09-18T14:27:17Z", 
GoVersion:"go1.12.9", Compiler:"gc"
Platform:"linux/amd64"}

【问题讨论】:

  • 您使用的是什么外壳,引用是否有可能令人伤心?
  • 我已经编辑了问题。

标签: json kubernetes


【解决方案1】:

尝试用双引号括起来,然后转义里面的双引号:

kubectl patch sts web -p "{\"spec\":{\"replicas\":3}}"

【讨论】:

  • 是的,我好像记得cmd.exe不理解单引号。
  • @coderanger -- 我明白了 -- 这就是为什么关于 shell 的问题。我只记得读过有关 OpenShift 的 oc 的类似问题 :-)
【解决方案2】:

由于你要进行缩放,你应该使用kubectl提供的命令:

kubectl scale statefulset web --replicas=3

【讨论】:

  • 没错,但我想知道如何修复这个补丁命令。教程中的以下补丁命令可能会失败。
  • 拜托,你能分享一下Kubernetes API Server版本吗?发出kubectl version 并粘贴输出
【解决方案3】:

除了接受的答案之外,如果您尝试从文件中应用补丁,您也可能会收到此错误。 在这种情况下,您可以按如下方式对文件进行分类:

kubectl patch deployment/<deployment-name> -p "$(cat <patch-file-name>.yaml)" --namespace <namespace name>

更多信息请参考here

【讨论】:

    猜你喜欢
    • 2021-08-30
    • 2016-11-11
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    相关资源
    最近更新 更多