我是 Helm 的新手。我想为
authzed/spicedb
values.yaml
authzed:
replicaCount: 1
app:
name: authzed
image:
repository: authzed/spicedb
tag: latest
pullPolicy: Always
ports:
- containerPort: 8443
- containerPort: 50051
command: ["spicedb", "serve"]
env:
SPICEDB_GRPC_NO_TLS: "true"
SPICEDB_GRPC_PRESHARED_KEY: "abcdefgh"
SPICEDB_DATASTORE_ENGINE: "postgres"
SPICEDB_DATASTORE_CONN_URI: "postgresql://postgres:abcs@postgres-container:5432/databasename?sslmode=disable"
以及 helm 图表模板中的
deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.app.name }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Values.app.name }}
template:
metadata:
labels:
app: {{ .Values.app.name }}
spec:
containers:
- name: {{ .Values.app.name }}
image: "{{ .Values.app.image.repository }}:{{ .Values.app.image.tag }}"
imagePullPolicy: {{ .Values.app.image.pullPolicy }}
{{- if .Values.app.ports }}
ports:
{{- range .Values.app.ports }}
- containerPort: {{ .containerPort }}
{{- end }}
{{- end }}
{{- if .Values.app.command }}
command: {{ .Values.app.command }}
{{- end }}
# command: ["spicedb", "serve"]
{{- if .Values.app.env }}
env:
{{- range $key, $value := .Values.app.env }}
- name: {{ $key }}
value: {{ $value | quote }}
{{- end }}
{{- end }}
点击部署时我遇到一个问题:
Error: failed to start container "authzed": Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "spicedb serve": executable file not found in $PATH: unknown
当我在运行 kubectl 描述 pod 时调查命令时:
Command:
spicedb serve
=> 不行
我将此行
command: ["spicedb", "serve"]
添加到 deployment.yaml
,然后得到预期的结果。
Command:
spicedb
serve
那么为什么我不能在
values.yaml
中输入相同的内容呢? 在 pod 规范 中,
command:
始终是字符串列表。另一方面,Go 模板表达式 {{ ... }}
始终发出纯字符串,并对非字符串进行一些自动格式化,而这些非字符串不一定是 YAML。
toYaml
扩展功能;例如
{{- with .Values.app.command }}
command:
{{ . | toYaml | indent 10 }}
{{- end }}
注意这里的缩进:包含
{{
的行上的 indent
从第一列开始,然后 indent
数字是需要缩进的空格数。这里的数字是 command:
行的缩进,再加上两个空格。
如果您希望将其放在一行上,可以使用一些技巧。
toJson
而不是 toYaml
实际上可以正常工作(作为设计点,所有有效的 JSON 都是有效的 YAML)并且始终格式化为单行。您还可以将空格截断与 nindent
{{- ... | nindent 10 }}
结合使用,以强制在字符串的开头添加新行