Create a 3 node docker mysql database which will be orchestrated by GKE

1. Get the credential of the GKE Cluster 


Welcome to Cloud Shell! Type "help" to get started.
 

Your Cloud Platform project in this session is set to qwiklabs-gcp-04-302f12498b68.


Use “gcloud config set project [PROJECT_ID]” to change to a different project.

parwezgcp01@cloudshell:~ (qwiklabs-gcp-04-302f12498b68)$ gcloud container clusters get-credentials cluster-1 --zone us-central1-c --project qwiklabs-gcp-04-302f12498b68

 Fetching cluster endpoint and auth data.
 kubeconfig entry generated for cluster-1.

 
parwezgcp01@cloudshell:~ (qwiklabs-gcp-04-302f12498b68)$ 
parwezgcp01@cloudshell:~ (qwiklabs-gcp-04-302f12498b68)$ kubectl get nodes
 NAME                                       STATUS   ROLES    AGE     VERSION
 gke-cluster-1-default-pool-854f2c03-4jw5   Ready       5m15s   v1.25.8-gke.1000
 gke-cluster-1-default-pool-854f2c03-5gxq   Ready       5m13s   v1.25.8-gke.1000
 gke-cluster-1-default-pool-854f2c03-hh4k   Ready       5m15s   v1.25.8-gke.1000
 parwezgcp01 @cloudshell:~ (qwiklabs-gcp-04-302f12498b68)$ mkdir mysql-gke
  parwezgcp01 @cloudshell:~ cd mysql-gke


 Task 2. Deploy MySQL on the cluster

 parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ ls -ltr 
 total 12
 -rw-r--r-- 1 parwezgcp01 parwezgcp01 163 Jun 24 09:18 volume.yaml
 -rw-r--r-- 1 parwezgcp01 parwezgcp01 902 Jun 24 09:18 deployment.yaml
 -rw-r--r-- 1 parwezgcp01 parwezgcp01 156 Jun 24 09:20 service.yaml


parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ cat volume.yaml 
 apiVersion: v1
 kind: PersistentVolumeClaim
 metadata:
   name: mysql-data-disk
 spec:
   accessModes:
     - ReadWriteOnce
   resources:
     requests:
       storage: 1Gi
 parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ 
 parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ cat deployment.yaml 
 apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: mysql-deployment
   labels:
     app: mysql
 spec:
   replicas: 1
   selector:
     matchLabels:
       app: mysql
   template:
     metadata:
       labels:
         app: mysql
     spec:
       containers:
         - name: mysql
           image: mysql:8.0
           ports:
             - containerPort: 3306
           volumeMounts:
             - mountPath: "/var/lib/mysql"
               subPath: "mysql"
               name: mysql-data
           env:
             - name: MYSQL_ROOT_PASSWORD
               valueFrom:
                 secretKeyRef:
                   name: mysql-secrets
                   key: ROOT_PASSWORD
             - name: MYSQL_USER
               value: testuser
             - name: MYSQL_PASSWORD
               value: password
       volumes:
         - name: mysql-data
           persistentVolumeClaim:
             claimName: mysql-data-disk

parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ 


parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ cat service.yaml 
 apiVersion: v1
 kind: Service
 metadata:
   name: mysql-service
 spec:
   selector:
     app: mysql
   ports:
 protocol: TCP
 port: 3306
 targetPort: 3306 


Apply the the conf to the GKE cluster

parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ 
kubectl apply -f volume.yaml
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml


parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ kubectl apply -f volume.yaml
persistentvolumeclaim/mysql-data-disk created

parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ kubectl apply -f deployment.yaml
deployment.apps/mysql-deployment created


parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ kubectl apply -f service.yaml
 service/mysql-service created


parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ kubectl get pods
 NAME                                READY   STATUS    RESTARTS   AGE
 mysql-deployment-75b578b6b5-lks8r   1/1     Running   0          60s
 kubectl exec -it mysql-deployment-75b578b6b5-lks8r /bin/bash


Run exec command to login into mysql docket=r image environment
 
parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ kubectl exec -it mysql-deployment-75b578b6b5-lks8r /bin/bash

kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
 bash-4.4# 
 bash-4.4# 
 bash-4.4# mysql -u root -p
 Enter password: 
 Welcome to the MySQL monitor.  Commands end with ; or \g.
 Your MySQL connection id is 8
 Server version: 8.0.33 MySQL Community Server - GPL
 Copyright (c) 2000, 2023, Oracle and/or its affiliates.
 Oracle is a registered trademark of Oracle Corporation and/or its
 affiliates. Other names may be trademarks of their respective
 owners.
 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 mysql> show databases ;
 +--------------------+
 | Database           |
 +--------------------+
 | information_schema |
 | mysql              |
 | performance_schema |
 | sys                |
 +--------------------+
 4 rows in set (0.00 sec)
 mysql> 
 mysql> create database pets;
 Query OK, 1 row affected (0.01 sec)
 mysql> use pets ;
 Database changed
 mysql> 
 mysql> show databases ;
 +--------------------+
 | Database           |
 +--------------------+
 | information_schema |
 | mysql              |
 | performance_schema |
 | pets               |
 | sys                |
 +--------------------+
 5 rows in set (0.01 sec)

