Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
README.md 20.20 KiB

aws-eks-accelerator-for-terraform

Main Purpose

This project provides a framework for deploying best-practice multi-tenant EKS Clusters, provisioned via Hashicorp Terraform and Helm charts on AWS.

Overview

The AWS EKS Accelerator for Terraform module helps you to provision EKS Clusters, managed node groups with on-demand and spot instances, Fargate profiles, and all the necessary plugins/add-ons for a production-ready EKS cluster. The Terraform Helm provider is used to deploy common Kubernetes add-ons with publicly available Helm Charts. This project leverages the official terraform-aws-eks module to create EKS Clusters

This framework helps you to design and create EKS clusters for different environments in various AWS accounts across multiple regions with a unique Terraform configuration and state file per EKS cluster.

  • The top-level live folder contains the configuration for each cluster. Each folder under live/<region>/application represents an EKS cluster environment(e.g., dev, test, load etc.). This folder contains backend.conf and base.tfvars, used to create a unique Terraform state for each cluster environment. Terraform backend configuration can be updated in backend.conf and cluster common configuration variables in base.tfvars

  • vpc.tf contains all VPC resources

  • eks.tf contains all EKS Cluster resources

  • helm.tf contains resources to invoke helm modules under helm folder

  • modules folder contains all the AWS resource modules

  • helm folder contains all the Helm chart modules

  • examples folder contains sample template files with base.tfvars which can be used to deploy clusters with multiple add-on options

EKS Cluster Deployment Options

This module provisions the following EKS resources

EKS Cluster Networking Resources

  1. VPC and Subnets
  2. VPC endpoints for fully private EKS Clusters
  3. NAT Gateway
  4. Internet Gateway

EKS Cluster resources

  1. EKS Cluster with multiple networking options
    1. Fully Private EKS Cluster
    2. Public + Private EKS Cluster
    3. Public Cluster)
  2. EKS Addons -
  3. Managed Node Groups with On-Demand - AWS Managed Node Groups with On-Demand Instances
  4. Managed Node Groups with Spot - AWS Managed Node Groups with Spot Instances
  5. Fargate Profiles - AWS Fargate Profiles
  6. Launch Templates with SSM agent - Deployed through launch templates to Managed Node Groups
  7. Bottlerocket OS - Managed Node Groups with Bottlerocket OS and Launch Templates
  8. RBAC for Developers and Administrators with IAM roles
  9. Amazon Managed Service for Prometheus (AMP) - AMP makes it easy to monitor containerized applications at scale
  10. Self-managed Node Group with Windows support - Ability to create a self-managed node group for Linux or Windows workloads. See Windows and Linux examples.

Kubernetes Addons using Helm Charts

  1. Metrics Server
  2. Cluster Autoscaler
  3. AWS LB Ingress Controller
  4. Traefik Ingress Controller
  5. FluentBit to CloudWatch for Managed Node groups
  6. FluentBit to CloudWatch for Fargate Containers
  7. Agones - Host, Run and Scale dedicated game servers on Kubernetes
  8. Prometheus
  9. Kube-state-metrics
  10. Alert-manager
  11. Prometheus-node-exporter
  12. Prometheus-pushgateway
  13. OpenTelemetry

Helm Charts Modules

Helm Chart Module within this framework allows you to deploy Kubernetes apps using Terraform helm chart provider with enabled conditional parameter in base.tfvars.

You can find the README for each Helm module with instructions on how to download the images from Docker Hub or third-party repos and upload it to your private ECR repo.

For example, ALB Ingress Controller for AWS LB Ingress Controller module.

Ingress Controller Modules