Updated on 2023-09-28 GMT+08:00

Creating a WordPress Workload

WordPress was originally a blog platform based on PHP and MySQL. It is gradually evolved into a content management system. You can set up your own blog website on any server that supports PHP and MySQL. Thousands of plug-ins and countless theme templates are available for WordPress and easy to install.

This section describes how to create a public WordPress website from images.

Prerequisites

  • You have created a CCE cluster that contains a node with 4 vCPUs and 8 GiB memory. For details on how to create a cluster, see Creating a Kubernetes Cluster.
  • The MySQL database has been created by following the instructions in Creating a MySQL Workload. In this example, WordPress data is stored in the MySQL database.

Operations on the Console

  1. Log in to the CCE console.
  2. Choose the target cluster.
  3. In the navigation pane, choose Workloads. Then, click Create Workload.
  4. Set workload parameters.

    Basic Info
    • Workload Type: Select Deployment.
    • Workload Name: Set it to wordpress.
    • Namespace: Select default.
    • Pods: Set this parameter to 2 in this example.
    Figure 1 Setting the basic information about the workload

    Container Settings

    In the Basic Info area, click Select Image. In the dialog box displayed, select Open Source Images, search for wordpress, select the wordpress image, and set the image tag to php7.3.

    Figure 2 Selecting an image tag

    Add the following environment variables:

    (These variables let WordPress know the information about the MySQL database.)

    • WORDPRESS_DB_HOST: address for accessing the database, which can be found in the Service (on the Services tab page) of the MySQL workload. You can use the internal domain name mysql.default.svc.cluster.local:3306 to access the database, or use only mysql:3306 omitting .default.svc.cluster.local.
    • WORDPRESS_DB_USER: username for accessing the database. The value must be the same as that of MYSQL_USER in Creating a MySQL Workload, which is used to connect to MySQL.
    • WORDPRESS_DB_PASSWORD: password for accessing the database. The value must be the same as that of MYSQL_PASSWORD in Creating a MySQL Workload.
    • WORDPRESS_DB_NAME: name of the database to be accessed. The value must be the same as that of MYSQL_DATABASE in Creating a MySQL Workload.
    Figure 3 Setting environment variables

    Service Settings

    Click the plus sign (+) to create a Service for accessing the workload from an external network. In this example, create a LoadBalancer Service. Configure the following parameters:

    • Service Name: name of the Service exposed to external networks. In this example, the Service name is wordpress.
    • Access Type: Select LoadBalancer.
    • Service Affinity: Retain the default value.
    • Load Balancer: If a load balancer is available, select an existing load balancer. If not, click Create Load Balancer to create one on the ELB console.
    • Port:
      • Protocol: Select TCP.
      • Service Port: Set this parameter to 80, which is mapped to the container port.
      • Container Port: port on which the application listens. For containers created using the wordpress image, set this parameter to 80. For other applications, set this parameter to the port of the application.
    Figure 4 Creating a Service

  5. Click Create Workload.

    Wait until the workload is created.

    The created Deployment will be displayed on the Deployments tab.

    Figure 5 Workload created successfully

Operations Through kubectl

This section describes how to use kubectl to create a Deployment and expose the Deployment to the Internet through a LoadBalancer Service.

  1. Use kubectl to connect to the cluster. For details, see Connecting to a Cluster Using kubectl.
  2. Create a description file named wordpress-deployment.yaml. wordpress-deployment.yaml is an example file name. You can rename it as required.

    vi wordpress-deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: wordpress
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: wordpress
          version: v1
      template:
        metadata:
          labels:
            app: wordpress
            version: v1
        spec:
          containers:
            - name: container-1
              image: wordpress:php7.3
              env:
                - name: WORDPRESS_DB_HOST
                  value: mysql:3306
                - name: WORDPRESS_DB_USER
                  value: db_user
                - name: WORDPRESS_DB_PASSWORD
                  value: password@123
                - name: WORDPRESS_DB_NAME
                  value: database
              resources:
                requests:
                  cpu: 250m
                  memory: 128Mi
                limits:
                  cpu: 250m
                  memory: 128Mi
          imagePullSecrets:
            - name: default-secret

  3. Create a WordPress workload.

    kubectl apply -f wordpress-deployment.yaml

    If the following information is displayed, the Deployment is being created.

    deployment "wordpress" created

    Check the Deployment.

    kubectl get deployment

    If the following information is displayed, the Deployment is running.

    NAME               READY     UP-TO-DATE   AVAILABLE   AGE 
    wordpress          1/1       1            1           4m5s

  4. Create a description file named wordpress-service.yaml. wordpress-service.yaml is an example file name. You can rename it as required.

    vi wordpress-service.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: wordpress
      namespace: default
      annotations:
        kubernetes.io/elb.class: union
        kubernetes.io/elb.autocreate:         
            '{
                "type": "public",
                "bandwidth_name": "cce-wordpress",
                "bandwidth_chargemode": "bandwidth",
                "bandwidth_size": 5,
                "bandwidth_sharetype": "PER",
                "eip_type": "5_bgp"
            }'
    spec:
      selector:
        app: wordpress
      externalTrafficPolicy: Cluster
      ports:
        - name: cce-service-0
          targetPort: 80
          nodePort: 0
          port: 80
          protocol: TCP
      type: LoadBalancer

  5. Create a Service.

    kubectl create -f wordpress-service.yaml

    If information similar to the following is displayed, the Service has been created.

    service/wordpress created

    kubectl get svc

    If information similar to the following is displayed, the access type has been configured, and the workload is accessible.

    NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    kubernetes   ClusterIP      10.247.0.1       <none>        443/TCP          3d
    mysql        ClusterIP      10.247.202.20    <none>        3306/TCP         8m
    wordpress   LoadBalancer   10.247.130.196   **.**.**.**   80:31540/TCP   51s

Accessing WordPress

  1. Obtain the external access address of WordPress.

    Click the wordpress workload to enter its details page. On the Access Mode tab page, view the IP address of WordPress. The load balancer IP address is the external access address.

    Figure 6 Accessing WordPress

  2. Enter the external access address in the address box of a browser to connect to the workload.

    The following figure shows the accessed WordPress page.

    Figure 7 WordPress workload
    Figure 8 WordPress

Deleting Resources

Until now, you have completed all the Getting Started walkthroughs and have understood how to use CCE. Fees are incurred while nodes are running. If the clusters used in the Getting Started walkthroughs are no longer in use, perform the following steps to delete them. If you will continue the CCE walkthroughs, retain the clusters.

  1. Log in to the CCE console.
  2. In the navigation pane on the left, choose Clusters.
  3. Click next to a cluster and delete the cluster as prompted.

    Figure 9 Deleting a cluster