我有kubernetes服务,它公开了两个我想用头盔管理的端口:
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 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
命令生成的原始值。
是否有一种优雅的方法来创建用于多个端口的服务的头盔模板?
答案 0 :(得分:0)
看着我猜在NOTES.txt中的错误,您将类型称为.Values.service.type
。这将失败,因为在values.yaml中,类型的根对象是serviceweb
或servicetcp
。
您可能需要根据用例将行替换为.Values.serviceweb.type
或.Values.servicetcp.type
,然后尝试。
答案 1 :(得分:0)
我的问题来自对头盔的了解不足。舵图文件结构中的许多文件都是可选的,NOTES.txt是其中之一。
像我一样从helm create
开始时,它会创建一个目录结构(带有可选的文件),并在values.yaml中预配置部署,服务和入口模板以及默认值。如果您需要使用我的2个服务端口来像我这样更具体一些,则需要编辑模板,values.yaml以及引用单个服务端口的所有文件。如果这些文件是可选文件,则也可以将其删除。