Kubernetes守护进程HELM图表-使用命令参数使用cURL设置环境变量

Kubernetes守护进程HELM图表-使用命令参数使用cURL设置环境变量,kubernetes,kubernetes-helm,Kubernetes,Kubernetes Helm,我试图在Kubernetes守护进程中通过Helm图表传入一个命令参数,它执行从cURL结果传入的新环境变量的导出 command: ["/bin/bash","-c","export MACHINE_TYPE=$(curl --unix-socket /var/run/docker.sock http://docker/containers/rancher-agent/json | grep -oP 'CATTLE_HOST_LABELS=.+?\w+' | awk -F '=' '{prin

我试图在Kubernetes守护进程中通过Helm图表传入一个命令参数,它执行从cURL结果传入的新环境变量的导出

command: ["/bin/bash","-c","export MACHINE_TYPE=$(curl --unix-socket /var/run/docker.sock http://docker/containers/rancher-agent/json | grep -oP 'CATTLE_HOST_LABELS=.+?\w+' | awk -F '=' '{print $2}')"]
结果应该是在容器中设置变量,例如MACHINE_TYPE=compute

我还尝试使用command+args,如下所示:

command: ["/bin/bash","-c"]
args: ["export MACHINE_TYPE=$(`curl --unix-socket /var/run/docker.sock http://docker/containers/rancher-agent/json | grep -oP 'CATTLE_HOST_LABELS=.+?\w+' | awk -F = '{print $2}'`)"]
当我尝试部署守护程序集时,会收到一条错误消息 “错误:在/templates/daemonset.YAML上出现YAML解析错误:将YAML转换为JSON时出错:YAML:第46行:找到未知转义字符”

如果我从容器中运行export命令,它就会工作

我的目标是能够从daemonset.yaml中设置一个最终的容器环境变量(LABEL),该变量由两个环境变量串联而成,例如

containers:
  - name: {{ .Chart.Name }}
    image: "{{.Values.image.repository}}:{{.Values.image.tag}}"
    imagePullPolicy: {{.Values.image.pullPolicy}}
    env:
      - name: LABEL
        value: $MACHINE_TYPE-$HOSTNAME
    command: ["/bin/bash","-c"]
    args: ["export MACHINE_TYPE=$(`curl --unix-socket /var/run/docker.sock http://docker/containers/rancher-agent/json | grep -oP 'CATTLE_HOST_LABELS=.+?\w+' | awk -F = '{print $2}'`)"]
因此,LABEL变量容器中的“env”输出将是

LABEL=compute-ip-x-x-x-x.ap-southeast-2.compute.internal
我知道,value:$MACHINE\u TYPE-$HOSTNAME这个值不起作用,所以希望能得到帮助

found unknown escape character 'w'
     ... rep -oP 'CATTLE_HOST_LABELS=.+?\w+' | awk -F '=' '{print $2}')"]
                                         ^)
错误消息似乎非常简单:

如果使用更直接的yaml结构,而不使用双引号字符串,则可以根据需要使用单反斜杠:

command:
- /bin/bash
- -c
- export MACHINE_TYPE=$(curl --unix-socket /var/run/docker.sock http://docker/containers/rancher-agent/json | grep -oP 'CATTLE_HOST_LABELS=.+?\w+' | awk -F '=' '{print $2}')
得益于更加清晰的语法


另外,

daemonset.yaml中的最终容器环境变量(标签)

在这种情况下,您希望
env:
块中的
valueFrom:fieldPath:status.nodeName
设置
主机名
,然后(正如您当前所做的那样)在执行实际的容器内命令之前,从其
机器类型
组件构建
标签。您不能(我知道)在kubernetes描述符的
env
块中声明
LABEL
,因为您试图在影响该命令的kubernetes描述符的容器中运行命令时混用了隐喻

我知道:$MACHINE\u TYPE-$HOSTNAME的值不起作用,所以希望能得到帮助。提前谢谢

关于这一点,现有的SO答案很多,但语法是
$(MACHINE\u TYPE)-(HOSTNAME)
假设这两个环境变量在Pod的
env:
块中声明,而不是在其他块中声明