kubernetes - 如何从 values.yaml 中引用整个结构而不是一一指定?
问题描述
我正在尝试使用下面显示的 helm 命令在 minikube 上的本地虚拟框中部署 helm 图表。
我指的是 livenessProbe , readinessProbe 配置直接来自 deployment.yaml 中的 values.yam ,如下所示。但是,遵循这种方法会给我下面指定的错误,如果我将其更改为独立引用每个属性值,我会看到图表正在安装,pod 部署成功。
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: expect { or n, but found [, error found in #10 byte of ...|ssProbe":["map[failu|..., Greater context ...|"imagePullPolicy": "IfNotPresent","livenessProbe":["map[failureThreshold:3 httpGet:map[path:/greeting|...
部署.yaml
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 }}
值.yaml
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: {}
解决方案
您需要做两件事才能使其正常工作:将值显式序列化为 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,请进一步调整它。
推荐阅读
- c# - 我的 ListView 不会从 ObservableCollection 中读取项目
由普通列表制成 - php - 为什么 PHP 假定会话已启动时未启动?
- python - 将多个 CSV 文件转换为 UTF-8 编码
- scala - 在具有给定上下文绑定的嵌套列表中键入擦除
- matlab - 根据在其他矩阵上设置的条件在 matlab 中索引矩阵
- mysql - 使用 CSV 导入更新 mySQL 表中的一列
- react-native - 为什么登录后我的 react-navigation 路由无法正常工作?
- pandas - yaxis中的数字在matplotlib中没有按顺序排列
- c++ - std::complex operator* 在某些编译器上的性能缓慢
- python - 如何在 Google 电子表格中添加值