Automate Kubernetes Cluster Using Ansible

Problem Statement

  • Create roles that will configure the master node and slave node separately.
  • Launch a wordpress and MySQL database connected to it in the respective slaves.
  • Expose the wordpress pod and the client able to hit the wordpress IP with its respective port.

Solution

  • For Wordpress and Mysql we need to create yml files for k8s and deploy them.

Step-1)Launch ec2-instances on AWS Cloud and Configuring k8s Multi-Node

ansible-galaxy collection install rootritesh.k8s_cluster

Learn More:

  • Only we need to copy the files from local yml files for k8s of wordpress+mysql to the cluster so that we can execute that.

Step-2)Creating a wordpress.yml file.

  • This file divided into two parts.
  • First One for service for exposing the wordpress
  • Second: for the deployment of wordpress.
  • In this deployment, I have already included the env for hosts, password so that we don’t need to type the hosts at the time of configuration of Wordpress
  • For password, I have used Secret.

Step-3)Creating a db.yml file.

  • Same here also two parts.
  • First: for Service, I am using type ClusterIP for making db secure.
  • Second and finally: For deployment, in this deployment for the MySQL root password I am using secret.

Step-3)Creating a Kustomization.yml file

  • In this file, I have created secrets and included files for deployment.

Step-4)Running the files

  • Calling the ec2 role from ansible collections.
  • Configuring k8s multi-node and copying files for deployment.
  • First I am calling role k8s_master for configuring k8s master and k8s_slave for configuring k8s slave.
  • After this, I am copying deployments files from local to remote to the k8s master-slave.
  • And finally, running the file using shell module, kubectl apply -k .(this command finds the kustomization file and run it).

Output 🚀

  • EC2 instance launched 😀.
  • K8s Multi-Node Configured 😄.
Wordpress Site
  • When you open Wordpress, you don’t need to add MySQL DB, pass, etc, because at the time of deployment in wordpress.yml, for these keywords, I have used labels.

Github Link:

DevOps/Cloud Enthusiast