如何将独立的mysql容器作为依赖项传递给kubernetes-helm中的服务?

时间:2019-06-19 07:05:16

标签: kubernetes kubernetes-helm

我有一项为其生成舵图的服务。该舵图分解了与服务进行通信的zookeeper和mysql容器。 我现在想创建一个舵图,该舵图衍生出一个服务平台,上述服务就是其中之一。当我尝试执行此操作时,我会使用标记禁用头盔图表中列出的上述服务的依赖关系,如下所示:

tags:
  service-zookeeper: false
  service-mysql: false

现在,我有一些初始化容器(liquibase),每当部署服务时,该容器就会填充通过依赖关系创建的mysql实例。我需要传递一个单独的独立mysql容器作为此init容器需要填充的mysql实例。动物园管理员也有类似的chroots工作。 我需要帮助解决的问题是,我似乎无法找到一种方法来传递单独的mysql容器,因为该容器需要由第一个服务的liquibase init-container填充。有什么办法吗?任何帮助/见解表示赞赏。

1 个答案:

答案 0 :(得分:2)

您只需要MySQL服务的主机名和凭据。

请记住,Helm YAML模板可以使用Go text/template language中的所有内容。其中包括条件{{ if ... }}...{{ else }}...{{ end }}和其他控制结构,以及Sprig库中的大多数支持功​​能。这可能会变得很冗长,但可以很好地解决此类问题。

对于主机名,一种方法是声明一个服务名,无论是由图表本身还是由包装器图表安装。 (如果顶层图表安装了MySQL,并且还安装了服务,则它们将具有相同的Helm版本名称和相同的生成的主机名,而与MySQL是否直接依赖于图表无关)。

- name: MYSQL_HOST
  value: {{ printf "%s-mysql.%s.svc.cluster.local" .Release.Name .Release.Namespace | quote }}

另一种选择是通过values.yaml配置传递它。 Sprig default function在这里很有用。

- name: MYSQL_HOST
  value: {{ .Values.mysqlHostname | default (printf "%s-mysql.%s.svc.cluster.local" .Release.Name .Release.Namespace) | quote }}

您可以使用类似的方法找到MySQL安装程序将密码保存在其中的秘密或从配置中重建密码。