json Eks helm-yaml问题

jxct1oxe  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(155)

我正在使用helm部署到EKS,问题是错误:无法创建containerd任务:无法创建填充任务:OCI运行时创建失败:runc创建失败:无法启动容器进程:exec:“bundle exec sidekiq --environment dev”:在$PATH中找不到可执行文件:未知
thisvalue.yml

sidekiqCommand:
  - "bundle"
  - "exec"
  - "sidekiq"
  - "--environment"
  - "dev"

deployment.yml

name: sidekiq
       securityContext:
         {{- toYaml .Values.securityContext | nindent 12 }}
       image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
       imagePullPolicy: {{ .Values.image.pullPolicy }}
       command: {{ .Values.sidekiqCommand }}

当在本地运行时,或者当我把这个命令放到容器的ENTRYPOINT时,一切都正常。但是当我使用Helm charts部署它时-不,我猜问题可能是它没有正确地处理yml到json
一切都很完美

name: sidekiq
       securityContext:
         {{- toYaml .Values.securityContext | nindent 12 }}
       image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
       imagePullPolicy: {{ .Values.image.pullPolicy }}
command: ["bundle", "exec", "sidekiq", "--environment", "dev"]

我试图传递一个参数列表,并将{{ .Values.sidekiqCommand }}替换为以下代码:

{{- $command := .Values.sidekiqCommand }}
command:
{{- range $arg := $command }}
  - {{ $arg }}
{{- end }}

但它也没有那样工作((

qkf9rpyu

qkf9rpyu1#

如果你在图表上运行helm template --debug,你会看到command:被渲染成默认的Go格式,碰巧是语法上有效的YAML,但没有正确的含义。我希望它看起来像

command: [bundle exec sidekiq --environment dev]

这是一个带有单个元素的YAML列表,它被处理为单个shell单词。
您需要强制它成为YAML列表,可能使用toYaml函数,如

command:
{{ .Values.sidekiqCommand | toYaml | indent 10 }}

(其中command:的自然缩进是8个空格,indent 10的值比此多两个空格,但{{ ... | indent }}行本身并不缩进)。
(有一个很好的论点认为这根本不应该是可配置的:很难想象有人试图部署这个图表,但希望sidekiq Deployment做一些除了运行Sidekiq worker之外的事情。我可以直接在templates/deployment-sidekiq.yaml文件中写出命令。)

相关问题