WordPress是一款非常流行的内容分享平台软件,官方刚刚庆祝了它的“大麦”,全球1000万个流行网站中,有1/3选择了WordPress。
在本文中,给大家展示一下如何在K8S上基于YRCloudFile容器存储部署一个高可用的WordPress应用。 WordPress主要包含两部分,一个是PHP server, 另一个是MySQL数据库,用来存储用户数据等信息。在部署过程中,我们会应用YRCloudFile容器存储插件,创建services,创建MySQL HA,最终构建一个高可用的WordPress应用。
高可用的WordPress总体的架构如下:
配置 StorageClass
对于K8S平台,我们提供全面适配K8S平台的CSI组件,见下图:
同样 StorageClass也自动创建完成,这使我们能专注于WordPress应用逻辑。
创建数据库集群
搭建数据库集群有多种方式,常见的是Master-Slave的方式,具体的步骤从K8S的官方文档上就能找到,主要利用 xtrabackup等做复制操作。 但是这种Master-Slave的方式当发生写的时候,只能向Master写入,如果当Master掉的时候,就会影响上层业务。 所以我们这里采用Galera的方案来部署数据库集群,yaml配置如下:
apiVersion: v1
kind: Service
metadata:
name: pxc-cluster
labels:
unit: pxc-cluster
spec:
ports:
- port: 3306
name: mysql
selector:
unit: pxc-cluster
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: galera-1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: yrcloudfile-sc
---
apiVersion: v1
kind: ReplicationController
metadata:
name: pxc-node1
spec:
replicas: 1
template:
metadata:
labels:
node: pxc-node1
unit: pxc-cluster
spec:
containers:
- resources:
limits:
cpu: 0.3
image: xtradb_cluster
name: pxc-node1
ports:
- containerPort: 3306
- containerPort: 4444
- containerPort: 4567
- containerPort: 4568
env:
- name: GALERA_CLUSTER
value: "true"
- name: WSREP_CLUSTER_ADDRESS
value: gcomm://
- name: WSREP_SST_USER
value: sst
- name: WSREP_SST_PASSWORD
value: sst
- name: MYSQL_USER
value: mysql
- name: MYSQL_PASSWORD
value: mysql
- name: MYSQL_ROOT_PASSWORD
value: 123456
volumeMounts:
- name: data
mountPath: /var/lib/mysql
volumes:
- name: data
persistentVolumeClaim:
claimName: galera-1
其他两个数据库节点配置与上面展示的一样,只不过名字等略有差别。可以看到,我们给每个数据库节点都动态申请了一个10G的PersistentVolume用来保存数据,这样当某一个节点发生故障时,其它数据库节点不会受到影响。
数据库部署完成后,我们检查一下MySQL数据库集群是否可用,下图展示了正常的查询数据库操作。
部署WordPress
部署完数据库后,就可以直接部署WordPress应用了。话不多说,直接上代码:
# wordpress.yaml
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
type: NodePort
sessionAffinity: ClientIP
ports:
- port: 80
nodePort: 30080
selector:
app: wordpress
tier: frontend
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wordpress-file
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: frontend
replicas: 3
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: frontend
spec:
containers:
- image: wordpress:4.9-apache
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: pxc-cluster
- name: WORDPRESS_DB_PASSWORD
value: "123456"
ports:
- containerPort: 80
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wordpress-file
可以看到,我们给WordPress申请了一个20GB空间支持RWX(ReadWriteMany)的PV。看看效果:
经过上面的配置,利用YRCloudFile容器存储提供的高性能高可靠的Persistent Volume, 我们快速部署了一个高可用的WordPress应用。在任何的容器发生故障时,Persistent Volume中的数据都能够被持久的保存,保证的有状态应用的可靠性。借助YRCloudFile的容器存储能力,用户可以快速地在容器平台上部署和运行各种关键的有状态业务。
推荐阅读
这次我们又引领了潮流——容器存储双活
有状态应用如何在Kubernetes平台上快速迁移和重建
关于焱融云
焱融云是一家以软件定义存储技术为核心竞争力的高新技术企业,在分布式存储等关键技术上拥有自主知识产权,是高性能分布式存储解决方案的行业领导者。焱融云针对各行业业务特性,打造个性化行业解决方案,提供一站式的产品与服务。焱融云系列产品已服务于金融、政府、制造业、互联网等行业的众多客户。了解更多焱融科技信息,请访问官网www.yanrongyun.com。