in core/src/emr-eks-platform/emr-eks-cluster.ts [572:651]
public addNodegroupCapacity(nodegroupId: string, options: EmrEksNodegroupOptions): Nodegroup {
const nodegroup = this.eksCluster.addNodegroupCapacity(nodegroupId, options);
// Adding the Amazon SSM policy
nodegroup.role.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName('AmazonSSMManagedInstanceCore'));
// Add tags for the Cluster Autoscaler management
Tags.of(nodegroup).add(
`k8s.io/cluster-autoscaler/${this.clusterName}`,
'owned',
{ applyToLaunchedInstances: true },
);
Tags.of(nodegroup).add(
'k8s.io/cluster-autoscaler/enabled',
'true',
{
applyToLaunchedInstances: true,
},
);
// Add tag for the AZ
if (options.subnets && options.subnets.subnets) {
Tags.of(nodegroup).add(
'k8s.io/cluster-autoscaler/node-template/label/topology.kubernetes.io/zone',
options.subnets.subnets[0].availabilityZone,
{
applyToLaunchedInstances: true,
},
);
}
// Add tag for the lifecycle type (spot or on-demand)
Tags.of(nodegroup).add(
'k8s.io/cluster-autoscaler/node-template/label/eks.amazonaws.com/capacityType',
(options.capacityType == CapacityType.SPOT) ? 'SPOT' : 'ON_DEMAND',
{
applyToLaunchedInstances: true,
},
);
// Iterate over labels and add appropriate tags
if (options.labels) {
for (const [key, value] of Object.entries(options.labels)) {
Tags.of(nodegroup).add(
`k8s.io/cluster-autoscaler/node-template/label/${key}`,
value,
{
applyToLaunchedInstances: true,
},
);
new CustomResource(this, `${nodegroupId}Label${key}`, {
serviceToken: this.nodegroupAsgTagsProviderServiceToken,
properties: {
nodegroupName: options.nodegroupName,
tagKey: `k8s.io/cluster-autoscaler/node-template/label/${key}`,
tagValue: value,
},
}).node.addDependency(nodegroup);
}
}
// Iterate over taints and add appropriate tags
if (options.taints) {
options.taints.forEach( (taint) => {
Tags.of(nodegroup).add(
`k8s.io/cluster-autoscaler/node-template/taint/${taint.key}`,
`${taint.value}:${taint.effect}`,
{
applyToLaunchedInstances: true,
},
);
new CustomResource(this, `${nodegroupId}Taint${taint.key}`, {
serviceToken: this.nodegroupAsgTagsProviderServiceToken,
properties: {
nodegroupName: options.nodegroupName,
tagKey: `k8s.io/cluster-autoscaler/node-template/taint/${taint.key}`,
tagValue: `${taint.value}:${taint.effect}`,
},
}).node.addDependency(nodegroup);
});
}
return nodegroup;
}