Version: v1.1

应用组件间的依赖和参数传递

本节将介绍如何在 KubeVela 中进行组件间的参数传递。

参数传递

在 KubeVela 中,可以在组件中通过 outputs 和 inputs 来指定要传输的数据。

Outputs

outputs 由 namevalueFrom 组成。name 声明了这个 output 的名称,在 input 中将通过 name 引用 output。

valueFrom 有以下几种写法:

  1. 直接通过字符串表示值,如:valueFrom: testString
  2. 通过表达式来指定值,如:valueFrom: output.metadata.name。注意,output 为固定内置字段,指向组件中被部署在集群里的资源。
  3. 通过 + 来任意连接以上两种写法,最终值是计算后的字符串拼接结果,如:valueFrom: output.metadata.name + "testString"

Inputs

inputs 由 fromparameterKey 组成。from 声明了这个 input 从哪个 output 中取值,parameterKey 为一个表达式,将会把 input 取得的值赋给对应的字段。

如:

  1. 指定 inputs:
  1. ...
  2. - name: wordpress
  3. type: helm
  4. inputs:
  5. - from: mysql-svc
  6. parameterKey: properties.values.externalDatabase.host
  1. 经过渲染后,该组件的 properties.values.externalDatabase.host 字段中会被赋上值,效果如下所示:
  1. ...
  2. - name: wordpress
  3. type: helm
  4. properties:
  5. values:
  6. externalDatabase:
  7. host: <input value>

如何使用

假设我们希望在本地启动一个 WordPress,而这个 Wordpress 的数据存放在一个 MySQL 数据库中,我们需要将这个 MySQL 的地址传递给 WordPress。

部署如下应用部署计划:

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: wordpress-with-mysql
  5. namespace: default
  6. spec:
  7. components:
  8. - name: mysql
  9. type: helm
  10. outputs:
  11. # 将 service 地址作为 output
  12. - name: mysql-svc
  13. valueFrom: output.metadata.name + ".default.svc.cluster.local"
  14. properties:
  15. repoType: helm
  16. url: https://charts.bitnami.com/bitnami
  17. chart: mysql
  18. version: "8.8.2"
  19. values:
  20. auth:
  21. rootPassword: mypassword
  22. - name: wordpress
  23. type: helm
  24. inputs:
  25. # 将 mysql 的 service 地址赋值到 host 中
  26. - from: mysql-svc
  27. parameterKey: properties.values.externalDatabase.host
  28. properties:
  29. repoType: helm
  30. url: https://charts.bitnami.com/bitnami
  31. chart: wordpress
  32. version: "12.0.3"
  33. values:
  34. mariadb:
  35. enabled: false
  36. externalDatabase:
  37. user: root
  38. password: mypassword
  39. database: mysql
  40. port: 3306

期望结果

WordPress 已被成功部署,且与 MySQL 正常连接。