helm 图表中的自定义命令块

问题描述 投票:0回答:1

我是 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
中输入相同的内容呢?
有什么建议请告诉我!

kubernetes kubernetes-helm
1个回答
0
投票

pod 规范 中,

command:
始终是字符串列表。另一方面,Go 模板表达式
{{ ... }}
始终发出纯字符串,并对非字符串进行一些自动格式化,而这些非字符串不一定是 YAML。

保留结构最简单的方法是使用 Helm

toYaml
扩展功能;例如

        {{- with .Values.app.command }}
        command:
{{ . | toYaml | indent 10 }}
        {{- end }}

注意这里的缩进:包含

{{
的行上的
indent
从第一列开始,然后
indent
数字是需要缩进的空格数。这里的数字是
command:
行的缩进,再加上两个空格。

如果您希望将其放在一行上,可以使用一些技巧。

toJson
而不是
toYaml
实际上可以正常工作(作为设计点,所有有效的 JSON 都是有效的 YAML)并且始终格式化为单行。您还可以将空格截断与
nindent
{{- ... | nindent 10 }}
结合使用,以强制在字符串的开头添加新行

© www.soinside.com 2019 - 2024. All rights reserved.