WordPress是一款非常流行的内容分享平台软件,官方刚刚庆祝了它的“大麦”,全球1000万个流行网站中,有1/3选择了WordPress。

在本文中,给大家展示一下如何在K8S上基于YRCloudFile容器存储部署一个高可用的WordPress应用。 WordPress主要包含两部分,一个是PHP server, 另一个是MySQL数据库,用来存储用户数据等信息。在部署过程中,我们会应用YRCloudFile容器存储插件,创建services,创建MySQL HA,最终构建一个高可用的WordPress应用。

 

高可用的WordPress总体的架构如下:

  • WordPress的文件存储: 由YRCloudFile的 RWX Persistent Volume 提供
  • 数据库集群: 利用 MySQL Galera 形成多主集群
  • 负载均衡 : K8S内部的负载均衡

配置 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。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