kubernetes - 多线舵图模板的继承
问题描述
我想使用 helm 图表将资源设置为 pod,其中包含子图表中的资源部分模板。因为它应该是子图中的几个不同的资源模板。我有values.yaml,main-values.yaml和templates/deployment.yaml 更新舵图的命令是
helm upgrade -i mynamespace ./kubernetes/mynamespace --namespace mynamespace --create-namespace -f kubernetes/mynamespace/main-values.yaml --reset-values
文件被剪切以仅显示一个示例: main-values.yaml :
namespace: mynamespace
baseUrl: myurl.com
customBranch: dev
components:
postgresql:
nodeport: 5432
elasticsearch:
nodeport: 9200
resources_minimum:
requests:
memory: "100M"
cpu: "100m"
limits:
memory: "300M"
cpu: "200m"
值.yaml
namespace:
baseUrl:
customBranch:
components:
service:
name: service
image: docker-registry.service.{{ .Values.customBranch }}
imagePullPolicy: Always
resources: "{{ .Values.resources_minimum }}"
tag: latest
port: 8080
accessType: ClusterIP
cut
而 deployment.yaml 是
cut
containers:
- name: {{ $val.name }}
securityContext:
{{- toYaml $.Values.securityContext | nindent 12 }}
image: "{{ tpl $val.image $ }}:{{ $val.tag | default "latest" }}"
imagePullPolicy: {{ $val.imagePullPolicy }}
resources: "{{ tpl $val.resources $ }}"
cut
而且资源的部署部分根本不起作用。但是带有中间模板{{ .Values.customBranch }}的图像部分可以正常工作,并且 nodeport 模板在services.yaml中可以正常工作
spec:
type: {{ $val.accessType }}
ports:
- port: {{ $val.port }}
name: mainport
targetPort: {{ $val.port }}
protocol: TCP
{{ if and $val.nodeport }}
nodePort: {{ $val.nodeport }}
我在deployment.yaml 的资源部分尝试了 $val、toYaml、tpl和普通$.Values选项,但遇到了几个错误,例如:
将 YAML 转换为 JSON 时出错:yaml:无效的映射键:map[interface {}]interface {}{".Values.resources_minimum":interface {}(nil)}
或者
将 YAML 转换为 JSON 时出错:yaml:第 29 行:找不到预期的“:”
和其他类似的错误。
多行resources_minimum的yaml值是不是不能通过values.yaml推送到deployment.yaml?我应该使用哪种语法?您可以建议我阅读哪些文档?
解决方案
不能在 values.yaml 文件中使用模板代码。但是您可以merge
使用多个 values.yaml 文件来重用配置值。
主值.yaml
components:
service:
image: docker-registry.service.dev
resources:
requests:
memory: "100M"
cpu: "100m"
limits:
memory: "300M"
cpu: "200m"
值.yaml
components:
service:
name: service
imagePullPolicy: Always
tag: latest
port: 8080
accessType: ClusterIP
如果将其添加到模板中,它将包含来自两个值文件的值:
components: {{ deepCopy .Values.components | merge | toYaml | nindent 6 }}
merge
+deepCopy
将合并所有值文件的值。toYaml
将以 yaml 语法输出结果。- 您还必须检查正确的缩进。6只是猜测。
调用helm template --debug ...
这甚至会生成无效的 yaml 输出,您可以在其中轻松检查正确的缩进并查看其他错误。
推荐阅读
- django-rest-framework - 错误:“non_field_errors”:[“无法使用提供的凭据登录。” ]
- node.js - 使用 express、Node 和 mongoose 创建对象并将引用存储在 ref 数组中
- python - 元组索引超出范围,试图重塑
- ios - 使用按钮 [Expo] 在 React Native App 中打开 Measure App (iOS)
- javascript - VueJs + Nuxt + Jest:找不到模块
- ios - IOS:我应该在将同一个应用程序提交到 App Store 之前删除我的企业应用程序吗?
- docker - docker run 给出错误:''不是有效的端口号
- vue.js - 默认插槽或命名插槽不适用于 Vue 3 中的“路由器视图”
- python - 如何在没有网络浏览器驱动程序的情况下进行抓取?
- java - Mockito 中的不同链接