我有kubernetes服务暴露2个我想用helm管理的端口:
apiVersion: v1
kind: Service
metadata:
name: myproject-svc
spec:
type: ClusterIP
ports:
- name: myproject-web
port: 80
protocol: TCP
targetPort: 8181
- name: myproject-tcp
port: 61616
protocol: TCP
targetPort: 61616
selector:
app: myproject-dev
我创建了一个kubernetes-helm模板:
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.project }}-svc
spec:
type: ClusterIP
ports:
- name: {{ .Values.project }}-web
port: {{ .Values.serviceweb.port }}
protocol: TCP
targetPort: {{ .Values.serviceweb.targetPort }}
- name: {{ .Values.project }}-tcp
port: {{ .Values.servicetcp.port }}
protocol: TCP
targetPort: {{ .Values.servicetcp.targetPort }}
selector:
app: {{ .Values.project }}-{{ .Values.environment }}
在我的values.yaml
:
project: activemq
serviceweb:
type: ClusterIP
port: 8161
servicetcp:
type: ClusterIP
port: 61616
当我执行一个干运行命令时,如果没有定义.Values.service
,那么helm似乎不高兴:
helm install --dry-run --set environment=dev --name myproject --debug myproject/;
Error: render error in "myproject/templates/NOTES.txt": template: myproject/templates/NOTES.txt:8:39: executing "myproject/templates/NOTES.txt" at <.Values.service.type>: can't evaluate field type in type interface {}
我看到.Values.service
也被引用在templates/tests/test-connection.yaml
。这些文件包含使用helm create
命令生成后的原始值。
是否有一种优雅的方法来创建具有多个端口的服务的头盔模板?
看看NOTES.txt中的错误,你将类型称为.Values.service.type
。这将失败,因为在values.yaml中,类型的根对象是serviceweb
或servicetcp
。
根据您的使用情况,您可能需要将该行替换为.Values.serviceweb.type
或.Values.servicetcp.type
,然后尝试。
我的问题来自对掌舵的了解不足。许多文件在helm图表文件结构中是可选的,NOTES.txt是其中之一。
当你像我一样开始使用helm create
时,它会创建一个目录结构(带有optionnal文件),在values.yaml中预先配置部署,服务和入口模板以及默认值。如果您需要使用我的2个服务端口更像我这样的特定功能,则需要编辑模板,values.yaml和所有引用单个服务端口的文件。如果这些文件是可选的,您也可以删除它们。