Deploying WordPress on an existing one-node EKS cluster
Services Covered
EKS
Lab description
This lab comes with an EKS cluster provided by Cloud Academy – it consists of one EC2 Worker Node
Learning Objectives
- Use an EC2 instance to issue commands against the EKS cluster.
- Manage EKS Kubernetes cluster, install several Kubernetes management-related tools and utilities
- Launch the backend MySQL database using the previously prepared Kubernetes deployment
- Launch the frontend Web server using the previously prepared Kubernetes deployment
Lab date
23-12-2021
Prerequisites
- AWS account
- EC2 instance running
Lab steps
- Launch an instance to be used to connect to EKS cluster. Then use Instance Connect. This lab comes with EKS cluster and six EBS Volumes for persistence storage
And three EC2 instances
- Using the EC2 Connect download the
kubectl
utility:curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.21.2/2021-07-05/bin/linux/amd64/kubectl chmod +x ./kubectl sudo cp ./kubectl /usr/local/bin export PATH=/usr/local/bin:$PATH
Download the AWS CLI utility, give it executable permissions, and copy it into a directory that is part of the PATH environment variable
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install
Use the
aws
utility, to retrieve EKS Cluster name:EKS_CLUSTER_NAME=$(aws eks list-clusters --region us-west-2 --query clusters[0] --output text) echo $EKS_CLUSTER_NAME
Use the
aws
utility to query and retrieve your Amazon EKS cluster connection details, saving them into the ~/.kube/config fileaws eks update-kubeconfig --name $EKS_CLUSTER_NAME --region us-west-2
View the EKS Cluster connection details.
cat ~/.kube/config
Use the
kubectl
utility to list the EKS Cluster Worker Nodes:kubectl get nodes
Use the
kubectl
utility to describe in more detail the EKS Cluster Worker Nodes:kubectl describe nodes
- Install the
git
command and then clone the CloudAcademy k8s-wordpress Github repository:sudo yum -y install git curl-devel git clone https://github.com/cloudacademy/k8s-wordpress.git cd k8s-wordpress
Retrieve the AZ (Availability Zone) that the first EKS worker node has been deployed into
EKS_WORKER_NODE_AZ=$(kubectl get nodes -o jsonpath="{.items[*].metadata.labels.topology.kubernetes.io/zone}" | cut -d" " -f1) echo $EKS_WORKER_NODE_AZ
Discover the dedicated backend MySQL EBS Volume that was automatically created during the lab provisioning process. Query for the Volume ID and then update the respective Kubernetes deployment YAML file for launching the backend MySQL database:
VOLUMEID_DB=$(aws ec2 describe-volumes --region us-west-2 --filters "Name=tag:Name,Values=wordpress.mysql.volume" "Name=tag:Zone,Values=$EKS_WORKER_NODE_AZ" --query Volumes[0].VolumeId --output text) echo $VOLUMEID_DB sed -i.bak s/EBS_VOLUME_ID/$VOLUMEID_DB/g wordpress.deployment.mysql.yaml sed -i.bak s/EKS_WORKER_NODE_AZ/$EKS_WORKER_NODE_AZ/g wordpress.deployment.mysql.yaml echo updated: cat wordpress.deployment.mysql.yaml | grep 'volumeID|zone'
Discover the dedicated frontend Web Server EBS Volume that was automatically created during the lab provisioning process. Query for the Volume ID and then update the respective Kubernetes deployment YAML file for launching the frontend Web server:
VOLUMEID_WEB=$(aws ec2 describe-volumes --region us-west-2 --filters "Name=tag:Name,Values=wordpress.web.volume" "Name=tag:Zone,Values=$EKS_WORKER_NODE_AZ" --query Volumes[0].VolumeId --output text) echo $VOLUMEID_WEB sed -i.bak s/EBS_VOLUME_ID/$VOLUMEID_WEB/g wordpress.deployment.web.yaml sed -i.bak s/EKS_WORKER_NODE_AZ/$EKS_WORKER_NODE_AZ/g wordpress.deployment.web.yaml echo updated: cat wordpress.deployment.web.yaml | grep 'volumeID|zone'
- Launch the backend MySQL database using the previously prepared Kubernetes deployment wordpress.deployment.mysql.yaml
kubectl create -f wordpress.deployment.mysql.yaml
Examine the status of the backend MySQL database pod:
kubectl get pods
- Launch the frontend Web server using the previously prepared Kubernetes deployment wordpress.deployment.web.yaml
kubectl create -f wordpress.deployment.web.yaml
Examine the status of the frontend Web server pod:
kubectl get pods
- Examine the existing deployed Kubernetes Services using the following command.
kubectl get services -o wide
- Open a new web browser tab and navigate to the host
- Run the following command to delete your Secret:
kubectl delete secret mysql-pass
Run the following command to delete all Deployments:
kubectl delete deployment -l app=wordpress
Run the following command to delete all Services:
kubectl delete service -l app=wordpress
Perform the following list of commands to confirm that all Kubernetes resources have been removed:
kubectl get deployments kubectl get pods kubectl get services kubectl get secrets