This repository contains IaC scripts to deploy Kubernetes Cluster on different Cloud Service Providers!
- ✅: Verified
- 🔨: Work in progress
- From Scratch ✅
Deploy EKS Cluster without using Terraform Module
- IAM Roles for Service Accounts (IRSA) ✅
Assign IAM Roles to Pods via Kubernetes Service Account - Pod Identity ✅
Assign IAM Roles to Pods via EKS Pod Identity Association - Access Entries ✅
Grant cluster access right to IAM User/Role via Access Entries
- Load Balancer Controller ✅
Create ALB via Ingress and NLB via Service using Load Balancer Controller (LBC) - Cloud Controller Manager ✅
Create CLB via LoadBalancer type Service using Cloud Controller Manager (CCM) - Ingress Nginx + NLB ✅
Use Ingress Controller (ingress-ngix) with NLB
- Pod mount EFS Volume ✅
Mount EFS Volume to Pod - Pod mount EBS Volume ✅
Mount EBS Volume to Pod - Pod mount S3 Bucket ✅
Mount S3 Bucket to Pod
- Cluster Proportional Autoscaler (CPA)
Scale pods based on the number of nodes - Horizontal Pod Autoscaler (HPA) ✅
Scale deployment based on CPU and Memory usage - Karpenter ✅
Scale nodes based on pod requirements - Cluster Autosclaer 🔨
Scale nodes based on pod requirements
- CloudWatch Log: Fluent Bit 🔨
Emit logs to CloudWatch Log using Fluent Bit
- Managed Node Group - Custom Launch Template ✅ Supply custom launch template to Managed Node Group
- Cluster Multi-CIDR ✅
Use multiple CIDR blocks for the EKS cluster - Fully Private Cluster ✅
Create a fully private EKS cluster
- nivida 🔨
Provision GPU nodes
- windows ✅
Use Windows Worker Nodes in EKS
- add-ons (Advanced Configurations)
Use Advanced Configurations in EKS Add-On - add-ons (Pod Identity) ✅
Use Pod Identity in Add-ons instaed of IRSA
- ECR Pull Through Cache ✅
Use ECR as Pull Through Cache in EKS Cluster
- EKS Auto Mode ✅
Use EKS Auto Mode to manage node groups, pods, and services, and so on.
- v.126
This repository is organized in a way that you can easily find the script that you need. The folder structure is as follows:
├── README.md
├── [Kubernetes distro / installer]
│ ├── [Kubernetes version]
│ │ │ ├── [Cloud Service Provider]
│ │ │ │ ├── [IaC tool]
├── KaaS (Kubernetes as a Service)
│ ├── [Cloud Service Provider's KaaS]
│ │ ├── [IaC Script]
Clone the project, run the script and you are good to go!
- Terraform
# initalize the terraform terraform init # create a plan and see what's going to happen and save it to a file terraform plan -out plan.out # apply the plan terraform apply plan.out
If you want to contribute to this repository, please follow the following steps:
- Fork the repository
- Create a new branch
- Make your changes
- Create a pull request
The Terraform projects are designed to be isolated and independent, so that you can just copy the whole directory without having to figure out the dependencies between folders in the repo.
Therefore, there will be duplicated code between examples, this is expected in order to achieve the above goal
TBC