Deploying WordPress and MySQL on Kubernetes: A Step-by-Step Guide

Ayushmaan Srivastav
2 min readMar 20, 2024

--

Step 1: Setup Kubernetes Cluster

  1. Install Kubernetes on your preferred platform (e.g., using Minikube for local development or a cloud provider like Google Kubernetes Engine, Amazon EKS, or Azure Kubernetes Service).
  2. Verify your Kubernetes cluster is running and accessible.

Step 2: Prepare Secrets

  1. Create a secret for MySQL root password:

kubectl create secret generic mysql-credentials \
— from-literal=MYSQL_ROOT_PASSWORD=<mysql_root_password> \
— from-literal=MYSQL_DATABASE=<mysql_database_name> \
— from-literal=MYSQL_USER=<mysql_user> \
— from-literal=MYSQL_PASSWORD=<mysql_password>

kubectl create secret generic wordpress-credentials \
— from-literal=WORDPRESS_DB_HOST=mysql \
— from-literal=WORDPRESS_DB_NAME=<wordpress_database_name> \
— from-literal=WORDPRESS_DB_USER=<wordpress_user> \
— from-literal=WORDPRESS_DB_PASSWORD=<wordpress_password>

Replace <mysql_root_password>, <mysql_database_name>, <mysql_user>, <mysql_password>, <wordpress_database_name>, <wordpress_user>, and <wordpress_password> with your desired values.

Step 3: Deploy MySQL

Create and apply the MySQL deployment YAML (mysql-deployment.yaml), updating the environment variables to use the secret values:

apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
— name: mysql
image: mysql:latest
env:
— name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-credentials
key: MYSQL_ROOT_PASSWORD
— name: MYSQL_DATABASE
valueFrom:
secretKeyRef:
name: mysql-credentials
key: MYSQL_DATABASE
— name: MYSQL_USER
valueFrom:
secretKeyRef:
name: mysql-credentials
key: MYSQL_USER
— name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-credentials
key: MYSQL_PASSWORD
ports:
— containerPort: 3306

make the indentation correct.

Step 4: Deploy WordPress

Create and apply the WordPress deployment YAML (wordpress-deployment.yaml), updating the environment variables to use the secret values:

apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
spec:
replicas: 1
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
— name: wordpress
image: wordpress:latest
env:
— name: WORDPRESS_DB_HOST
valueFrom:
secretKeyRef:
name: wordpress-credentials
key: WORDPRESS_DB_HOST
— name: WORDPRESS_DB_NAME
valueFrom:
secretKeyRef:
name: wordpress-credentials
key: WORDPRESS_DB_NAME
— name: WORDPRESS_DB_USER
valueFrom:
secretKeyRef:
name: wordpress-credentials
key: WORDPRESS_DB_USER
— name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: wordpress-credentials
key: WORDPRESS_DB_PASSWORD
ports:
— containerPort: 80

make the indentation correct.

Step 5: Expose WordPress as NodePort Service

Expose WordPress deployment as a NodePort service:

kubectl expose deployment wordpress — type=NodePort — port=80

Step 6: Access WordPress

  1. Get the NodePort assigned to the WordPress service:

kubectl get svc wordpress

2. Access WordPress using the NodePort and your cluster’s IP address in your browser.

You have now deployed WordPress and MySQL with database name, username, and password configured using secrets, and exposed WordPress as a NodePort service.

--

--

No responses yet