我正在尝试使用下面显示的helm命令在minikube上的本地虚拟机中部署helm图表。
我直接从Deployment.yaml中的values.yam引用livenessProbe和readinessProbe配置,如下所示。但是,按照这种方法会给我下面指定的错误,如果我将其更改为独立地引用每个属性值,则我看到图表已安装,吊舱成功部署。
livenessProbe:
- {{ .Values.monitorConfig.liveness }}
readinessProbe:
- {{ .Values.monitorConfig.readiness }}
有人可以让我知道如何避免该错误以及为什么吗?
谢谢。
helm install --debug -n pspk ./pkg/helm/my-service /
错误:发布pspk失败:无法在版本“ v1beta1”中进行部署 作为部署处理:v1beta1.Deployment.Spec: v1beta1.DeploymentSpec.Template:v1.PodTemplateSpec.Spec: v1.PodSpec.Containers:[] v1.Container:v1.Container.LivenessProbe: readObjectStart:期望{或n,但找到[,在#10字节中发现错误 ... | ssProbe“:[” map [failu | ...,更大的上下文 ... |“ imagePullPolicy”:“ IfNotPresent”,“ livenessProbe”:[“ map [failureThreshold:3 httpGet:map [路径:/ greeting | ...
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: {{ template "fullname" . }}
labels:
app: {{ template "fullname" .}}
chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
release: "{{ .Release.Name }}"
spec:
replicas: {{ .Values.replicaCount }}
template:
metadata:
labels:
app: {{ template "fullname" . }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: 50443
protocol: TCP
- name: grpc
containerPort: 50051
protocol: TCP
livenessProbe:
- {{ .Values.monitorConfig.liveness }}
readinessProbe:
- {{ .Values.monitorConfig.readiness }}
resources:
{{ toYaml .Values.resources | indent 12 }}
replicaCount: 2
application:
track: stable
image:
repository: test/go-k8s
tag: 0.1.1
pullPolicy: IfNotPresent
# SQL migration scripts
service:
enabled: false
type: NodePort
port: 80
grpc_port: 50051
env:
# POSTGRES_HOST
postgresHost: localhost
# POSTGRES_PORT
postgresPort: "5432"
# POSTGRES_SSL_MODE
postgresSSLMode: "disable"
# POSTGRES_DB
postgresDB: test
# POSTGRES_USER
postgresUser: test
# POSTGRES_PASSWORD
postgresPassword: "test"
monitorConfig:
liveness:
httpGet:
path: "/greeting"
port: 50443
periodSeconds: 2
timeoutSeconds: 10
initialDelaySeconds: 5
failureThreshold: 3
successThreshold: 1
readiness:
httpGet:
path: "/greeting"
port: 50443
periodSeconds: 2
timeoutSeconds: 10
initialDelaySeconds: 5
failureThreshold: 3
successThreshold: 1
resources: {}
nodeSelector: {}
tolerations: []
affinity: {}
答案 0 :(得分:2)
您需要做两件事以使此工作正确进行:将值显式序列化为YAML,并使缩进正确。这看起来像是
livenessProbe:
- {{ .Values.monitorConfig.liveness | toYaml | indent 8 | trim }}
默认序列化将是Go-native转储格式,它不是YAML并导致奇怪的map[failureThreshold:1]
输出; toYaml
解决了这个问题。 indent 8
在结果块的每一行的开头放置空格(您需要调整“ 8”)。 trim
删除前导和尾随空格。 ({toYaml
是特定于Helm的,并且记录得不好;其他两个功能来自Sprig支持库。)
您应使用以下命令再次检查此输出
helm template -n pspk ./pkg/helm/my-service/
,如果它看起来不是有效的YAML,请进一步调整。
答案 1 :(得分:0)
在您的YAML中:
livenessProbe:
- {{ .Values.monitorConfig.liveness }}
readinessProbe:
- {{ .Values.monitorConfig.readiness }}
您将值插入序列项。 YAML中的序列项以-
开头。但是,livenessProbe
的内容应该是YAML映射。错误消息不多,但告诉您出了什么问题:
期望{或n,但发现[,
{
启动YAML映射(以流样式),[
启动YAML序列(以流样式)。该消息告诉您,YAML映射的开始是预期的,但是找到了YAML序列的开始。请注意,由于您使用的是块样式,因此此处实际上并没有使用{
和[
。
要解决此问题,只需删除-
,以使插入的映射(如values.yaml
所示)为livenessProbe
的直接值,并且不包含在序列中:< / p>
livenessProbe:
{{ .Values.monitorConfig.liveness }}
readinessProbe:
{{ .Values.monitorConfig.readiness }}
答案 2 :(得分:0)
感谢社区的回答/评论和helm template guide, 它可以组合为:
{{- if .Values.monitorConfig.liveness }}
livenessProbe:
{{ toYaml .Values.monitorConfig.liveness | indent 12 }}
{{- end }}
这将提供更大的灵活性。