Skip to content

Commit a854925

Browse files
committed
chore: bump karpenter to v0.20.0
1 parent 3542864 commit a854925

7 files changed

Lines changed: 119 additions & 102 deletions

File tree

.projen/deps.json

Lines changed: 9 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.projenrc.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const project = new awscdk.AwsCdkConstructLibrary({
1616
},
1717
compat: true,
1818
stability: 'experimental',
19-
cdkVersion: '2.49.0',
19+
cdkVersion: '2.54.0',
2020
workflowNodeVersion: '^18.12.1',
2121
autoApproveOptions: {
2222
allowedUsernames: ['cdk-karpenter-automation'],
@@ -26,8 +26,8 @@ const project = new awscdk.AwsCdkConstructLibrary({
2626
autoApproveProjenUpgrades: true,
2727
projenTokenSecret: 'PROJEN_GITHUB_TOKEN',
2828
autoApproveUpgrades: true,
29-
deps: ['aws-cdk-lib', '@aws-cdk/lambda-layer-kubectl-v23'],
30-
devDeps: ['aws-cdk-lib', '@aws-cdk/lambda-layer-kubectl-v23'],
29+
deps: ['aws-cdk-lib', '@aws-cdk/lambda-layer-kubectl-v23', '@aws-cdk/lambda-layer-kubectl-v24'],
30+
devDeps: ['aws-cdk-lib', '@aws-cdk/lambda-layer-kubectl-v23', '@aws-cdk/lambda-layer-kubectl-v24'],
3131
// deps: [], /* Runtime dependencies of this module. */
3232
// devDeps: [], /* Build dependencies for this module. */
3333
// packageName: undefined, /* The "name" in package.json. */

README.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,18 @@ More info about Karpenter at: https://karpenter.sh
88

99
Karpenter Best Practices: https://aws.github.io/aws-eks-best-practices/karpenter/
1010

11-
Karpenter version: v0.19.3
11+
Karpenter version: v0.20.0
1212

13-
Note: As of v0.16.0 changed the default replicas from 1 to 2. See: https://github.com/aws/karpenter/blob/main/website/content/en/v0.16.1/troubleshooting.md
13+
Notes:
14+
- As of v0.16.0 changed the default replicas from 1 to 2. See: https://github.com/aws/karpenter/blob/main/website/content/en/v0.16.1/troubleshooting.md
15+
- Prior to v0.20.0, Karpenter would prioritize certain instance type categories absent of any requirements in the Provisioner. v0.20.0+ removes prioritizing these instance type categories (“m”, “c”, “r”, “a”, “t”, “i”) in code. Bare Metal and GPU instance types are still deprioritized and only used if no other instance types are compatible with the node requirements. This means that, now, you will need to explicitly define the instance types, sizes or categories you want to allow in your Provisioner; otherwise, it is possible that you receive more exotic instance types.
1416

1517
## Showcase
1618

1719
```ts
1820
import { InstanceClass, InstanceSize, InstanceType, EbsDeviceVolumeType, Vpc } from 'aws-cdk-lib/aws-ec2';
1921
import { Cluster, KubernetesVersion, Nodegroup } from 'aws-cdk-lib/aws-eks';
20-
import { KubectlV23Layer } from '@aws-cdk/lambda-layer-kubectl-v23';
22+
import { KubectlV24Layer } from '@aws-cdk/lambda-layer-kubectl-v24';
2123
import { Karpenter, AMIFamily } from "cdk-karpenter";
2224

2325
...
@@ -26,8 +28,8 @@ const vpc = new Vpc(stack, 'Vpc', { natGateways: 1 });
2628

2729
const cluster = new Cluster(stack, 'eks', {
2830
vpc,
29-
version: KubernetesVersion.V1_23,
30-
kubectlLayer: new KubectlV23Layer(stack, 'kubectl'),
31+
version: KubernetesVersion.V1_24,
32+
kubectlLayer: new KubectlV24Layer(stack, 'kubectl'),
3133
defaultCapacity: 1,
3234
defaultCapacityInstance: InstanceType.of(InstanceClass.T3A, InstanceSize.MEDIUM),
3335
});
@@ -40,7 +42,7 @@ const karpenter = new Karpenter(stack, 'karpenter', {
4042
// default provisioner
4143
karpenter.addProvisioner('default');
4244
//Note: Default provisioner has no cpu/mem limits, nor will cleanup provisioned resources. Use with caution.
43-
// see: https://karpenter.sh/v0.19.2/provisioner/#node-deprovisioning
45+
// see: https://karpenter.sh/v0.20.0/provisioner/#node-deprovisioning
4446

4547
// custom provisoner - kitchen sink
4648
karpenter.addProvisioner('custom', {

package.json

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/karpenter.ts

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ export class Karpenter extends Construct {
478478
this.karpenterHelmChart = new HelmChart(this, 'KarpenterHelmChart', {
479479
chart: 'karpenter',
480480
createNamespace: true,
481-
version: 'v0.19.3',
481+
version: 'v0.20.0',
482482
cluster: this.cluster,
483483
namespace: 'karpenter',
484484
release: 'karpenter',
@@ -518,8 +518,8 @@ export class Karpenter extends Construct {
518518
throw new Error('Parameters consolidation and ttlSecondsAfterEmpty are mutually exclusive.');
519519
}
520520

521-
// see: https://karpenter.sh/v0.19.3/aws/launch-templates/
522-
// see: https://karpenter.sh/v0.19.3/aws/provisioning/
521+
// see: https://karpenter.sh/v0.20.0/aws/launch-templates/
522+
// see: https://karpenter.sh/v0.20.0/aws/provisioning/
523523
const awsNodeTemplateId = `${id}-awsNodeTemplate`.toLowerCase();
524524
const awsNodeTemplate = this.cluster.addManifest(awsNodeTemplateId, {
525525
apiVersion: 'karpenter.k8s.aws/v1alpha1',
@@ -531,42 +531,42 @@ export class Karpenter extends Construct {
531531
subnetSelector: {
532532
[`karpenter.sh/discovery/${this.cluster.clusterName}`]: '*',
533533
},
534-
// see: https://karpenter.sh/v0.19.3/aws/provisioning/#securitygroupselector-required-when-not-using-launchtemplate
534+
// see: https://karpenter.sh/v0.20.0/aws/provisioning/#securitygroupselector-required-when-not-using-launchtemplate
535535
// Note: required when not using launchTemplate
536536
securityGroupSelector: {
537537
[`kubernetes.io/cluster/${this.cluster.clusterName}`]: 'owned',
538538
},
539-
// see: https://karpenter.sh/v0.19.3/aws/provisioning/#instanceprofile
539+
// see: https://karpenter.sh/v0.20.0/aws/provisioning/#instanceprofile
540540
// instanceProfile is created using L1 construct (CfnInstanceProfile), thus we're referencing ref directly
541541
// TODO: revisit this when L2 InstanceProfile construct is released
542542
instanceProfile: this.instanceProfile.ref,
543-
// see: https://karpenter.sh/v0.19.3/aws/provisioning/#tags
543+
// see: https://karpenter.sh/v0.20.0/aws/provisioning/#tags
544544
...(provisionerSpecs?.provider?.tags && { tags: { ...provisionerSpecs!.provider!.tags! } }),
545-
// see: https://karpenter.sh/v0.19.3/aws/provisioning/#amazon-machine-image-ami-family
545+
// see: https://karpenter.sh/v0.20.0/aws/provisioning/#amazon-machine-image-ami-family
546546
...(provisionerSpecs?.provider?.amiFamily && { amiFamily: provisionerSpecs!.provider!.amiFamily! }),
547-
// see: https://karpenter.sh/v0.19.3/aws/provisioning/#block-device-mappings
547+
// see: https://karpenter.sh/v0.20.0/aws/provisioning/#block-device-mappings
548548
...(provisionerSpecs?.provider?.blockDeviceMappings && { blockDeviceMappings: provisionerSpecs!.provider!.blockDeviceMappings! }),
549-
// see https://karpenter.sh/v0.19.3/aws/provisioning/#amiselector
549+
// see https://karpenter.sh/v0.20.0/aws/provisioning/#amiselector
550550
...(provisionerSpecs?.provider?.amiSelector && { amiSelector: { ...provisionerSpecs!.provider!.amiSelector! } }),
551-
// see launchTemplate https://karpenter.sh/v0.19.3/aws/provisioning/#launchtemplate
551+
// see launchTemplate https://karpenter.sh/v0.20.0/aws/provisioning/#launchtemplate
552552
...(provisionerSpecs?.provider?.launchTemplate && { launchTemplate: provisionerSpecs!.provider!.launchTemplate! }),
553-
// TODO: add userData https://karpenter.sh/v0.19.3/aws/provisioning/#userdata
554-
// TODO: add metadataOptions https://karpenter.sh/v0.19.3/aws/provisioning/#metadata-options
553+
// TODO: add userData https://karpenter.sh/v0.20.0/aws/provisioning/#userdata
554+
// TODO: add metadataOptions https://karpenter.sh/v0.20.0/aws/provisioning/#metadata-options
555555
},
556556
});
557557

558-
// see: https://karpenter.sh/v0.19.3/provisioner/#specrequirements
558+
// see: https://karpenter.sh/v0.20.0/provisioner/#specrequirements
559559
const requirements = this.setRequirements(provisionerSpecs?.requirements);
560560

561-
// see: https://karpenter.sh/v0.19.3/provisioner
561+
// see: https://karpenter.sh/v0.20.0/provisioner
562562
const provisioner = this.cluster.addManifest(id, {
563563
apiVersion: 'karpenter.sh/v1alpha5',
564564
kind: 'Provisioner',
565565
metadata: {
566566
name: id.toLowerCase(),
567567
},
568568
spec: {
569-
// see: https://karpenter.sh/0.16.3/provisioner/#speclimitsresources
569+
// see: https://karpenter.sh/0.20.0/provisioner/#speclimitsresources
570570
...(provisionerSpecs?.limits && {
571571
limits: {
572572
resources: {
@@ -575,17 +575,17 @@ export class Karpenter extends Construct {
575575
},
576576
},
577577
}),
578-
// see: https://karpenter.sh/v0.19.3/provisioner/#example-provisioner-resource
578+
// see: https://karpenter.sh/v0.20.0/provisioner/#example-provisioner-resource
579579
...provisionerSpecs?.consolidation && {
580580
consolidation: {
581581
enabled: provisionerSpecs!.consolidation,
582582
},
583583
},
584-
// see: https://karpenter.sh/v0.19.3/provisioner/#specttlsecondsafterempty
584+
// see: https://karpenter.sh/v0.20.0/provisioner/#specttlsecondsafterempty
585585
...(provisionerSpecs?.ttlSecondsAfterEmpty && { ttlSecondsAfterEmpty: provisionerSpecs!.ttlSecondsAfterEmpty!.toSeconds() }),
586-
// see: https://karpenter.sh/v0.19.3/provisioner/#specttlsecondsuntilexpired
586+
// see: https://karpenter.sh/v0.20.0/provisioner/#specttlsecondsuntilexpired
587587
...(provisionerSpecs?.ttlSecondsUntilExpired && { ttlSecondsUntilExpired: provisionerSpecs!.ttlSecondsUntilExpired!.toSeconds() }),
588-
// see: https://karpenter.sh/v0.19.3/provisioner/#specrequirements
588+
// see: https://karpenter.sh/v0.20.0/provisioner/#specrequirements
589589
requirements: [
590590
...requirements,
591591
],

test/__snapshots__/snapshot.test.ts.snap

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)