Kurniawan Ramdhani

Kurniawan Ramdhani

Freshman

Hello there! 👋 I recently graduated with a Bachelors degree in Informatics from Indonesia. Currently, I'm delving into web development with a focus on Backend technologies and its Infrastructure. Additionally, I'm exploring the realm of DevOps, learning about various tools and experimenting with their usage.

Brought to you by kurniawaanr

My Projects

This is a showcase of my ongoing learning journey and the creations I've developed thus far. While everything may not be perfect and there could be misconceptions, it represents my progress as I strive to learn and improve every day.
and below is my tech I've been used so far and familiar with:

[K8s] Kubernetes HPA with monitoring system

I'm working on a project to develop Horizontal Pod Autoscaling using CPU metrics monitored by Prometheus and Grafana. The goal is to continuously monitor the cluster. While I'm still learning and refining the project, there might be some misunderstandings about various aspects of the project, and it may not the best practices.

HPA High level architecture

Source

[Terraform] Deploy Azure Kubernetes Service (AKS) with Terraform

The plan involves leveraging Terraform to provision an Azure Kubernetes Service (AKS) and dig deeper into Infrastructure as Code (IaC). This initiative aims to enhance skills in both Terraform and cloud-native infrastructure management by deploying AKS on Azure through code-based configuration. On this project, I can gain proficiency in IaC principles and understand the intricacies of managing AKS clusters in the Azure ecosystem.

HPA

clone the repo from here. make sure you have installed Terraform and Azure CLI. then, in both folder /aks and /resource-group folder run this command:

terraform init
terraform apply

[Jenkins] Terraforming Jenkins Server on Azure VM

the ideas is to create Jenkins Master on Azure VM with Terraform. this will make Jenkins Deployment easy to do, just do a command with terraform apply and a VM will launched and bootsraping jenkins installation. i'm using separated resource file to make it easy to manage and maintain resource.

HPA

clone this project from github repo, then change the configuration to your need.

i also including template file for docker installation on customdata-docker.tpl file. if you want to change it just change in on /virtualmachine folder then change this value.

custom_data = filebase64("customdata-jenkins.tpl")

then launch this using command

terraform init
terraform apply -auto-approve

i'm gonna use this Jenkins Server for next project

GitOps/ArgoCD for NodeJS Application

ON PROGRESS

[ArgoCD] CI/CD Pipeline Implementation with ArgoCD on AKS and Jenkins

In this project, I created a CI/CD pipeline using ArgoCD on Azure Kubernetes Service (AKS) and integrated Jenkins for continuous integration (CI). The aim was to automate the build, test, and deployment processes to ensure efficient and reliable software delivery. In this architecture, I'm initially provisioning resources using the Azure portal. In the next update, I will automate the provisioning process using Terraform.

Azure Architecture

test code

Key Components :

  • Azure Kubernetes Service (AKS): Used for a managed Kubernetes environment to deploy and manage containerized applications.
  • Azure Container Registry: Used for push & pull images.
  • Jenkins: Set up to handle CI tasks, automating the build and testing phases.
  • ArgoCD: Implemented for continuous deployment (CD), automating the deployment of applications to AKS.

Implementation :

CI/CD Architecture
  • CI with Jenkins: Configured pipelines to automate code builds and tests upon commits, ensuring high code quality.
  • CD with ArgoCD: Automated deployments to AKS, ensuring rapid and reliable releases.

In this scenario, I'm using a simple NodeJS app, and whenever changes are made to the NodeJS repository, ArgoCD will track these changes and synchronize them with the Kubernetes cluster.

[CircleCI] Streamlining CI/CD in Azure Cloud: Exploring CircleCI's Efficiency Over Jenkins

CircleCI is a simpler option compared to Jenkins. It's easy to set up and doesn't need much tweaking. Unlike Jenkins, which needs a lot of manual work and upkeep, CircleCI already has things set up for you and works smoothly in the cloud. This means developers can spend more time writing code instead of dealing with the setup, making deployments faster and more dependable. In this project, I'll show how CircleCI is easy to use and why it's better than other similar tools.

CI/CD Architecture

Key Components :

  • Azure Container Registry (ACR)
  • CircleCI Account
  • Azure Web App

create Azure Container Registry and get an access key from the Registry to give permission pushing image into it. Clone demo project from my GitLab repo. im using NodeJS to create simple Web App. then create and build a Docker Image on ACR, here's the dockerfile :

FROM node:current-alpine
COPY . /app
WORKDIR /app
RUN npm install
ENTRYPOINT ["npm", "start"]

Push it to the Azure Container Registry (ACR). I'm currently using an existing ACR for another project named gitopscr and will create a new repository called nodeapp. The variables underlined can be adjusted according to your requirements.

docker build -t gitopscr.azurecr.io/nodeapp:latest .

make sure you already login into your ACR, otherwise the push process will fail. Then push the image using this command

docker push gitopscr.azurecr.io/nodeapp:latest

then create Azure Web App, make sure it can access to ACR Repository. next create .circleci/config.yml inside root project to configure pipeline. Then login into CircleCI, in this setup im using GitLab. Dont forget to set Environtment Variable in CircleCI App project setting. Next, make some change on main repo then commit it, the pipeline should be running like this and success.

CI/CD Architecture

A build job failed because CircleCI attempted to push an image to ACR, which requires an access key. Be sure to add the necessary environment variable in the CircleCI app.

$DOCKER_USER = ACR user
$DOCKER_PASS = ACR password

[K3s] Automating k3s Cluster Provisioning Using Vagrant & Ansible

In this project, I automate the provisioning of a k3s cluster using k3sup, a tool that simplifies deploying lightweight Kubernetes clusters. Unlike Minikube, which supports only single-node setups, k3s allows for multi-node deployments, offering greater scalability and flexibility. By combining k3sup with Vagrant and Ansible, I demonstrate how to efficiently set up a scalable k3s cluster locally, providing a cost-effective alternative to cloud-based Kubernetes deployments.

Thanks to eruszczak for providing these ideas! I'm modifying his code to match my requirements, but I'm using it exclusively to deploy a k3s cluster; Kubernetes deployments are not included. here is the flow diagram:

k3s

Requirements:

  • VirtualBox
  • Ansible
  • Vagrant
  • k3sup
  • kubectl

you can clone My Repo to start deploying k3s cluster (i'm running it on Ubuntu20), or if you're an advanced user, you can refer to eruszczak repo instead.

then you just have to edit Vagrantfile on this default_interface section:

# edit this interface into your used interface
default_interface = "wlp3s0"

then edit ansible_host on Inventory.yml You need to edit the IP address 192.168.x.x to match your specific IP subnet configuration for each ansible_host.

ansible_host: 192.168.x.x

if everything is set up, run the following command on your terminal:

make

Ansible Playbook

then wait for vagrant to create VMs with hashicorp/bionic64 box, and Ansible provisioning VMs. after that you can run kubectl get nodes command to see list of nodes.

k3s