Integrate in Helm charts

How to integrate the Bitpoke operator for MySQL with your application.

After cluster creation, you can update the provided secret with a new field named DB_CONNECT_URL that contains a DSN to connect to the writable cluster endpoint. You can check the _helper.tpl file for more insights.

The MySQL operator provides 3 services to access the nodes:

  • <cluster_name>-mysql-master points to the master node and this endpoint should be used for writes. This service is usually used to construct the DSN.
  • <cluster_name>-mysql is the service that routes traffic to all healthy nodes from the cluster, including the master node. You should use this endpoint for reads.
  • mysql is the service used internally to access all nodes within a namespace. You can use this service to access a specific node (e.g. <cluster_name>-mysql-0.mysql.<namespace>) but DO NOT use just the service (eg. mysql.<namespace>) as it contains all nodes from all clusters in the namespace.

Using Helm

We provide a Helm chart for easy deployment of a MySQL cluster alongside your application. It can be found in the bitpoke helm charts repository and used stand alone or added as a dependency. See below how this chart can be integrated with your application to provision a MySQL cluster.

Add MySQL Cluster chart as dependency

In your chart add in requirements.yaml under dependencies section the following:

dependencies:
  - name: mysql-cluster
    version: 0.5.0
    repository: https://helm-charts.bitpoke.io
    condition: mysql.enabled
    alias: mysql

Once dependencies are configured run helm dependency update to fetch related charts.

More information about chart requirements can be found in the official documentation .

Configure your chart’s values.yaml file

You can configure the cluster by providing values under the mysql key. A comprehensive description can be found in the chart values.yaml file.

mysql:
  enabled: true
  rootPassword: <secure>
  appUser: <user name>
  appPassword: <user password>
  appDatabase: <app database>

Use into your application

In your deployment add an environment variable that points to the DB_CONNECT_URL field from cluster secret. To get the secret name you can use the following template {{ include "mysql-cluster.secretName" . }}.

For example in the deployment.yaml:

spec:
  replicas: {{ .Values.replicaCount }}
  template:
    spec:
      containers:
        - name: {{ .Chart.Name }}
          ...
          env:
            - name: DB_CONNECT_URL
              valueFrom:
                secretKeyRef:
                  name: {{ include "mysql-cluster.secretName" . }}
                  key: DB_CONNECT_URL

Now just modify your app to connect to the DSN that is provided into DB_CONNECT_URL environment variable.