Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/scholzj/terraform-aws-kubernetes
Terraform module for Kubernetes setup on AWS
https://github.com/scholzj/terraform-aws-kubernetes
aws-kubernetes kubeadm kubernetes kubernetes-cluster kubernetes-setup terraform terraform-modules
Last synced: about 1 month ago
JSON representation
Terraform module for Kubernetes setup on AWS
- Host: GitHub
- URL: https://github.com/scholzj/terraform-aws-kubernetes
- Owner: scholzj
- License: apache-2.0
- Created: 2017-09-28T15:16:57.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2023-04-16T18:13:59.000Z (over 1 year ago)
- Last Synced: 2024-09-27T19:01:39.322Z (about 2 months ago)
- Topics: aws-kubernetes, kubeadm, kubernetes, kubernetes-cluster, kubernetes-setup, terraform, terraform-modules
- Language: HCL
- Size: 287 KB
- Stars: 200
- Watchers: 11
- Forks: 129
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# AWS Kubernetes
AWS Kubernetes is a Kubernetes cluster deployed using [Kubeadm](https://kubernetes.io/docs/admin/kubeadm/) tool. It provides full integration with AWS. It is able to handle ELB load balancers, EBS disks, Route53 domains etc.
- [AWS Kubernetes](#aws-kubernetes)
- [Updates](#updates)
- [Prerequisites and dependencies](#prerequisites-and-dependencies)
- [Including the module](#including-the-module)
- [Add-ons](#addons)
- [Custom add-ons](#custom-addons)
- [Tagging](#tagging)## Updates
* *1.4.2023* Update to Kubernetes 1.26.3 + update add-ons (Ingress-NGINX Controller, External DNS, Metrics Server, AWS EBS CSI Driver)
* *4.3.2023* Update to Kubernetes 1.26.2 + update add-ons (Ingress-NGINX Controller)
* *22.1.2023* Update to Kubernetes 1.26.1 + update add-ons (External DNS)
* *10.12.2022* Update to Kubernetes 1.26.0 + update add-ons (AWS EBS CSI Driver, Metrics server)
* *13.11.2022* Update to Kubernetes 1.25.4 + update add-ons
* *2.10.2022* Update to Kubernetes 1.25.2 + update add-ons
* *26.8.2022* Update to Kubernetes 1.25.0 + Calico upgrade
* *22.8.2022* Update to Kubernetes 1.24.4
* *16.7.2022* Update to Kubernetes 1.24.3
* *27.6.2022* Update to Kubernetes 1.24.2
* *11.6.2022* Update to Kubernetes 1.24.1 + update add-ons + remove dependency on the template provider
* *8.5.2022* Update to Kubernetes 1.24.0 + update add-ons
* *23.3.2022* Update to Kubernetes 1.23.5 + update add-ons
* *19.2.2022* Update to Kubernetes 1.23.4
* *12.2.2022* Update to Kubernetes 1.23.2
* *29.12.2021* Update to Kubernetes 1.23.1
* *11.12.2021* Update to Kubernetes 1.23.0## Prerequisites and dependencies
* AWS Kubernetes deploys into existing VPC / public subnet. If you don't have your VPC / subnet yet, you can use [this](https://github.com/scholzj/terraform-aws-vpc) module to create one.
* The VPC / subnet should be properly linked with Internet Gateway (IGW) and should have DNS and DHCP enabled.
* Hosted DNS zone configured in Route53 (in case the zone is private you have to use IP address to copy `kubeconfig` and access the cluster).
* To deploy AWS Kubernetes there are no other dependencies apart from [Terraform](https://www.terraform.io). Kubeadm is used only on the EC2 hosts and doesn't have to be installed locally.## Including the module
Although it can be run on its own, the main value is that it can be included into another Terraform configuration.
```hcl
module "kubernetes" {
source = "scholzj/kubernetes/aws"aws_region = "eu-central-1"
cluster_name = "aws-kubernetes"
master_instance_type = "t2.medium"
worker_instance_type = "t2.medium"
ssh_public_key = "~/.ssh/id_rsa.pub"
ssh_access_cidr = ["0.0.0.0/0"]
api_access_cidr = ["0.0.0.0/0"]
min_worker_count = 3
max_worker_count = 6
hosted_zone = "my-domain.com"
hosted_zone_private = falsemaster_subnet_id = "subnet-8a3517f8"
worker_subnet_ids = [
"subnet-8a3517f8",
"subnet-9b7853f7",
"subnet-8g9sdfv8"
]
# Tags
tags = {
Application = "AWS-Kubernetes"
}# Tags in a different format for Auto Scaling Group
tags2 = [
{
key = "Application"
value = "AWS-Kubernetes"
propagate_at_launch = true
}
]
addons = [
"https://raw.githubusercontent.com/scholzj/terraform-aws-kubernetes/master/addons/storage-class.yaml",
"https://raw.githubusercontent.com/scholzj/terraform-aws-kubernetes/master/addons/heapster.yaml",
"https://raw.githubusercontent.com/scholzj/terraform-aws-kubernetes/master/addons/dashboard.yaml",
"https://raw.githubusercontent.com/scholzj/terraform-aws-kubernetes/master/addons/external-dns.yaml",
"https://raw.githubusercontent.com/scholzj/terraform-aws-kubernetes/master/addons/autoscaler.yaml"
]
}
```An example of how to include this can be found in the [examples](examples/) dir.
## Add-ons
Currently, following add-ons are supported:
* Kubernetes dashboard
* Heapster for resource monitoring
* Storage class and CSI driver for automatic provisioning of persistent volumes
* External DNS (Replaces Route53 mapper)
* Ingress
* AutoscalerThe add-ons will be installed automatically based on the Terraform variables.
## Custom add-ons
Custom add-ons can be added if needed. For every URL in the `addons` list, the initialization scripts will automatically call `kubectl -f apply ` to deploy it. The cluster is using RBAC. So the custom add-ons have to be *RBAC ready*.
## Tagging
If you need to tag resources created by your Kubernetes cluster (EBS volumes, ELB load balancers etc.) check [this AWS Lambda function which can do the tagging](https://github.com/scholzj/aws-kubernetes-tagging-lambda).