Skip to content

Commit 199c361

Browse files
committed
fix: use interruptionQueue Helm value for Karpenter >= v0.33.0
The Karpenter chart renamed its interruption queue Helm value when it flattened `settings`. Charts before v0.33.0 read `settings.aws.interruptionQueueName`; the flattened layout reads `settings.interruptionQueue`. eksctl built a single `settings` map and re-nested it under `aws` for older charts, so both version branches shared the `interruptionQueueName` spelling. On charts >= v0.33.0 Helm silently ignores that unknown key, so `INTERRUPTION_QUEUE` is never set on the Karpenter pod and spot interruption handling is disabled with no error surfaced to the user. Instances are terminated without Karpenter draining them first. Select the queue key per version branch instead of sharing one map: the `< 0.33.0` path keeps `settings.aws.interruptionQueueName` unchanged, and the `>= 0.33.0` path now sends `settings.interruptionQueue`. No API, flag or documentation change; `withSpotInterruptionQueue` is untouched. The existing `>= 0.33.0` unit expectation encoded the wrong key, so it is corrected to the key the chart actually reads. The two `settings.aws.interruptionQueueName` specs are left as-is and act as the regression guard for the legacy contract. Signed-off-by: warren <warren.chen830@gmail.com>
1 parent 99984ad commit 199c361

2 files changed

Lines changed: 31 additions & 15 deletions

File tree

pkg/karpenter/karpenter.go

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const (
3030
serviceAccountName = "name"
3131
settings = "settings"
3232
interruptionQueueName = "interruptionQueueName"
33+
interruptionQueue = "interruptionQueue"
3334
)
3435

3536
// Options contains values which Karpenter uses to configure the installation.
@@ -72,29 +73,39 @@ func (k *Installer) Install(ctx context.Context, serviceAccountRoleARN string, i
7273
serviceAccountName: DefaultServiceAccountName,
7374
}
7475

76+
settingsValues := map[string]interface{}{
77+
defaultInstanceProfile: instanceProfileName,
78+
clusterName: k.ClusterConfig.Metadata.Name,
79+
clusterEndpoint: k.ClusterConfig.Status.Endpoint,
80+
}
81+
82+
// The Karpenter chart renamed the interruption queue Helm value when it
83+
// flattened `settings`: charts before v0.33.0 read
84+
// `settings.aws.interruptionQueueName`, while the flattened layout reads
85+
// `settings.interruptionQueue`. A flattened chart silently ignores the old
86+
// spelling, which leaves INTERRUPTION_QUEUE unset on the Karpenter pod and
87+
// disables spot interruption handling without reporting an error.
88+
version := k.ClusterConfig.Karpenter.Version
89+
compareVersions, err := utils.CompareVersions(version, "0.33.0")
90+
if err == nil && compareVersions < 0 {
91+
settingsValues[interruptionQueueName] = k.ClusterConfig.Metadata.Name
92+
settingsValues = map[string]interface{}{
93+
aws: settingsValues,
94+
}
95+
} else {
96+
settingsValues[interruptionQueue] = k.ClusterConfig.Metadata.Name
97+
}
98+
7599
values := map[string]interface{}{
76100
clusterName: k.ClusterConfig.Metadata.Name,
77101
clusterEndpoint: k.ClusterConfig.Status.Endpoint,
78102
aws: map[string]interface{}{
79103
defaultInstanceProfile: instanceProfileName,
80104
},
81-
settings: map[string]interface{}{
82-
defaultInstanceProfile: instanceProfileName,
83-
clusterName: k.ClusterConfig.Metadata.Name,
84-
clusterEndpoint: k.ClusterConfig.Status.Endpoint,
85-
interruptionQueueName: k.ClusterConfig.Metadata.Name,
86-
},
105+
settings: settingsValues,
87106
serviceAccount: serviceAccountMap,
88107
}
89108

90-
version := k.ClusterConfig.Karpenter.Version
91-
compareVersions, err := utils.CompareVersions(version, "0.33.0")
92-
if err == nil && compareVersions < 0 {
93-
values[settings] = map[string]interface{}{
94-
aws: values[settings],
95-
}
96-
}
97-
98109
registryClient, err := registry.NewClient(
99110
registry.ClientOptEnableCache(true),
100111
)

pkg/karpenter/karpenter_test.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,12 @@ var _ = Describe("Install", func() {
9090
defaultInstanceProfile: "dummy",
9191
clusterName: cfg.Metadata.Name,
9292
clusterEndpoint: cfg.Status.Endpoint,
93-
interruptionQueueName: cfg.Metadata.Name,
93+
// The flattened Karpenter chart names this value
94+
// "interruptionQueue", not "interruptionQueueName" --
95+
// see charts/karpenter/values.yaml from v0.32.0 onwards.
96+
// Asserted as a literal rather than via a constant so the
97+
// test pins the key the chart actually reads.
98+
"interruptionQueue": cfg.Metadata.Name,
9499
},
95100
}
96101
Expect(opts.Values[settings]).To(Equal(values[settings]))

0 commit comments

Comments
 (0)