我正在尝试使用Helm Charts在Kubernetes Daemonset中传入一个命令参数,该参数执行从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}')"]
结果应该是在容器中设置变量,例如计算机类型=计算
我也尝试过使用如下命令+ 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行:找到未知的转义字符”
如果我从容器中运行导出命令,则该命令有效。
我的目标是能够从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
我知道值值:$ MACHINE_TYPE- $ HOSTNAME 不起作用,所以希望也能提供帮助。
答案 0 :(得分:0)
found unknown escape character 'w'
... rep -oP 'CATTLE_HOST_LABELS=.+?\w+' | awk -F '=' '{print $2}')"]
^)
错误消息似乎非常简单:backslash is magic in a double-quoted string
如果您使用更简单的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的最终容器环境变量(LABEL)
在这种情况下,您希望valueFrom: fieldPath: status.nodeName
块中的env:
设置HOSTNAME
,然后(正如您当前所做的那样)从其LABEL
构建MACHINE_TYPE
在执行实际的容器内命令之前的LABEL
组件。您不能(我知道)在kubernetes描述符的env
块中声明$(MACHINE_TYPE)-$(HOSTNAME)
,因为您正在混合隐喻,试图在影响该命令的kubernetes描述符的容器中运行命令< / em>的
我知道价值:$ MACHINE_TYPE- $ HOSTNAME不起作用,所以也希望得到帮助。提前谢谢。
有很多现有的SO答案,但语法是env:
假设这两个env-vars在Pod的getUserProfile
块中声明,否则