Skip to content

Commit 949bebe

Browse files
authored
feat: Improve managed node group bootstrap revisited (#1577)
1 parent bc0988c commit 949bebe

File tree

4 files changed

+24
-7
lines changed

4 files changed

+24
-7
lines changed

modules/node_groups/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ The role ARN specified in `var.default_iam_role_arn` will be used by default. In
3737
| instance\_types | Node group's instance type(s). Multiple types can be specified when `capacity_type="SPOT"`. | list | `[var.workers_group_defaults[instance_type]]` |
3838
| k8s\_labels | Kubernetes labels | map(string) | No labels applied |
3939
| key\_name | Key name for workers. Set to empty string to disable remote access | string | `var.workers_group_defaults[key_name]` |
40-
| kubelet_extra_args | This string is passed directly to kubelet if set. Useful for adding labels or taints. Require `create_launch_template` to be `true`| string | "" |
40+
| bootstrap_env | Provide environment variables to customise [bootstrap.sh](https://github.com/awslabs/amazon-eks-ami/blob/master/files/bootstrap.sh). Require `create_launch_template` to be `true` | map(string) | `{}` |
41+
| kubelet_extra_args | Extra arguments for kubelet, this is automatically merged with `labels`. Require `create_launch_template` to be `true` | string | "" |
4142
| launch_template_id | The id of a aws_launch_template to use | string | No LT used |
4243
| launch\_template_version | The version of the LT to use | string | none |
4344
| max\_capacity | Max number of workers | number | `var.workers_group_defaults[asg_max_size]` |

modules/node_groups/launch_template.tf

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@ data "cloudinit_config" "workers_userdata" {
99
content_type = "text/x-shellscript"
1010
content = templatefile("${path.module}/templates/userdata.sh.tpl",
1111
{
12-
kubelet_extra_args = each.value["kubelet_extra_args"]
13-
pre_userdata = each.value["pre_userdata"]
14-
ami_id = lookup(each.value, "ami_id", "")
15-
ami_is_eks_optimized = each.value["ami_is_eks_optimized"]
1612
cluster_name = var.cluster_name
1713
cluster_endpoint = var.cluster_endpoint
1814
cluster_auth_base64 = var.cluster_auth_base64
15+
ami_id = lookup(each.value, "ami_id", "")
16+
ami_is_eks_optimized = each.value["ami_is_eks_optimized"]
17+
bootstrap_env = each.value["bootstrap_env"]
18+
kubelet_extra_args = each.value["kubelet_extra_args"]
19+
pre_userdata = each.value["pre_userdata"]
1920
capacity_type = lookup(each.value, "capacity_type", "ON_DEMAND")
2021
append_labels = length(lookup(each.value, "k8s_labels", {})) > 0 ? ",${join(",", [for k, v in lookup(each.value, "k8s_labels", {}) : "${k}=${v}"])}" : ""
2122
}

modules/node_groups/locals.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ locals {
1313
min_capacity = var.workers_group_defaults["asg_min_size"]
1414
subnets = var.workers_group_defaults["subnets"]
1515
create_launch_template = false
16+
bootstrap_env = {}
1617
kubelet_extra_args = var.workers_group_defaults["kubelet_extra_args"]
1718
disk_size = var.workers_group_defaults["root_volume_size"]
1819
disk_type = var.workers_group_defaults["root_volume_type"]

modules/node_groups/templates/userdata.sh.tpl

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,27 @@
11
#!/bin/bash -e
22
%{ if length(ami_id) == 0 ~}
33

4-
# Set variables directly into bootstrap.sh for default AMI
5-
sed -i '/^KUBELET_EXTRA_ARGS=/a KUBELET_EXTRA_ARGS+=" ${kubelet_extra_args}"' /etc/eks/bootstrap.sh
4+
# Set bootstrap env
5+
printf '#!/bin/bash
6+
%{ for k, v in bootstrap_env ~}
7+
export ${k}="${v}"
8+
%{ endfor ~}
9+
export ADDITIONAL_KUBELET_EXTRA_ARGS="${kubelet_extra_args}"
10+
' > /etc/profile.d/eks-bootstrap-env.sh
11+
12+
# Source extra environment variables in bootstrap script
13+
sed -i '/^set -o errexit/a\\nsource /etc/profile.d/eks-bootstrap-env.sh' /etc/eks/bootstrap.sh
14+
15+
# Merge ADDITIONAL_KUBELET_EXTRA_ARGS into KUBELET_EXTRA_ARGS
16+
sed -i 's/^KUBELET_EXTRA_ARGS="$${KUBELET_EXTRA_ARGS:-}/KUBELET_EXTRA_ARGS="$${KUBELET_EXTRA_ARGS:-} $${ADDITIONAL_KUBELET_EXTRA_ARGS}/' /etc/eks/bootstrap.sh
617
%{else ~}
718

819
# Set variables for custom AMI
920
API_SERVER_URL=${cluster_endpoint}
1021
B64_CLUSTER_CA=${cluster_auth_base64}
22+
%{ for k, v in bootstrap_env ~}
23+
${k}="${v}"
24+
%{ endfor ~}
1125
KUBELET_EXTRA_ARGS='--node-labels=eks.amazonaws.com/nodegroup-image=${ami_id},eks.amazonaws.com/capacityType=${capacity_type}${append_labels} ${kubelet_extra_args}'
1226
%{endif ~}
1327

0 commit comments

Comments
 (0)