Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes kubectl修补程序请求抛出“;在此上下文中不允许映射值“;_Kubernetes_Kubectl - Fatal编程技术网

Kubernetes kubectl修补程序请求抛出“;在此上下文中不允许映射值“;

Kubernetes kubectl修补程序请求抛出“;在此上下文中不允许映射值“;,kubernetes,kubectl,Kubernetes,Kubectl,我试图修补kubernetes部署对象的活动性和就绪性参数。下面是我的补丁.yml --- spec: template: spec: containers: - livenessProbe: initialDelaySeconds: 280 name: notification-service readinessProbe: ini

我试图修补kubernetes部署对象的活动性和就绪性参数。下面是我的
补丁.yml

--- 
spec: 
  template: 
    spec: 
      containers: 
        - 
          livenessProbe: 
            initialDelaySeconds: 280
          name: notification-service
          readinessProbe: 
            initialDelaySeconds: 220
请求:

kubectl -n my-namespace --kubeconfig=my_config --context=dev patch deployment notification-service --patch "$(cat patch.yml)"
答复:

kubectl : error: unable to parse "spec:   template:     spec:       containers:       - name: notification-service                 
readinessProbe:           initialDelaySeconds: 220         livenessProbe:           initialDelaySeconds: 280": yaml: mapping values are not allowed in this 
context
At line:1 char:1
+ kubectl -n my-namespace --kubeconfig=my_config --context=dev patch  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (error: unable t...in this context:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
编辑: 下面是
kubectl version
命令的输出

Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e
9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:55:54Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"wind
ows/386"}
Server Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.4", GitCommit:"c27b913fddd1a6c480c229191a087698
aa92f0b1", GitTreeState:"clean", BuildDate:"2019-02-28T13:30:26Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"lin
ux/amd64"}
是引发此错误的行。为了验证它,我尝试创建了一个示例go程序。下面是代码片段。令我惊讶的是,下面的代码能够处理yaml文件

package main

import (
    "fmt"
    "io/ioutil"
    //"sigs.k8s.io/yaml" // Part of latest master k8s master vendor folder
    yaml2 "github.com/ghodss/yaml" // Part of release 1.10 k8s vendor folder
)


func check(e error) {
    if e != nil {
        panic(e)
    }
}

func main(){
    dat, err := ioutil.ReadFile("D:\\EclipseIDEJavaEEDevelopers\\Workspace\\patch.yaml")
    check(err)
    patch:=string(dat)

    patchBytes, err1 := yaml2.YAMLToJSON([]byte(patch))

    if err != nil {
         fmt.Errorf("unable to parse %q: %v", dat, err1)
    }else{
        fmt.Println("json conversion completed ",string(patchBytes))
    }


}
输出:

json conversion completed  {"spec":{"template":{"spec":{"containers":[{"livenessProbe":{"initialDelaySeconds":280},"name":"notification-service","readinessProbe":{"initialDelaySeconds":220}}]}}}}

问题在于
powershell
和围绕命令替换的双引号。如果我们在powershell中的命令替换周围添加双引号,它会从yml中删除新行,因此kubectl无法将其转换为json

在bash中也是如此。因为我在使用powershell,所以它对我不起作用。正确的命令如下所示

kubectl -n my-namespace --kubeconfig=my_config --context=dev patch deployment notification-service --patch $(cat patch.yml)

注意:yml仍然存在一些问题。所以,当我说它有效时,我的意思是当前的问题已经解决了。从kubernetes的角度来看,yml有很多问题。

问题在于
powershell和围绕命令替换的双引号。如果我们在powershell中的命令替换周围添加双引号,它会从yml中删除新行,因此kubectl无法将其转换为json

在bash中也是如此。因为我在使用powershell,所以它对我不起作用。正确的命令如下所示

kubectl -n my-namespace --kubeconfig=my_config --context=dev patch deployment notification-service --patch $(cat patch.yml)

注意:yml仍然存在一些问题。所以,当我说它有效时,我的意思是当前的问题已经解决了。从kubernetes的角度来看,yml有很多问题。

如果使用gc分隔符,可以在pwsh中执行此操作:

    kubectl patch deployment my-deployment --patch "$(gc my-patch.yaml -Delimiter ?)" -n my-namespace

如果使用gc分隔符,则可以在pwsh中执行此操作:

    kubectl patch deployment my-deployment --patch "$(gc my-patch.yaml -Delimiter ?)" -n my-namespace

您是否可以包括
kubectl get deployment notification service--output yaml
的输出?您应该验证您的yaml不包含特殊字符和制表符。我已经通过在线工具完成了验证和格式化。但是没有帮助,我已经做了。我需要这个问题的解决方案。我们更喜欢使用patch而不是apply来修改这些参数。你到底为什么要
$(cat patch.yml)
而不是只将值提供给
-f patch.yml
?此外,kubectl补丁的帮助清楚地说明了
-p,--patch='':要应用于资源**JSON**文件的补丁。
;在子shell中使用
cat
,会丢失将yaml转换为yaml的换行符(因为空格很重要)您是否可以包括
kubectl get deployment notification service--output yaml
的输出?您应该验证您的yaml不包含特殊字符和制表符。我已经通过在线工具完成了验证和格式化。但是没有帮助,我已经做了。我需要这个问题的解决方案。我们更喜欢使用patch而不是apply来修改这些参数。你到底为什么要
$(cat patch.yml)
而不是只将值提供给
-f patch.yml
?此外,kubectl补丁的帮助清楚地说明了
-p,--patch='':要应用于资源**JSON**文件的补丁。
;在子shell中使用
cat
,会丢失将yaml转换为yaml的换行符(因为空格很重要)