Updated on 2024-09-29 GMT+08:00

Step 2: Deploying WordPress

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 Step 1: Deploying MySQL. In this example, WordPress data is stored in the MySQL database.

Operations on the Console

  1. Log in to the CCE console.
  2. Click the name of the target cluster to access the cluster console.
  3. In the navigation pane, choose Workloads. Then, click Create Workload.
  4. Configure parameters as promoted.

    Basic Info
    • Workload Type: Select Deployment.
    • Workload Name: Enter wordpress in the text box.
    • Namespace: Select default.
    • Pods: Set this parameter to 2 in this example.
    Figure 1 Configuring the workload

    Container Settings

    In the Container Information area, click Basic Info and click Select Image next to Image Name. In the dialog box displayed, select Open Source Images, search for wordpress, select the wordpress image, and select php7.3 from the drop-down list for Image Tag.

    Figure 2 Selecting an image tag

    Add environment variables.

    WordPress will get the information about the MySQL database with the following variables.

    • 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 Step 1: Deploying MySQL, which is used to access MySQL.
    • WORDPRESS_DB_PASSWORD: password for accessing the database. The value must be the same as that of MYSQL_PASSWORD in Step 1: Deploying MySQL.
    • WORDPRESS_DB_NAME: name of the database to be accessed. The value must be the same as that of MYSQL_DATABASE in Step 1: Deploying MySQL.
    Figure 3 Configuring environment variables

    Service Settings

    Click the plus sign (+) to create a Service for accessing the workload from an external network. This example shows how to create a LoadBalancer. Configure the following parameters in the window that slides out from the right:

    • Service Name: name of the Service exposed to external networks. In this example, the Service name is wordpress.
    • Service 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.
    • Ports:
      • 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 workload 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 access 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 name to enter its details page. On the page displayed, click the Access Mode tab, view the IP address of WordPress. The public 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 access WordPress.

    The following figure shows the accessed WordPress page.

    Figure 7 WordPress
    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 you will continue the CCE walkthroughs, retain the clusters. If the clusters used in the walkthroughs are no longer in use, perform the following steps to delete them:

  1. Log in to the CCE console.
  2. In the navigation pane, choose Clusters.
  3. Click next to the cluster to be deleted, select Delete Cluster, and confirm the information as prompted.

    Figure 9 Deleting a cluster