From d66dc7c39e10865bff718838406f3417a2292c6d Mon Sep 17 00:00:00 2001 From: Jake Date: Fri, 4 Mar 2022 16:49:56 +0000 Subject: [PATCH 1/3] pin karpenter support to 0.6.* --- pkg/apis/eksctl.io/v1alpha5/types.go | 6 +++++ pkg/apis/eksctl.io/v1alpha5/validation.go | 11 ++++++++ .../eksctl.io/v1alpha5/validation_test.go | 25 ++++++++++++++++--- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/pkg/apis/eksctl.io/v1alpha5/types.go b/pkg/apis/eksctl.io/v1alpha5/types.go index 5d58c21842..72f72c0e96 100644 --- a/pkg/apis/eksctl.io/v1alpha5/types.go +++ b/pkg/apis/eksctl.io/v1alpha5/types.go @@ -341,6 +341,12 @@ const ( minimumVPCCNIVersionForIPv6 = "1.10.0" ) +// supported version of Karpenter +const ( + supportedKarpenterVersion = "0.6" + supportedKarpenterVersionMinor = 6 +) + var ( // DefaultIPFamily defines the default IP family to use when creating a new VPC and cluster. DefaultIPFamily = IPV4Family diff --git a/pkg/apis/eksctl.io/v1alpha5/validation.go b/pkg/apis/eksctl.io/v1alpha5/validation.go index f5e852d9f9..42a5380a99 100644 --- a/pkg/apis/eksctl.io/v1alpha5/validation.go +++ b/pkg/apis/eksctl.io/v1alpha5/validation.go @@ -151,6 +151,17 @@ func validateKarpenterConfig(cfg *ClusterConfig) error { if cfg.Karpenter.Version == "" { return errors.New("version field is required if installing Karpenter is enabled") } + + v, err := version.NewVersion(cfg.Karpenter.Version) + if err != nil { + return fmt.Errorf("failed to parse karpenter version %q: %w", cfg.Karpenter.Version, err) + } + + minor := v.Segments()[1] + if minor > supportedKarpenterVersionMinor { + return fmt.Errorf("failed to validate karpenter config: maximum supported version is %s", supportedKarpenterVersion) + } + if IsDisabled(cfg.IAM.WithOIDC) { return errors.New("iam.withOIDC must be enabled with Karpenter") } diff --git a/pkg/apis/eksctl.io/v1alpha5/validation_test.go b/pkg/apis/eksctl.io/v1alpha5/validation_test.go index b4c4297c82..a5cfc9380c 100644 --- a/pkg/apis/eksctl.io/v1alpha5/validation_test.go +++ b/pkg/apis/eksctl.io/v1alpha5/validation_test.go @@ -1690,17 +1690,36 @@ var _ = Describe("ClusterConfig validation", func() { }) Describe("Karpenter", func() { + It("returns an error when OIDC is not set", func() { + cfg := api.NewClusterConfig() + cfg.Karpenter = &api.Karpenter{ + Version: "0.6.1", + } + Expect(api.ValidateClusterConfig(cfg)).To(MatchError(ContainSubstring("failed to validate karpenter config: iam.withOIDC must be enabled with Karpenter"))) + }) + It("returns an error when version is missing", func() { cfg := api.NewClusterConfig() cfg.Karpenter = &api.Karpenter{} Expect(api.ValidateClusterConfig(cfg)).To(MatchError(ContainSubstring("version field is required if installing Karpenter is enabled"))) }) - It("returns an error when OIDC is not set", func() { + + It("returns an error when version is missing", func() { cfg := api.NewClusterConfig() + cfg.IAM.WithOIDC = aws.Bool(true) cfg.Karpenter = &api.Karpenter{ - Version: "0.5.1", + Version: "isitmeeeyourlookingfoorrrr", } - Expect(api.ValidateClusterConfig(cfg)).To(MatchError(ContainSubstring("failed to validate karpenter config: iam.withOIDC must be enabled with Karpenter"))) + Expect(api.ValidateClusterConfig(cfg)).To(MatchError(ContainSubstring("failed to parse karpenter version"))) + }) + + It("returns an error when the version is not supported", func() { + cfg := api.NewClusterConfig() + cfg.IAM.WithOIDC = aws.Bool(true) + cfg.Karpenter = &api.Karpenter{ + Version: "0.7.0", + } + Expect(api.ValidateClusterConfig(cfg)).To(MatchError(ContainSubstring("failed to validate karpenter config: maximum supported version is 0.6"))) }) }) From 21f178180337a63b091c0040ecc5eca37977db0a Mon Sep 17 00:00:00 2001 From: Jake Klein Date: Mon, 7 Mar 2022 09:19:44 +0000 Subject: [PATCH 2/3] Update pkg/apis/eksctl.io/v1alpha5/validation.go Co-authored-by: Gergely Brautigam <182850+Skarlso@users.noreply.github.com> --- pkg/apis/eksctl.io/v1alpha5/validation.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/apis/eksctl.io/v1alpha5/validation.go b/pkg/apis/eksctl.io/v1alpha5/validation.go index 42a5380a99..6f9e72f4d9 100644 --- a/pkg/apis/eksctl.io/v1alpha5/validation.go +++ b/pkg/apis/eksctl.io/v1alpha5/validation.go @@ -157,8 +157,7 @@ func validateKarpenterConfig(cfg *ClusterConfig) error { return fmt.Errorf("failed to parse karpenter version %q: %w", cfg.Karpenter.Version, err) } - minor := v.Segments()[1] - if minor > supportedKarpenterVersionMinor { + if minor := v.Segments()[1]; minor > supportedKarpenterVersionMinor { return fmt.Errorf("failed to validate karpenter config: maximum supported version is %s", supportedKarpenterVersion) } From 88008a854d961a91a81e89b8656b7ab0e6aa2e80 Mon Sep 17 00:00:00 2001 From: Jake Date: Mon, 7 Mar 2022 17:15:48 +0000 Subject: [PATCH 3/3] add docs --- userdocs/src/usage/eksctl-karpenter.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/userdocs/src/usage/eksctl-karpenter.md b/userdocs/src/usage/eksctl-karpenter.md index 379049c6a3..a1d63785aa 100755 --- a/userdocs/src/usage/eksctl-karpenter.md +++ b/userdocs/src/usage/eksctl-karpenter.md @@ -2,7 +2,7 @@ `eksctl` provides adding [Karpenter](https://karpenter.sh/) to a newly created cluster. It will create all the necessary prerequisites outlined in Karpenter's [Getting Started](https://karpenter.sh/docs/getting-started/) section including installing -Karpenter itself using Helm. +Karpenter itself using Helm. We currently support installing version's up to `0.6.*` To that end, a new configuration value has been introduced into `eksctl` cluster config called `karpenter`. The following yaml outlines a typical installation configuration: