AWS Kubernetes is a Kubernetes cluster deployed using Kubeadm tool. It provides full integration with AWS. It is able to handle ELB load balancers, EBS disks, Route53 domains etc.
kubeconfig
and access the cluster).Although it can be run on its own, the main value is that it can be included into another Terraform configuration.
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 = false
master_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 dir.
Currently, following add-ons are supported:
The add-ons will be installed automatically based on the Terraform variables.
Custom add-ons can be added if needed. For every URL in the addons
list, the initialization scripts will automatically call kubectl -f apply <Addon URL>
to deploy it. The cluster is using RBAC. So the custom add-ons have to be RBAC ready.
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.