$ nano 00-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysql-pass
type: Opaque
data:
password: YWRtaW4=
$ nano 01-pv-mysql.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-persistent-storage
labels:
app: wordpress
tier: mysql
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
nfs:
server: 10.75.168.100
# Exported path of your NFS server
path: "/nfs/mysql"
$ nano 01-pv-wordpress.yml
# Create PersistentVolume
# change the ip of NFS server
apiVersion: v1
kind: PersistentVolume
metadata:
name: wordpress-persistent-storage
labels:
app: wordpress
tier: frontend
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
nfs:
server: 10.75.168.100
# Exported path of your NFS server
path: "/nfs/html/wordpress"
$ 02-pvc-mysql.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-persistent-storage
labels:
app: wordpress
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
$ 02-pvc-wordpress.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wordpress-persistent-storage
labels:
app: wordpress
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
$ 03-mysql-deploy.yml
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql # will be used as a value in
labels: # WORDPRESS_DB_HOST in wordpress-deploy.yml
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
clusterIP: None
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass # the one generated before in secret.yml
key: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage # which data will be stored
mountPath: "/var/lib/mysql"
volumes:
- name: mysql-persistent-storage # PVC
persistentVolumeClaim:
claimName: mysql-persistent-storage
$ 03-wordpress-deploy.yaml
# create a service for wordpress
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
type: ClusterIP
selector:
app: wordpress
tier: frontend
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: frontend
spec:
containers:
#- image: wordpress:4.8-apache
- image: wordpress:apache
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: wordpress-mysql
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass # generated before in secret.yml
key: password
ports:
- containerPort: 80
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: "/var/www/html" # which data will be stored
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wordpress-persistent-storage
$ ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: wordpress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: wordpress.oowy.fr
http:
paths:
- path: /
backend:
serviceName: wordpress
servicePort: 80