————————————- Setup MySQL ————————————-
1. Create Secret for MySQL
# echo -n ‘mysql1234’ | base64
# vi mysql-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: wp-db-secrets
type: Opaque
data:
MYSQL_ROOT_PASSWORD: bXlzcWwxMjM0
# kubectl apply -f mysql-secret.yaml
# kubectl get secrets
2. Create PVC for MySQL
# vi mysql-volume.yaml
—
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-volume
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: mysql-storage
# kubectl apply -f mysql-volume.yaml
# kubectl get pv
# kubectl get pvc
3. Create Deployment for MySQL
# vi mysql.yaml
—
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: mysql
labels:
app: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
– name: database
image: mysql:5.7
args:
# mount volume
– “–ignore-db-dir=lost+found”
# add root password
envFrom:
– secretRef:
name: wp-db-secrets
ports:
– containerPort: 3306
volumeMounts:
– name: mysql-data
mountPath: /var/lib/mysql
volumes:
– name: mysql-data
persistentVolumeClaim:
claimName: mysql-volume
# kubectl apply -f mysql.yaml
# kubectl get pods
# kubectl describe pod <pod_name>
4. Create Service for MySQL
# vi mysql-service.yaml
—
apiVersion: v1
kind: Service
metadata:
name: mysql-service
spec:
ports:
– port: 3306
protocol: TCP
selector:
app: mysql
# kubectl apply -f mysql-service.yaml
# kubectl get svc
# kubectl get pods
# kubectl exec -it <pod_name> — bash
# mysql -u root -p [MYSQL_ROOT_PASSWORD: bXlzcWwxMjM0 or mysql1234]
SQL> CREATE DATABASE wordpress;
SQL> show databases;
————————————— Setup WordPress ——————————————-
1. Create PVC for WordPress
# vi wp-volume.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wordpress-volume
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: wp-storage
# kubectl apply -f wp-volume.yaml
# kubectl get pv
# kubectl get pvc
2. Create Deployment for WordPress
# vi wp.yaml
—
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:5.8.3-php7.4-apache
ports:
– containerPort: 80
name: wordpress
volumeMounts:
– name: wordpress-data
mountPath: /var/www
env:
– name: WORDPRESS_DB_HOST
value: mysql-service.default.svc.cluster.local
– name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: wp-db-secrets
key: MYSQL_ROOT_PASSWORD
– name: WORDPRESS_DB_USER
value: root
– name: WORDPRESS_DB_NAME
value: wordpress
volumes:
– name: wordpress-data
persistentVolumeClaim:
claimName: wordpress-volume
# kubectl apply -f wp.yaml
# kubectl get pods
3. Create Service for WordPress
# vi wp-service.yaml
—
kind: Service
apiVersion: v1
metadata:
name: wordpress-service
spec:
type: LoadBalancer
selector:
app: wordpress
ports:
– name: http
protocol: TCP
port: 80
targetPort: 80
# kubectl apply -f wp-service.yaml
# kubectl get svc
4. (Optional )Remove All Pods, PVCs, and Services
# kubectl delete svc –all
# kubectl delete pod –all
# kubectl delete pvc –all
# kubectl delete pv –all