Skip to content

Commit

Permalink
chore: bump karpenter to v0.20.0
Browse files Browse the repository at this point in the history
  • Loading branch information
robertd committed Dec 13, 2022
1 parent 3542864 commit a854925
Show file tree
Hide file tree
Showing 7 changed files with 119 additions and 102 deletions.
10 changes: 9 additions & 1 deletion .projen/deps.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions .projenrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const project = new awscdk.AwsCdkConstructLibrary({
},
compat: true,
stability: 'experimental',
cdkVersion: '2.49.0',
cdkVersion: '2.54.0',
workflowNodeVersion: '^18.12.1',
autoApproveOptions: {
allowedUsernames: ['cdk-karpenter-automation'],
Expand All @@ -26,8 +26,8 @@ const project = new awscdk.AwsCdkConstructLibrary({
autoApproveProjenUpgrades: true,
projenTokenSecret: 'PROJEN_GITHUB_TOKEN',
autoApproveUpgrades: true,
deps: ['aws-cdk-lib', '@aws-cdk/lambda-layer-kubectl-v23'],
devDeps: ['aws-cdk-lib', '@aws-cdk/lambda-layer-kubectl-v23'],
deps: ['aws-cdk-lib', '@aws-cdk/lambda-layer-kubectl-v23', '@aws-cdk/lambda-layer-kubectl-v24'],
devDeps: ['aws-cdk-lib', '@aws-cdk/lambda-layer-kubectl-v23', '@aws-cdk/lambda-layer-kubectl-v24'],
// deps: [], /* Runtime dependencies of this module. */
// devDeps: [], /* Build dependencies for this module. */
// packageName: undefined, /* The "name" in package.json. */
Expand Down
14 changes: 8 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,18 @@ More info about Karpenter at: https://karpenter.sh

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

Karpenter version: v0.19.3
Karpenter version: v0.20.0

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
Notes:
- 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
- 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.

## Showcase

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

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

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

// custom provisoner - kitchen sink
karpenter.addProvisioner('custom', {
Expand Down
6 changes: 4 additions & 2 deletions package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

38 changes: 19 additions & 19 deletions src/karpenter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -478,7 +478,7 @@ export class Karpenter extends Construct {
this.karpenterHelmChart = new HelmChart(this, 'KarpenterHelmChart', {
chart: 'karpenter',
createNamespace: true,
version: 'v0.19.3',
version: 'v0.20.0',
cluster: this.cluster,
namespace: 'karpenter',
release: 'karpenter',
Expand Down Expand Up @@ -518,8 +518,8 @@ export class Karpenter extends Construct {
throw new Error('Parameters consolidation and ttlSecondsAfterEmpty are mutually exclusive.');
}

// see: https://karpenter.sh/v0.19.3/aws/launch-templates/
// see: https://karpenter.sh/v0.19.3/aws/provisioning/
// see: https://karpenter.sh/v0.20.0/aws/launch-templates/
// see: https://karpenter.sh/v0.20.0/aws/provisioning/
const awsNodeTemplateId = `${id}-awsNodeTemplate`.toLowerCase();
const awsNodeTemplate = this.cluster.addManifest(awsNodeTemplateId, {
apiVersion: 'karpenter.k8s.aws/v1alpha1',
Expand All @@ -531,42 +531,42 @@ export class Karpenter extends Construct {
subnetSelector: {
[`karpenter.sh/discovery/${this.cluster.clusterName}`]: '*',
},
// see: https://karpenter.sh/v0.19.3/aws/provisioning/#securitygroupselector-required-when-not-using-launchtemplate
// see: https://karpenter.sh/v0.20.0/aws/provisioning/#securitygroupselector-required-when-not-using-launchtemplate
// Note: required when not using launchTemplate
securityGroupSelector: {
[`kubernetes.io/cluster/${this.cluster.clusterName}`]: 'owned',
},
// see: https://karpenter.sh/v0.19.3/aws/provisioning/#instanceprofile
// see: https://karpenter.sh/v0.20.0/aws/provisioning/#instanceprofile
// instanceProfile is created using L1 construct (CfnInstanceProfile), thus we're referencing ref directly
// TODO: revisit this when L2 InstanceProfile construct is released
instanceProfile: this.instanceProfile.ref,
// see: https://karpenter.sh/v0.19.3/aws/provisioning/#tags
// see: https://karpenter.sh/v0.20.0/aws/provisioning/#tags
...(provisionerSpecs?.provider?.tags && { tags: { ...provisionerSpecs!.provider!.tags! } }),
// see: https://karpenter.sh/v0.19.3/aws/provisioning/#amazon-machine-image-ami-family
// see: https://karpenter.sh/v0.20.0/aws/provisioning/#amazon-machine-image-ami-family
...(provisionerSpecs?.provider?.amiFamily && { amiFamily: provisionerSpecs!.provider!.amiFamily! }),
// see: https://karpenter.sh/v0.19.3/aws/provisioning/#block-device-mappings
// see: https://karpenter.sh/v0.20.0/aws/provisioning/#block-device-mappings
...(provisionerSpecs?.provider?.blockDeviceMappings && { blockDeviceMappings: provisionerSpecs!.provider!.blockDeviceMappings! }),
// see https://karpenter.sh/v0.19.3/aws/provisioning/#amiselector
// see https://karpenter.sh/v0.20.0/aws/provisioning/#amiselector
...(provisionerSpecs?.provider?.amiSelector && { amiSelector: { ...provisionerSpecs!.provider!.amiSelector! } }),
// see launchTemplate https://karpenter.sh/v0.19.3/aws/provisioning/#launchtemplate
// see launchTemplate https://karpenter.sh/v0.20.0/aws/provisioning/#launchtemplate
...(provisionerSpecs?.provider?.launchTemplate && { launchTemplate: provisionerSpecs!.provider!.launchTemplate! }),
// TODO: add userData https://karpenter.sh/v0.19.3/aws/provisioning/#userdata
// TODO: add metadataOptions https://karpenter.sh/v0.19.3/aws/provisioning/#metadata-options
// TODO: add userData https://karpenter.sh/v0.20.0/aws/provisioning/#userdata
// TODO: add metadataOptions https://karpenter.sh/v0.20.0/aws/provisioning/#metadata-options
},
});

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

// see: https://karpenter.sh/v0.19.3/provisioner
// see: https://karpenter.sh/v0.20.0/provisioner
const provisioner = this.cluster.addManifest(id, {
apiVersion: 'karpenter.sh/v1alpha5',
kind: 'Provisioner',
metadata: {
name: id.toLowerCase(),
},
spec: {
// see: https://karpenter.sh/0.16.3/provisioner/#speclimitsresources
// see: https://karpenter.sh/0.20.0/provisioner/#speclimitsresources
...(provisionerSpecs?.limits && {
limits: {
resources: {
Expand All @@ -575,17 +575,17 @@ export class Karpenter extends Construct {
},
},
}),
// see: https://karpenter.sh/v0.19.3/provisioner/#example-provisioner-resource
// see: https://karpenter.sh/v0.20.0/provisioner/#example-provisioner-resource
...provisionerSpecs?.consolidation && {
consolidation: {
enabled: provisionerSpecs!.consolidation,
},
},
// see: https://karpenter.sh/v0.19.3/provisioner/#specttlsecondsafterempty
// see: https://karpenter.sh/v0.20.0/provisioner/#specttlsecondsafterempty
...(provisionerSpecs?.ttlSecondsAfterEmpty && { ttlSecondsAfterEmpty: provisionerSpecs!.ttlSecondsAfterEmpty!.toSeconds() }),
// see: https://karpenter.sh/v0.19.3/provisioner/#specttlsecondsuntilexpired
// see: https://karpenter.sh/v0.20.0/provisioner/#specttlsecondsuntilexpired
...(provisionerSpecs?.ttlSecondsUntilExpired && { ttlSecondsUntilExpired: provisionerSpecs!.ttlSecondsUntilExpired!.toSeconds() }),
// see: https://karpenter.sh/v0.19.3/provisioner/#specrequirements
// see: https://karpenter.sh/v0.20.0/provisioner/#specrequirements
requirements: [
...requirements,
],
Expand Down
2 changes: 1 addition & 1 deletion test/__snapshots__/snapshot.test.ts.snap

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit a854925

Please sign in to comment.