AWS EKS cluster for the Integration: OWNCLOUD with MySQL

Anshika Sharma
7 min readJul 12, 2020
AWS EKS Service

Hello guys !!

In this blog i am going to share some interesting facts while creating AWS EKS cluster for an automated Master-Slave architecture. In this blog we will cover a lot of facts and implementations one by one.

We are going to create a great integration where we will connect owncloud with MySQL database on an automated AWS EKS cluster also this complete integration we are going to build by creating our own lab environment over AWS.

Before moving forward, lets go through some of the major concepts in AWS :

About EKS :

EKS stands for Elastic Kubernetes Service, which is an Amazon offering that helps in running the Kubernetes on AWS without requiring the user to maintain their own Kubernetes control plane. It is a fully managed service by Amazon.

What does EKS do ?

Amazon EKS runs Kubernetes control plane instances across multiple Availability Zones to ensure high availability. Amazon EKS automatically detects and replaces unhealthy control plane instances, and it provides automated version upgrades and patching for them.

What is VPC ?

Amazon Virtual Private Cloud (Amazon VPC) enables us to launch AWS resources into a virtual network that we have defined. This virtual network closely resembles a traditional network that we had operate in our own data center, with the benefits of using the scalable infrastructure of AWS. It provide a complete isolation from the outer world.

In VPC , there is concept of subnets that means Subnetwork or subnet is a logical subdivision of an IP network. The practice of dividing a network into two or more networks is called subnetting. AWS provides two types of subnetting one is Public which allow the internet to access the machine and another is private which is hidden from the internet. Here we are going to create our own lab so it will be automatically isolated and for allowing it to connect to the outer world we will be creating the Internet Gateway for our VPC and for connecting to the internet Gateway we will create the Routing table and attach it to our subnet or subnets.

What is Internet Gateway?

An internet gateway is a horizontally scaled, redundant, and highly available VPC component that allows communication between your VPC and the internet.

What is Routing Table ?

A route table contains a set of rules, called routes, that are used to determine where network traffic from your subnet or gateway is to be directed.

So with our complete plan we will have a architcture like this :

Architecture of complete Setup

Requirements for this task :

  1. Account on AWS , also a IAM user created.
  2. AWS CLI installed and configured.
  3. eksctl installed for accessing the cluster (Although we are going to create everything with Terraform ).
  4. Kubectl setup : It is used for a communication with the cluster API server.

Now first of all we will create a VPC environment for deploying our cluster setup . This Virtual Private Cloud, we are going to create from GUI , Lets create it :

Step 1 : Go to the VPC Service on the AWS service Dashboard and choose VPC option , then choose Create VPC

Creating new VPC

Step 2 : After creating VPC we will now move toward creating Subnet , here i have planned to create two subnets in two different availability zones, named subnet_public and subnet_private .

Creating subnet and providing the cidr or the ip range
Creating subnet and providing the cidr or the ip range

Step 3 : Now we will create the Internet Gateway and attach the VPC we have created for allowing the subnets to connect to the internet.

Creating Internet Gateway

Step 4 : After this we need to create a routing table for setting up the route from the subnet to the Internet Gateway

Creating Routing Table
Adding route to the Route Table

Now we will add this routing table to the subnet

Adding routing table to the subnet

Similarly add this routing table to other subnet also.

Hence, we have successfully created our VPC or simply our lab setup with having an internet connectivity with it. This architecture will be like

Architecture of our own Virtual private cloud

EKS Cluster Setup

Now lets start creating our EKS cluster setup. For this cluster we are going to use the terraform code, where firstly we will create a IAM ROLE and then attach the required policies for our cluster. Then we will create our cluster named by “mycluster”.

Terraform code to create the aws_iam_role
creating eks cluster
creating eks cluster(cont.)
creating eks cluster(cont.)

Now initialize the terraform for adding all the terraform plugins, with “terraform init” command.

Initializing terraform
Initializing Terraform successful

After this apply the terraform code to perform it execution and to create the EKS cluster, with “terraform apply” command .

Applying Terraform code

After some seconds, check the AWS console that the cluster has been created or not ?

Cluster created

Yeah!!!!! the cluster has been successfully created. Now check the instances, they might be created or in a creating status for now.

Running Instances

One that need to be noticed is that in the terraform code for creating the cluster, we have used the VPC and subnets that we have created and not the default once i.e., we have created our own isolated cluster for running the EKS cluster.

Now update the kubeconfig file for managing our EKS cluster with the kubectl command, by using “ aws eks update-kubeconfig — — name < cluster name>” , here our cluster name is mycluster.

Updating the kubeconfig file

So guys, as we have successfully created the setup for our cluster, Now its time to create the deployments over these clusters without thinking about any downtime or any management issues beacause Kubernetes is a very intelligent and advanced tool for management. With the yml code we will make the deployments for the owncloud , mysql and pvc for them also a Load Balancer service for OwnCloud, so that the traffic would be managed.

  1. Code for creating the mysql-deployment , i.e., mysql-deployment.yml file
creating service and pvc for mysql-deployment
creating Deployment for mysql-deployment

2. Code for creating owncloud-deployment, i.e., owncloud-deployment.yml

creating service and pvc for owncloud-deployment
creating owncloud-deployment

3. Creating rbac.yml file for security so that we can get more security for our deployments.

creating rbac.yml file

Finally, our individual code is ready but as this is an automation world so here we execute the complete code with a single command, i.e., by using the kustomization.yml file .

Kustomization.yml file

For executing this kustomization.yml file we will use the command

kubectl create -f .

Setup created successfully, all the services deployed

Now check for the services by using “kubectl get all -o wide” command , here we have used “-o wide” for accessing detailed information about the deployments.

Access all the deployments and services

Now lets check over the AWS Dashboard, we see that a Load Balancer is also created by which we will access our OwnCloud dashboard and also it will handle all the traffic coming to the OwnCloud dashboard.

Load Balancer created

Through this DNS name of the Load Balancer, we can access the OwnCloud Dashboard, i.e.,

OwnCloud Accessed

Now creating our account, in order to use the OwnCloud.

Dashboard of OwnCloud

Here we can easily upload and retrive multiple files, folders, pictures etc.

On this OwnCloud, your data is safe and secure and can be retrived anytime and anywhere, without any Downtime because Kubernetes cluster in AWS is handling the Traffic.

Now After implementing this complete setup, we will destroy the EKS cluster from the CLI itself, i.e., we will destroy the cluster by using the terraform command “terraform destroy ”.

Destroying the EKS cluster
Destroy Successful

Hence, we have worked on multiple things and implemented them successfully also. I hope you enjoyed this implementation of AWS Elastic Kubernetes Service.

Feel free to ask about any query, i will try to solve it as soon as i can..

Thank you !!!

--

--

Anshika Sharma

I am a tech enthusiast, researcher and work for integrations. I love to explore and learn about the new technologies and their right concepts from its core.