Deploying WordPress and MySQL with Persistent Volumes | WordPress Deployment on Kubernetes

preview_player
Показать описание
#kubernetes #devops #wordpress
Deploying WordPress and MySQL with Persistent Volumes | WordPress Deployment on Kubernetes

This video shows you how to deploy a WordPress site and a MySQL database. Both applications use PersistentVolumes and PersistentVolumeClaims to store data.

Setup MySQL on Kubernetes

1. Create Secret for MySQL

echo -n 'mysql1234' | base64

apiVersion: v1
kind: Secret
metadata:
name: wp-db-secrets
type: Opaque
data:
MYSQL_ROOT_PASSWORD: bXlzcWwxMjM0

kubectl get secrets

2. Create PV and PVC for MySQL

kind: StorageClass
metadata:
name: local-storage
volumeBindingMode: WaitForFirstConsumer

apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
spec:
storageClassName: local-storage
claimRef:
name: mysql-volume
namespace: default
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
local:
path: /mnt
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
operator: In
values:
- node01

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-volume
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: local-storage

kubectl get pv
kubectl get pvc

3. Create Deployment for MySQL

---
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 describe pod

4. Create Service for MySQL

---
apiVersion: v1
kind: Service
metadata:
name: mysql-service
spec:
ports:
- port: 3306
protocol: TCP
selector:
app: mysql

kubectl get svc

kubectl exec -it pod_name -- bash

mysql -u root -p
CREATE DATABASE wordpress;
show databases;
exit

Deploy the WordPress on Kubernetes and connect with MySQL Pod.

Create PV PVC for WordPress

apiVersion: v1
kind: PersistentVolume
metadata:
name: wordpress-pv
spec:
storageClassName: local-storage
claimRef:
name: wordpress-volume
namespace: default
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
local:
path: /data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
operator: In
values:
- node01

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wordpress-volume
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: local-storage

2. Create Deployment for WordPress

---
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
- 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

3. Create Service for WordPress

---
kind: Service
apiVersion: v1
metadata:
name: wordpress-service
spec:
type: LoadBalancer
selector:
app: wordpress
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80

kubectl get svc

Рекомендации по теме
Комментарии
Автор

Have specifies storage class, nfs pv and pvc for mysql and wordpress. Pv 10 gi, pvc 5 gi for wordpress and 5gi for mysql. 5 10 gi bound to mysql and wordpress pending..

anjaliadhikari
Автор

thank you but i face isssue Error establishing a database connection, help me please !

truonghongminh
Автор

Hi! which IP and port are you connecting to?

yesitasnow