Ampere Computing Logo
Contact Sales
Ampere Computing Logo
Workloads Ampere Altra

Kubernetes on Ampere - Deploy WordPress and MySQL

Tutorial

Overview
Prerequisites
Preparing the Deployment File for MySQL
Preparing the Deployment File for WordPress
Installation Steps
Verify Services and Install WordPress
Overview

WordPress is a very popular blogging and content management tool that uses a relational database to store blog articles, related data, metadata, pictures etc. This tutorial shows how to deploy a WordPress Site and MySQL database on a Kubernetes cluster hosted on Ampere servers or virtual machines. Each component runs as a container. The WordPress container is the front-end tier and the MySQL container will be the backend/database for WordPress.

We use the official arm64 Docker images for WordPress and MySQL from Docker hub.

Prerequisites

If deploying on the cloud, you can use your cloud provider’s Kubernetes engine. Ampere instances are available on OCI, GCP and Azure clouds. When deploying on bare-metal servers, create a Kubernetes cluster using Kubeadm or Minikube.

Preparing the Deployment File for MySQL

The following manifest describes a single instance deployment of MySQL. The MySQL container uses a PersistentVolume (PV) for storage using the host path /tmp/mysql/data and mounted at /var/lib/mysql. The password for the MySQL database is stored in a Kubernetes secret which is generated from password.txt.

NOTE: For production deployments, we recommend PVs backed by persistent disks to store data outside of containers.

mysql-deployment.yaml


--- apiVersion: v1 kind: PersistentVolume metadata: name: mysql-pv-volume labels: type: local spec: storageClassName: manual capacity: storage: 20Gi accessModes: - ReadWriteOnce hostPath: path: "/tmp/mysql/data" persistentVolumeReclaimPolicy: Recycle --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim spec: storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 20Gi --- apiVersion: v1 kind: Service metadata: name: wordpress-mysql labels: app: wordpress-mysql spec: ports: - port: 3306 selector: app: wordpress-mysql --- apiVersion: apps/v1 kind: Deployment metadata: name: wordpress-mysql labels: app: wordpress-mysql spec: selector: matchLabels: app: wordpress-mysql strategy: type: Recreate template: metadata: labels: app: wordpress-mysql spec: containers: - image: mysql:oracle name: mysql env: - name: MYSQL_DATABASE value: wordpress - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password.txt ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pv-claim
Preparing the Deployment File for WordPress

This manifest describes a WordPress deployment. The WordPress container also uses a PersistentVolume for storing the website files using the host path /tmp/wp/data and mounted at /var/www/html. The environment variable WORDPRESS_DB_HOST sets the name of the MySQL service and WORDPRESS_DB_PASSWORD defines the password to access the MySQL database from the Kubernetes secret generated from the password.txt file.

If using a cloud deployment, you can set the service type to LoadBalancer and use the IP address of the cloud load balancing service to access the WordPress front-end. If using Kubernetes on bare metal, you can set the type to NodePort and use the Kubernetes node IP address to access WordPress front-end. Alternatively, you can use type as LoadBalancer and specify the external IP address of your server.

wordpress-deployment.yaml


--- apiVersion: v1 kind: PersistentVolume metadata: name: wp-pv-volume labels: type: local spec: storageClassName: manual capacity: storage: 20Gi accessModes: - ReadWriteOnce hostPath: path: "/tmp/wp/data" persistentVolumeReclaimPolicy: Recycle --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: wp-pv-claim labels: app: wordpress spec: storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 20Gi --- apiVersion: v1 kind: Service metadata: name: wordpress labels: app: wordpress tier: frontend spec: ports: - port: 80 selector: app: wordpress tier: frontend type: LoadBalancer externalIPs: - 10.76.87.233 --- apiVersion: apps/v1 kind: Deployment metadata: name: wordpress labels: app: wordpress tier: frontend spec: replicas: 1 selector: matchLabels: app: wordpress tier: frontend strategy: type: Recreate template: metadata: labels: app: wordpress tier: frontend spec: containers: - image: wordpress:6.0.1-php7.4 name: wordpress env: - name: WORDPRESS_DB_HOST value: wordpress-mysql - name: WORDPRESS_DB_NAME value: wordpress - name: WORDPRESS_DB_USER value: root - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password.txt ports: - containerPort: 80 name: wordpress volumeMounts: - name: wordpress-persistent-storage mountPath: /var/www/html volumes: - name: wordpress-persistent-storage persistentVolumeClaim: claimName: wp-pv-claim
Installation Steps
  • Set up MySQL secret. Create a new file called password.txt and add your desired MySQL password in this file. Make sure that there is no newline (\n) at the end of the password. Use kubectl command to generate the MySQL secret.
  • Deploy MySQL and WordPress containers using the YAML files from the previous section.

kubectl create secret generic mysql-pass --from-file=password.txt kubectl create -f mysql-deployment.yaml kubectl create -f wordpress-deployment.yaml
Verify Services and Install WordPress

Verify that services are running using the following command:


# kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 51m wordpress LoadBalancer 10.100.16.187 10.76.87.233 80:32160/TCP 40m wordpress-mysql ClusterIP 10.105.136.201 <none> 3306/TCP 40m

# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE mysql-pv-volume 20Gi RWO Recycle Bound default/wp-pv-claim manual 13h wp-pv-volume 20Gi RWO Recycle Bound default/mysql-pv-claim manual 13h

Copy the external IP address of the WordPress service and open the link http://<"ip-address"> in a browser. You should see the WordPress setup page.


WordPress Homescreen


Fill in the details and set up the WordPress site. Your WordPress site is now up and running on Ampere !!


Wordpress Success

Created At : December 19th 2022, 6:29:21 pm
Last Updated At : June 6th 2023, 9:17:16 pm
Ampere Logo

Ampere Computing LLC

4655 Great America Parkway Suite 601

Santa Clara, CA 95054

image
image
image
image
 |  |  |  |  |  | 
© 2023 Ampere Computing LLC. All rights reserved. Ampere, Altra and the A and Ampere logos are registered trademarks or trademarks of Ampere Computing.
This site is running on Ampere Altra Processors.