87 lines
2.5 KiB
HCL
87 lines
2.5 KiB
HCL
# Workers AutoScaling Group
|
|
resource "aws_autoscaling_group" "workers" {
|
|
name = "${var.name}-worker ${aws_launch_configuration.worker.name}"
|
|
|
|
# count
|
|
desired_capacity = "${var.count}"
|
|
min_size = "${var.count}"
|
|
max_size = "${var.count + 2}"
|
|
default_cooldown = 30
|
|
health_check_grace_period = 30
|
|
|
|
# network
|
|
vpc_zone_identifier = ["${var.subnet_ids}"]
|
|
|
|
# template
|
|
launch_configuration = "${aws_launch_configuration.worker.name}"
|
|
|
|
# target groups to which instances should be added
|
|
target_group_arns = [
|
|
"${aws_lb_target_group.workers-http.id}",
|
|
"${aws_lb_target_group.workers-https.id}",
|
|
"${var.target_groups}",
|
|
]
|
|
|
|
lifecycle {
|
|
# override the default destroy and replace update behavior
|
|
create_before_destroy = true
|
|
}
|
|
|
|
# Waiting for instance creation delays adding the ASG to state. If instances
|
|
# can't be created (e.g. spot price too low), the ASG will be orphaned.
|
|
# Orphaned ASGs escape cleanup, can't be updated, and keep bidding if spot is
|
|
# used. Disable wait to avoid issues and align with other clouds.
|
|
wait_for_capacity_timeout = "0"
|
|
|
|
tags = [{
|
|
key = "Name"
|
|
value = "${var.name}-worker"
|
|
propagate_at_launch = true
|
|
}]
|
|
}
|
|
|
|
# Worker template
|
|
resource "aws_launch_configuration" "worker" {
|
|
image_id = "${local.ami_id}"
|
|
instance_type = "${var.instance_type}"
|
|
spot_price = "${var.spot_price}"
|
|
enable_monitoring = false
|
|
|
|
user_data = "${data.ct_config.worker-ignition.rendered}"
|
|
|
|
# storage
|
|
root_block_device {
|
|
volume_type = "${var.disk_type}"
|
|
volume_size = "${var.disk_size}"
|
|
iops = "${var.disk_iops}"
|
|
}
|
|
|
|
# network
|
|
security_groups = ["${var.security_groups}"]
|
|
|
|
lifecycle {
|
|
// Override the default destroy and replace update behavior
|
|
create_before_destroy = true
|
|
ignore_changes = ["image_id"]
|
|
}
|
|
}
|
|
|
|
# Worker Ignition config
|
|
data "ct_config" "worker-ignition" {
|
|
content = "${data.template_file.worker-config.rendered}"
|
|
pretty_print = false
|
|
snippets = ["${var.clc_snippets}"]
|
|
}
|
|
|
|
# Worker Container Linux config
|
|
data "template_file" "worker-config" {
|
|
template = "${file("${path.module}/cl/worker.yaml.tmpl")}"
|
|
|
|
vars = {
|
|
kubeconfig = "${indent(10, var.kubeconfig)}"
|
|
ssh_authorized_key = "${var.ssh_authorized_key}"
|
|
cluster_dns_service_ip = "${cidrhost(var.service_cidr, 10)}"
|
|
cluster_domain_suffix = "${var.cluster_domain_suffix}"
|
|
}
|
|
}
|