Docs > Deployment & Installation > On-Prem Deployment & Installation > Deployment on AWS – Elastic Kubernetes Service
1. Getting Started with vuSmartMaps™
3. Console
5. Configuration
6. Data Management
9. Monitoring and Managing vuSmartMaps™
Amazon Elastic Kubernetes Service (EKS) is a managed Kubernetes service that makes it easy to run Kubernetes on AWS without needing to install and operate your own Kubernetes control plane. eksctl is a command-line tool that simplifies the process of creating and managing EKS clusters.
This guide will walk you through the steps to create an EKS cluster using eksctl, from prerequisites to clean-up. By the end of this guide, you will have a fully functional EKS cluster with a managed node group.
Before you begin, ensure you have the following tools installed and configured:
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
Reference: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
aws configure
AWS Access Key ID [None]: ABCDEFGHIAZBERTUCNGG
AWS Secret Access Key [None]: uMe7fumK1IdDB094q2sGFhM5Bqt3HQRw3IHZzBDTm
Default region name [None]: us-east-1
Default output format [None]: json
Reference: https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html
# Download the eksctl binary:
Curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_Linux_amd64.tar.gz" | tar xz -C /tmp
# Move the binary to a directory in your PATH:
sudo mv /tmp/eksctl /usr/local/bin
# Verify the installation:
eksctl versionInstall eksctlCLI
eksctl is a simple CLI tool for creating and managing clusters on EKS – Amazon’s managed Kubernetes service for EC2. It is written in Go, uses CloudFormation, was created by Weaveworks.
To create an eks cluster, copy the below content in a file named cluster-config.yaml.
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
availabilityZones:
- us-east-1a
- us-east-1b
- us-east-1c
metadata:
name: sandbox
region: us-east-1
version: '1.27'
tags:
created-by: pranav-vunet
env: sandbox-eks
iam:
withOIDC: true
vpc:
cidr: 10.42.0.0/16
clusterEndpoints:
privateAccess: false
publicAccess: true
#addons:
#- name: vpc-cni
# version: 1.14.1
# configurationValues: "{\"env\":{\"ENABLE_PREFIX_DELEGATION\":\"true\", \"ENABLE_POD_ENI\":\"true\", \"POD_SECURITY_GROUP_ENFORCING_MODE\":\"standard\"},\"enableNetworkPolicy\": \"true\"}"
# resolveConflicts: overwrite
managedNodeGroups:
- name: sandbox
desiredCapacity: 4
volumeSize: 180
minSize: 4
maxSize: 4
ssh:
allow: true
publicKeyName: Sandbox
iam:
withAddonPolicies:
externalDNS: true
albIngress: true
instanceType: c5n.4xlarge
privateNetworking: false
releaseVersion: 1.27.3-20230816
updateConfig:
maxUnavailablePercentage: 50
labels:
eks-demo-vunet: 'yes'
Run this command eksctl create cluster -f cluster-config.yaml to initiate the creation of your EKS cluster. The process may take several minutes to complete.
Once the cluster creation process is complete, you can verify that your cluster and nodes are up and running.
To list all clusters in the specified region:
eksctl get cluster --region us-east-1
This command will display information about the clusters, including their names and statuses.
To list the nodes in your cluster:
kubectl get nodes
Before you can use kubectl to interact with your cluster, you need to update your kubeconfig file to use the new cluster:
aws eks update-kubeconfig --region us-east-1 --name my-cluster
This command configures kubectl to use the EKS cluster you created.
Next, you need to create an Amazon EBS CSI driver IAM role and Add the Amazon EBS CSI add-on.
eksctl create iamserviceaccount \
--region us-east-1 \ (replace the region name)
--name ebs-csi-controller-sa \
--namespace kube-system \
--cluster eksdemo \ (replace with your cluster-name)
--attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
--approve \
--role-only \
--role-name AmazonEKS_EBS_CSI_DriverRole
This command deploys an AWS CloudFormation stack that creates an IAM role, attaches the IAM policy to it, and annotates the existing ebs-csi-controller-sa service account with the Amazon Resource Name (ARN) of the IAM role.
Now we can finally add the EBS CSI add-on
eksctl create addon --name aws-ebs-csi-driver --cluster eksdemo --service-account-role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/AmazonEKS_EBS_CSI_DriverRole --force
💡Note: If you don’t have access to the download server, download the binaries directly from this URL
Please check with [email protected] for getting the credentials for Download server.
💡Note: Please get the updated license files from [email protected].
Please mention the number of nodes when requesting the license you’re using in case of multi node deployment.
💡Note: Only YAML file should be uploaded here.
2. On clicking the Continue button, vuLauncher will verify the access to the cluster and get the details of the nodes.
💡Note: Once you start the deployment, you cannot edit the configuration you provided.
AWS Load balancer services should be created so that external access to traefik for Web traffic and to Kafka for data ingestion can be done. In case of Traefik, one AWS Load Balancer service is to be created while for Kafka, N number of load balancer services are to be created where N is the number of nodes in the Kafka cluster.
Follow the below steps to create LoadBalancer services to expose Traefik and Kafka.
Create a YAML file named traefik-lb.yaml with the following content:
apiVersion: v1
kind: Service
metadata:
name: traefik-lb
namespace: vsmaps
spec:
type: LoadBalancer
selector:
app.kubernetes.io/instance: traefik-vsmaps
app.kubernetes.io/name: traefik
ports:
- name: websecure
port: 4433
protocol: TCP
targetPort: websecure
Apply the service using kubectl apply -f traefik-lb.yaml
Create a YAML file named broker-lb.yaml with the following content:
apiVersion: v1
kind: Service
metadata:
name: broker-lb
namespace: vsmaps
spec:
type: LoadBalancer
ports:
- name: broker
port: 31092
protocol: TCP
targetPort: 31092
selector:
app: cp-kafka
organization: vunet
release: kafka-cluster
Apply the service using kubectl apply -f broker-lb.yaml
To handle a Kafka cluster with multiple nodes, you can create a separate LoadBalancer service for each Kafka broker. Below is an updated broker-lb.yaml file template that you can duplicate and modify for each broker node.
Create the LoadBalancer YAML file for each Kafka broker node:
For Broker 1 (broker-lb-1.yaml):
apiVersion: v1
kind: Service
metadata:
name: broker-lb-1
namespace: vsmaps
spec:
type: LoadBalancer
ports:
- name: broker-1
port: 31092
protocol: TCP
targetPort: 31092
selector:
app: cp-kafka
release: kafka-cluster
statefulset.kubernetes.io/pod-name: kafka-cluster-cp-kafka-0
For Broker 2 (broker-lb-2.yaml):
apiVersion: v1
kind: Service
metadata:
name: broker-lb-2
namespace: vsmaps
spec:
type: LoadBalancer
ports:
- name: broker-2
port: 31092
protocol: TCP
targetPort: 31092
#selector:
#app: cp-kafka
#organization: vunet
#release: kafka-cluster
selector:
app: cp-kafka
release: kafka-cluster
statefulset.kubernetes.io/pod-name: kafka-cluster-cp-kafka-1
For Broker 3 (broker-lb-3.yaml
apiVersion: v1
kind: Service
metadata:
name: broker-lb-3
namespace: vsmaps
spec:
type: LoadBalancer
ports:
- name: broker-3
port: 31092
protocol: TCP
targetPort: 31092
selector:
app: cp-kafka
release: kafka-cluster
statefulset.kubernetes.io/pod-name: kafka-cluster-cp-kafka-2
After creating the YAML files, you can apply them to your Kubernetes cluster by running the following commands:
kubectl apply -f broker-lb-1.yaml
kubectl apply -f broker-lb-2.yaml
kubectl apply -f broker-lb-3.yaml
Check the status of the services to ensure they are up and running with external IPs assigned.
kubectl get svc -n vsmaps
We should see the EXTERNAL-IP for both traefik-lb and broker-lb services. These IPs can be used to access Traefik and Kafka externally.
In the above output, the e2e-69-187 node is the master node, since the Role is assigned as Master.
3. Run the following command to own the kube config file
sudo chown -R vunet:vunet /etc/kubernetes/admin.conf
Along with the above, please verify the below scenarios
S No. | Description |
1 | Sufficient PVC allocation for al the resources |
2 | Kafka and Clickhouse replica and instances in case of multi node deployment |
3 | Post jobs should be deployed successfully which includes below
|
Each vuSmartMaps installation will have a default timezone configured in the About page. By default, this is set to UTC. This time zone serves as the base timezone for the platform and can only be updated by the Admin. The default timezone is used for:
User-specific timezones can also be configured by each user from the Profile page,allowing customization of the timezone settings for individual preferences while the platform-wide operations adhere to the default timezone.
To specify the user-specific timezone, navigate to the User-Specific Timezone icon at the top right, which displays the timezone set by the user in their profile.
You can change this timezone by navigating to the profile section.
Select your desired timezone from the User Specific Timezone dropdown menu, and the system will update to reflect the chosen timezone.
Each vuSmartMaps installation will have default data retention settings available under Platform Settings -> Data Retention -> Hyperscale DataStore.
Update the default settings accordingly as per the requirements
Browse through our resources to learn how you can accelerate digital transformation within your organisation.
VuNet’s Business-Centric Observability platform, vuSmartMaps™ seamlessly links IT performance to business metrics and business journey performance. It empowers SRE and IT Ops teams to improve service success rates and transaction response times, while simultaneously providing business teams with critical, real-time insights. This enables faster incident detection and response.