diff --git a/workshop/profiling/2-deploy-mysql.sh b/workshop/profiling/2-deploy-mysql.sh index e752666c86..f31fc4fc20 100755 --- a/workshop/profiling/2-deploy-mysql.sh +++ b/workshop/profiling/2-deploy-mysql.sh @@ -29,27 +29,8 @@ while [[ $(kubectl get pods -l app=mysql -o 'jsonpath={..status.conditions[?(@.t sleep 1 done -echo Capturing the pod name -export POD_NAME=`kubectl get pod -l app=mysql -o name --no-headers=true` - -echo Copying sample data and scripts to the pod -# Copy the sample data files to the database pod for import -kubectl cp ./mysql/users.csv ${POD_NAME:4}:/var/lib/mysql-files/users.csv -kubectl cp ./mysql/organizations.csv ${POD_NAME:4}:/var/lib/mysql-files/organizations.csv -kubectl cp ./mysql/populate_db.txt ${POD_NAME:4}:/tmp/populate_db.txt -kubectl cp ./mysql/populate_db.sh ${POD_NAME:4}:/tmp/populate_db.sh - -echo Waiting for the database to be ready -while ! kubectl exec -it ${POD_NAME:4} -- mysqladmin ping -p"$MYSQL_ROOT_PASSWORD" --silent; do - sleep 5 -done - -# added extra sleep as issues occur when we attempt -# to connect to the database too quickly -sleep 5 - -echo Creating tables and application data -kubectl exec -it ${POD_NAME:4} -- /tmp/populate_db.sh +echo Creating a config map for the sample data +kubectl create configmap mysql-data --from-file=./mysql/users.csv --from-file=./mysql/organizations.csv --from-file=./mysql/populate_db.txt echo "" echo Deployed the MySQL database diff --git a/workshop/profiling/doorgame/doorgame.yaml b/workshop/profiling/doorgame/doorgame.yaml index a745298abd..cee2e81185 100644 --- a/workshop/profiling/doorgame/doorgame.yaml +++ b/workshop/profiling/doorgame/doorgame.yaml @@ -14,6 +14,24 @@ spec: tolerations: nodeSelector: terminationGracePeriodSeconds: 5 + # use init containers to first ensure the MySQL database is available, then populate it with + # data required by the application + initContainers: + - name: wait-for-mysql + image: busybox:1.31 + command: [ 'sh', '-c', 'echo -e "Checking for the availability of the MySQL database"; while ! nc -z mysql 3306; do sleep 1; printf "-"; done; echo -e " >> MySQL database is ready";' ] + - name: populate-app-data + image: mysql:8.3.0 + env: + - name: MYSQL_ROOT_PASSWORD + valueFrom: + secretKeyRef: + name: db-user-pass + key: MYSQL_ROOT_PASSWORD + volumeMounts: + - name: mysql-data + mountPath: /tmp + command: [ 'sh', '-c', 'echo -e "Populating the application data"; mysql --host=mysql.default.svc.cluster.local --password=''$(MYSQL_ROOT_PASSWORD)'' --local-infile=1 < /tmp/populate_db.txt' ] containers: - name: doorgame image: docker.io/library/doorgame:latest @@ -49,6 +67,17 @@ spec: limits: cpu: 300m memory: 4096Mi + volumes: + - name: mysql-data + configMap: + name: mysql-data + items: + - key: users.csv + path: users.csv + - key: organizations.csv + path: organizations.csv + - key: populate_db.txt + path: populate_db.txt --- apiVersion: v1 kind: Service diff --git a/workshop/profiling/mysql/populate_db.txt b/workshop/profiling/mysql/populate_db.txt index 99b133644b..7e92817916 100644 --- a/workshop/profiling/mysql/populate_db.txt +++ b/workshop/profiling/mysql/populate_db.txt @@ -1,3 +1,5 @@ +SET GLOBAL local_infile=1; + CREATE DATABASE IF NOT EXISTS DoorGameDB; USE DoorGameDB; @@ -7,6 +9,6 @@ CREATE TABLE Users (UserId VARCHAR(20), FirstName VARCHAR(100), LastName VARCHAR DROP TABLE IF EXISTS Organizations; CREATE TABLE Organizations (OrgId VARCHAR(256), Name VARCHAR(256), Country VARCHAR(256), Founded INT, NumEmployees INT); -LOAD DATA INFILE '/var/lib/mysql-files/users.csv' INTO TABLE DoorGameDB.Users FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS; +LOAD DATA LOCAL INFILE '/tmp/users.csv' INTO TABLE DoorGameDB.Users FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS; -LOAD DATA INFILE '/var/lib/mysql-files/organizations.csv' INTO TABLE DoorGameDB.Organizations FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 ROWS; \ No newline at end of file +LOAD DATA LOCAL INFILE '/tmp/organizations.csv' INTO TABLE DoorGameDB.Organizations FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 ROWS; \ No newline at end of file