云计算-基于Kubernetes编排部署WordPress + MySQL

目录

k8s编排部署WordPress+Mysql

介绍

WordPress是一个基于PHP和MySQL的开源内容管理系统。它旨在帮助用户轻松创建和管理网站,最初作为一个简单的博客平台,但随着时间的推移,发展成为功能强大的CMS,支持数以千计的插件和主题,用户可以根据自己的需求进行自定义,下面将用k8s部署wordpress的过程

k8s编排部署WordPress+Mysql

(1)在master节点部署NFS服务,做共享存储;

(2)为MySQL创建PVC mysql-pv-claim,绑定PV mysql-persistent-storage,PV大小:20Gi,权限:RWO,回收策略:Recycle;

(3)为wordpress创建PVC wp-pv-claim,绑定PV wordpress-persistent-storage,PV大小:20Gi,权限:RWO,回收策略:Recycle;

(4)基于镜像mysql:5.6和wordpress:latest;

(5)wordpress service名称:wordpress,以NodePort方式对外暴露端口31000。

nfs准备

root@master \~#yum install --y nfs-utils rpcbind

root@master \~#mkdir /data-mysql /data-wordpress

root@master \~#chmod 777 /data-mysql

root@master \~#chmod 777 /data-wordpress

root@master \~#vi /etc/exports

/data-mysql *(rw,no_root_squash,sync)

/data-wordpress *(rw,no_root_squash,sync)

root@master \~#exportfs -rv

root@master \~#systemctl restart nfs rpcbind

root@node \~#showmount -e 192.168.20.14
建立pv与pvc后绑定

pvpvc.yaml


apiVersion: v1

kind: PersistentVolume

metadata:

name: mysql-persistent-storage

namespace: default

labels:

app: wordpress

spec:

accessModes:

  • ReadWriteOnce

capacity:

storage: 20Gi

nfs:

path: /data-mysql

server: master

persistentVolumeReclaimPolicy: Recycle

storageClassName: nfs


apiVersion: v1

kind: PersistentVolume

metadata:

name: wordpress-persistent-storage

namespace: default

labels:

app: wordpress

spec:

accessModes:

  • ReadWriteOnce

capacity:

storage: 20Gi

nfs:

path: /data-wordpress

server: master

persistentVolumeReclaimPolicy: Recycle

storageClassName: nfs


apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: mysql-pv-claim

namespace: default

labels:

app: mysql

spec:

accessModes:

  • ReadWriteOnce

resources:

requests:

storage: 20Gi

storageClassName: nfs

volumeName: mysql-persistent-storage


apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: wp-pv-claim

namespace: default

labels:

app: wordpress

spec:

accessModes:

  • ReadWriteOnce

resources:

requests:

storage: 20Gi

storageClassName: nfs

volumeName: wordpress-persistent-storage


启动后查看

root@master k8sexam# kubectl get pv

NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE

mysql-persistent-storage 20Gi RWO Recycle Bound default/mysql-pv-claim nfs 24m

wordpress-persistent-storage 20Gi RWO Recycle Bound default/wp-pv-claim nfs 24m

root@master k8sexam# kubectl get pvc

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE

mysql-pv-claim Bound mysql-persistent-storage 20Gi RWO nfs 24m

wp-pv-claim Bound wordpress-persistent-storage 20Gi RWO nfs 24m
vi deployment.yaml

-----------------------------------------------配置service与deployment及mysql-------------

kind: Service

apiVersion: v1

metadata:

labels:

app: wordpress

name: wordpress-mysql

spec:

ports:

  • port: 3306

selector:

app: wordpress

tier: mysql

clusterIP: None


kind: Service

apiVersion: v1

metadata:

labels:

app: wordpress

name: wordpress

spec:

type: NodePort

ports:

  • port: 80

nodePort: 31000

selector:

app: wordpress

tier: frontend


kind: Deployment

apiVersion: apps/v1

metadata:

labels:

app: wordpress

name: wordpress-mysql

spec:

replicas: 1

revisionHistoryLimit: 10

selector:

matchLabels:

app: wordpress

template:

metadata:

labels:

app: wordpress

tier: mysql

spec:

containers:

  • name: mysql

image: mysql:5.6

imagePullPolicy: IfNotPresent

ports:

  • containerPort: 3306

name: mysql

env:

  • name: MYSQL_ROOT_PASSWORD

value: '123456'

volumeMounts:

  • name: mysql-pv

mountPath: /var/lib/mysql

volumes:

  • name: mysql-pv

persistentVolumeClaim:

claimName: mysql-pv-claim


kind: Deployment

apiVersion: apps/v1

metadata:

labels:

app: wordpress

name: wordpress

spec:

replicas: 1

revisionHistoryLimit: 10

selector:

matchLabels:

app: wordpress

template:

metadata:

labels:

app: wordpress

tier: frontend

spec:

containers:

  • name: wordpress

image: wordpress:latest

imagePullPolicy: IfNotPresent

ports:

  • containerPort: 80

name: wordpress

env:

  • name: WORDPRESS_DB_HOST

value: wordpress-mysql

  • name: WORDPRESS_DB_PASSWORD

value: '123456'

volumeMounts:

  • name: wordpress-pv

mountPath: /var/www/html

volumes:

  • name: wordpress-pv

persistentVolumeClaim:

claimName: wp-pv-claim

启动比较慢 1-3分钟

kubectl logs -f wordpress-*

kubectl logs -f wordpress-mysql-*

查看启动日志

`提示

ReadOnlyMany -- 卷可以被许多节点以只读方式挂载 只读多 (ROX)

`ReadWriteMany -- 卷可以被许多节点以读写方式挂载 读写多 (RWX)

`ReadWriteOnce -- 卷可以由单个节点以读写方式挂载 仅在一个 Node 上运行的多个 Pod可以连接到存储并进行读写操作