Exit and delete conf now, so that we can create a automatics conf file using HELM

 kubectl delete -f service.yaml
 kubectl delete -f deployment.yaml
 kubectl delete -f volume.yaml



parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ kubectl delete -f service.yaml
service "mysql-service" deleted

parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ kubectl delete -f deployment.yaml
kubectl delete -f volume.yaml
deployment.apps "mysql-deployment" deleted



3. Use Helm to deploy MySQL on the cluster


parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ helm repo add bitnami https://charts.bitnami.com/bitnami
 "bitnami" has been added to your repositories


parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ helm repo update

 Hang tight while we grab the latest from your chart repositories…
 …Successfully got an update from the "bitnami" chart repository
 Update Complete. ⎈Happy Helming!⎈
 Install a MySQL named mydb using Helm:


parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ helm install mydb bitnami/mysql

 NAME: mydb
 LAST DEPLOYED: Sat Jun 24 09:38:53 2023
 NAMESPACE: default
 STATUS: deployed
 REVISION: 1
 TEST SUITE: None
 NOTES:
 CHART NAME: mysql
 CHART VERSION: 9.10.4
 APP VERSION: 8.0.33
 ** Please be patient while the chart is being deployed **
 Tip:
 Watch the deployment status using the command: kubectl get pods -w --namespace default
 Services:
 echo Primary: mydb-mysql.default.svc.cluster.local:3306
 Execute the following to get the administrator credentials:
 echo Username: root
   MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default mydb-mysql -o jsonpath="{.data.mysql-root-password}" | base64 -d)
 To connect to your database:
 Run a pod that you can use as a client:
 kubectl run mydb-mysql-client --rm --tty -i --restart='Never' --image  docker.io/bitnami/mysql:8.0.33-debian-11-r17 --namespace default --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash
 To connect to primary service (read/write):
 mysql -h mydb-mysql.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD" 


 list the helm running 

parwezgcp01 @cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ helm ls
NAME    NAMESPACE       REVISION        UPDATED                                     STATUS          CHART           APP VERSION
mydb    default         1               2023-06-24 09:38:53.632603173 +0000 UTC    deployed         mysql-9.10.4       8.0.33   


  
parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ echo Username: root
Username: root


parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ kubectl get secret --namespace default mydb-mysql -o jsonpath="{.data.mysql-root-password}" | base64 -d
z103dZeJdH 


parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ kubectl run mydb-mysql-client --rm --tty -i --restart='Never' --image  docker.io/bitnami/mysql:8.0.33-debian-11-r17 --namespace default --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash


 If you don't see a command prompt, try pressing enter.
 I have no name!@mydb-mysql-client:/$ 
 I have no name!@mydb-mysql-client:/$ 
 I have no name!@mydb-mysql-client:/$ mysql -h mydb-mysql.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"mysql -h mydb-mysql.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"^C
 I have no name!@mydb-mysql-client:/$ 
 I have no name!@mydb-mysql-client:/$ 
 I have no name!@mydb-mysql-client:/$ mysql -h mydb-mysql.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"
 mysql: [Warning] Using a password on the command line interface can be insecure.
 Welcome to the MySQL monitor.  Commands end with ; or \g.
 Your MySQL connection id is 96
 Server version: 8.0.33 Source distribution
 Copyright (c) 2000, 2023, Oracle and/or its affiliates.
 Oracle is a registered trademark of Oracle Corporation and/or its
 affiliates. Other names may be trademarks of their respective
 owners.
 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 mysql> 
 mysql> show databases ;
 +--------------------+
 | Database           |
 +--------------------+
 | information_schema |
 | my_database        |
 | mysql              |
 | performance_schema |
 | sys                |
 +--------------------+
 5 rows in set (0.01 sec)
 mysql> 
 mysql> create database pets ;
 Query OK, 1 row affected (0.01 sec)
 mysql> use pets ;
 Database changed


parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ kubectl get pods ;
 NAME           READY   STATUS    RESTARTS   AGE
 mydb-mysql-0   1/1     Running   0          11m


parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ 


To see your Helm deployment, enter the following command:

parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ helm ls
 NAME    NAMESPACE       REVISION        UPDATED                                     STATUS          CHART           APP VERSION
 mydb    default         1               2023-06-24 09:38:53.632603173 +0000 UTC    deployed         mysql-9.10.4       8.0.33


 
To delete the depoyment, enter the following command:
 helm delete mydb

parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ kubectl get pods ;
 NAME           READY   STATUS    RESTARTS   AGE
 mydb-mysql-0   1/1     Running   0          11m


parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ helm delete mydb
release "mydb" uninstalled
parwezgcp01@cloudshell:~/mysql-gke (qwiklabs-gcp-04-302f12498b68)$ kubectl get pods ;
No resources found in default namespace.

 546 total views,  1 views today

Leave a Reply

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