Posted in

Deploy MySQL Server in Kubernetes using Helm

To install MySQL server in Kubernetes, run

helm install stable/mysql

Once install is completed, you will get something like

NOTES:
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
incendiary-monkey-mysql.default.svc.cluster.local

To get your root password run:

    MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default incendiary-monkey-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo)

To connect to your database:

1. Run an Ubuntu pod that you can use as a client:

    kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il

2. Install the mysql client:

    $ apt-get update && apt-get install mysql-client -y

3. Connect using the mysql cli, then provide your password:
    $ mysql -h incendiary-monkey-mysql -p

To connect to your database directly from outside the K8s cluster:
    MYSQL_HOST=127.0.0.1
    MYSQL_PORT=3306

    # Execute the following command to route the connection:
    kubectl port-forward svc/incendiary-monkey-mysql 3306

    mysql -h ${MYSQL_HOST} -P${MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD}

To connect to this MySQL, you need to create a temporary Ubuntu server in Kubernetes as MySQL is only available inside the cluster.

To create a server, run

kubectl run -i --tty ubuntu --image=ubuntu:18.04 --restart=Never -- bash -il

Install MySQL client inside this server with

apt update
apt install mariadb-client -y

To connect to MySQL, use the command provided after install, in my case

mysql -h incendiary-monkey-mysql -u root -p

You can get password by running

kubectl get secret --namespace default incendiary-monkey-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo

You can list packages installed using helm with

boby@sok-01:~$ helm list
NAME             	REVISION	UPDATED                 	STATUS  	CHART       	APP VERSION	NAMESPACE
incendiary-monkey	1       	Tue Feb 26 22:24:13 2019	DEPLOYED	mysql-0.15.0	5.7.14     	default  
boby@sok-01:~$ 

To delete, run

boby@sok-01:~$ helm delete incendiary-monkey
release "incendiary-monkey" deleted
boby@sok-01:~$ 

In Google Kubernetes Engine, Nodes are Google Complete Engine (Virtual Machiens). Pods run inside Nodes. A Kubernetes cluster can contain multiple node pools. A node pool contain multiple nodes of same instance type.

To create a Node Pool in Google Kubernetes Engine, run

gcloud container node-pools create POOL_NAME \
  --cluster=CLUSER_NAME \
  --machine-type=e2-standard-2 \
  --num-nodes=1 \
  --zone=ZONE_NAME

To delete a node pool, run

gcloud container node-pools delete POOL_NAME --cluster CLUSER_NAME --zone ZONE_NAME

To resize a node pool, run

gcloud container clusters resize CLUSER_NAME --node-pool POOL_NAME \
    --num-nodes 3 --zone ZONE_NAME
Visited 1 times, 1 visit(s) today

Leave a Reply

Your email address will not be published. Required fields are marked *