我正在使用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 }}
但它也没有那样工作((
1条答案
按热度按时间qkf9rpyu1#
如果你在图表上运行
helm template --debug
,你会看到command:
被渲染成默认的Go格式,碰巧是语法上有效的YAML,但没有正确的含义。我希望它看起来像这是一个带有单个元素的YAML列表,它被处理为单个shell单词。
您需要强制它成为YAML列表,可能使用
toYaml
函数,如(其中
command:
的自然缩进是8个空格,indent 10
的值比此多两个空格,但{{ ... | indent }}
行本身并不缩进)。(有一个很好的论点认为这根本不应该是可配置的:很难想象有人试图部署这个图表,但希望
sidekiq
Deployment做一些除了运行Sidekiq worker之外的事情。我可以直接在templates/deployment-sidekiq.yaml
文件中写出命令。)