带多个端口的Helm模板kubernetes服务

时间:2019-04-03 13:22:00

标签: kubernetes-helm

我有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命令生成的原始值。

是否有一种优雅的方法来创建用于多个端口的服务的头盔模板?

2 个答案:

答案 0 :(得分:0)

看着我猜在NOTES.txt中的错误,您将类型称为.Values.service.type。这将失败,因为在values.yaml中,类型的根对象是servicewebservicetcp

您可能需要根据用例将行替换为.Values.serviceweb.type.Values.servicetcp.type,然后尝试。

答案 1 :(得分:0)

我的问题来自对头盔的了解不足。舵图文件结构中的许多文件都是可选的,NOTES.txt是其中之一。

像我一样从helm create开始时,它会创建一个目录结构(带有可选的文件),并在values.yaml中预配置部署,服务和入口模板以及默认值。如果您需要使用我的2个服务端口来像我这样更具体一些,则需要编辑模板,values.yaml以及引用单个服务端口的所有文件。如果这些文件是可选文件,则也可以将其删除。