From 4a01fc30c4bf918095254f9e3e19ce8ed2117c1f Mon Sep 17 00:00:00 2001 From: Anthony Hausman Date: Fri, 7 Jul 2023 08:15:50 +0200 Subject: [PATCH] feat(karpenter): Variabilize Image, logFormat and logLevel --- k8s/crds/kops.k8s.io_clusters.yaml | 6 +++ pkg/apis/kops/cluster.go | 5 +- pkg/apis/kops/v1alpha2/cluster.go | 5 +- .../kops/v1alpha2/zz_generated.conversion.go | 6 +++ pkg/apis/kops/v1alpha3/cluster.go | 5 +- .../kops/v1alpha3/zz_generated.conversion.go | 6 +++ pkg/model/components/karpenter.go | 51 +++++++++++++++++++ ...s_s3_object_cluster-completed.spec_content | 3 ++ .../karpenter.sh/k8s-1.19.yaml.template | 6 +-- upup/pkg/fi/cloudup/populate_cluster_spec.go | 1 + 10 files changed, 88 insertions(+), 6 deletions(-) create mode 100644 pkg/model/components/karpenter.go diff --git a/k8s/crds/kops.k8s.io_clusters.yaml b/k8s/crds/kops.k8s.io_clusters.yaml index 966e108986..b79edc1333 100644 --- a/k8s/crds/kops.k8s.io_clusters.yaml +++ b/k8s/crds/kops.k8s.io_clusters.yaml @@ -1508,6 +1508,12 @@ spec: properties: enabled: type: boolean + image: + type: string + logEncoding: + type: string + logLevel: + type: string type: object keyStore: description: KeyStore is the VFS path to where SSL keys and certificates diff --git a/pkg/apis/kops/cluster.go b/pkg/apis/kops/cluster.go index a987033bdf..a81cb98156 100644 --- a/pkg/apis/kops/cluster.go +++ b/pkg/apis/kops/cluster.go @@ -249,7 +249,10 @@ type ScalewaySpec struct { } type KarpenterConfig struct { - Enabled bool `json:"enabled,omitempty"` + Enabled bool `json:"enabled,omitempty"` + LogEncoding string `json:"logFormat,omitempty"` + LogLevel string `json:"logLevel,omitempty"` + Image string `json:"image,omitempty"` } // ServiceAccountIssuerDiscoveryConfig configures an OIDC Issuer. diff --git a/pkg/apis/kops/v1alpha2/cluster.go b/pkg/apis/kops/v1alpha2/cluster.go index c4ae1b51bc..3dce741f6f 100644 --- a/pkg/apis/kops/v1alpha2/cluster.go +++ b/pkg/apis/kops/v1alpha2/cluster.go @@ -255,7 +255,10 @@ type PodIdentityWebhookSpec struct { } type KarpenterConfig struct { - Enabled bool `json:"enabled,omitempty"` + Enabled bool `json:"enabled,omitempty"` + LogEncoding string `json:"logEncoding,omitempty"` + LogLevel string `json:"logLevel,omitempty"` + Image string `json:"image,omitempty"` } // ServiceAccountIssuerDiscoveryConfig configures an OIDC Issuer. diff --git a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go index d79230ef40..e5c8b418fa 100644 --- a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go +++ b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go @@ -4540,6 +4540,9 @@ func Convert_kops_InstanceRequirementsSpec_To_v1alpha2_InstanceRequirementsSpec( func autoConvert_v1alpha2_KarpenterConfig_To_kops_KarpenterConfig(in *KarpenterConfig, out *kops.KarpenterConfig, s conversion.Scope) error { out.Enabled = in.Enabled + out.LogEncoding = in.LogEncoding + out.LogLevel = in.LogLevel + out.Image = in.Image return nil } @@ -4550,6 +4553,9 @@ func Convert_v1alpha2_KarpenterConfig_To_kops_KarpenterConfig(in *KarpenterConfi func autoConvert_kops_KarpenterConfig_To_v1alpha2_KarpenterConfig(in *kops.KarpenterConfig, out *KarpenterConfig, s conversion.Scope) error { out.Enabled = in.Enabled + out.LogEncoding = in.LogEncoding + out.LogLevel = in.LogLevel + out.Image = in.Image return nil } diff --git a/pkg/apis/kops/v1alpha3/cluster.go b/pkg/apis/kops/v1alpha3/cluster.go index 166f0fbd3f..ce7ae45c30 100644 --- a/pkg/apis/kops/v1alpha3/cluster.go +++ b/pkg/apis/kops/v1alpha3/cluster.go @@ -245,7 +245,10 @@ type ScalewaySpec struct { } type KarpenterConfig struct { - Enabled bool `json:"enabled,omitempty"` + Enabled bool `json:"enabled,omitempty"` + LogEncoding string `json:"logEncoding,omitempty"` + LogLevel string `json:"logLevel,omitempty"` + Image string `json:"image,omitempty"` } // ServiceAccountIssuerDiscoveryConfig configures an OIDC Issuer. diff --git a/pkg/apis/kops/v1alpha3/zz_generated.conversion.go b/pkg/apis/kops/v1alpha3/zz_generated.conversion.go index 3c1fefa12c..4f5b03a400 100644 --- a/pkg/apis/kops/v1alpha3/zz_generated.conversion.go +++ b/pkg/apis/kops/v1alpha3/zz_generated.conversion.go @@ -4899,6 +4899,9 @@ func Convert_kops_InstanceRootVolumeSpec_To_v1alpha3_InstanceRootVolumeSpec(in * func autoConvert_v1alpha3_KarpenterConfig_To_kops_KarpenterConfig(in *KarpenterConfig, out *kops.KarpenterConfig, s conversion.Scope) error { out.Enabled = in.Enabled + out.LogEncoding = in.LogEncoding + out.LogLevel = in.LogLevel + out.Image = in.Image return nil } @@ -4909,6 +4912,9 @@ func Convert_v1alpha3_KarpenterConfig_To_kops_KarpenterConfig(in *KarpenterConfi func autoConvert_kops_KarpenterConfig_To_v1alpha3_KarpenterConfig(in *kops.KarpenterConfig, out *KarpenterConfig, s conversion.Scope) error { out.Enabled = in.Enabled + out.LogEncoding = in.LogEncoding + out.LogLevel = in.LogLevel + out.Image = in.Image return nil } diff --git a/pkg/model/components/karpenter.go b/pkg/model/components/karpenter.go new file mode 100644 index 0000000000..16beded545 --- /dev/null +++ b/pkg/model/components/karpenter.go @@ -0,0 +1,51 @@ +/* +Copyright 2020 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package components + +import ( + "k8s.io/kops/pkg/apis/kops" + "k8s.io/kops/upup/pkg/fi/loader" +) + +// KarpenterOptionsBuilder adds options for the cilium to the model +type KarpenterOptionsBuilder struct { + Context *OptionsContext +} + +var _ loader.OptionsBuilder = &KarpenterOptionsBuilder{} + +func (b *KarpenterOptionsBuilder) BuildOptions(o interface{}) error { + clusterSpec := o.(*kops.ClusterSpec) + c := clusterSpec.Karpenter + if c == nil { + return nil + } + + if c.Image == "" { + c.Image = "public.ecr.aws/karpenter/controller:v0.28.1" + } + + if c.LogEncoding == "" { + c.LogEncoding = "console" + } + + if c.LogLevel == "" { + c.LogLevel = "debug" + } + + return nil +} diff --git a/tests/integration/update_cluster/karpenter/data/aws_s3_object_cluster-completed.spec_content b/tests/integration/update_cluster/karpenter/data/aws_s3_object_cluster-completed.spec_content index e5317f2f22..6e99b9a23c 100644 --- a/tests/integration/update_cluster/karpenter/data/aws_s3_object_cluster-completed.spec_content +++ b/tests/integration/update_cluster/karpenter/data/aws_s3_object_cluster-completed.spec_content @@ -61,6 +61,9 @@ spec: useServiceAccountExternalPermissions: true karpenter: enabled: true + image: public.ecr.aws/karpenter/controller:v0.28.1 + logEncoding: console + logLevel: debug keyStore: memfs://clusters.example.com/minimal.example.com/pki kubeAPIServer: allowPrivileged: true diff --git a/upup/models/cloudup/resources/addons/karpenter.sh/k8s-1.19.yaml.template b/upup/models/cloudup/resources/addons/karpenter.sh/k8s-1.19.yaml.template index 66085694d1..262b9ac36f 100644 --- a/upup/models/cloudup/resources/addons/karpenter.sh/k8s-1.19.yaml.template +++ b/upup/models/cloudup/resources/addons/karpenter.sh/k8s-1.19.yaml.template @@ -1119,7 +1119,7 @@ data: # https://github.com/uber-go/zap/blob/aa3e73ec0896f8b066ddf668597a02f89628ee50/config.go zap-logger-config: | { - "level": "debug", + "level": "{{ .Karpenter.LogLevel }}", "development": false, "disableStacktrace": true, "disableCaller": true, @@ -1129,7 +1129,7 @@ data: }, "outputPaths": ["stdout"], "errorOutputPaths": ["stderr"], - "encoding": "console", + "encoding": "{{ .Karpenter.LogEncoding }}", "encoderConfig": { "timeKey": "time", "levelKey": "level", @@ -1482,7 +1482,7 @@ spec: dnsPolicy: ClusterFirst containers: - name: controller - image: public.ecr.aws/karpenter/controller:v0.28.1 + image: {{ .Karpenter.Image }} imagePullPolicy: IfNotPresent env: - name: KUBERNETES_MIN_VERSION diff --git a/upup/pkg/fi/cloudup/populate_cluster_spec.go b/upup/pkg/fi/cloudup/populate_cluster_spec.go index 604960d404..61e5e8e3f0 100644 --- a/upup/pkg/fi/cloudup/populate_cluster_spec.go +++ b/upup/pkg/fi/cloudup/populate_cluster_spec.go @@ -293,6 +293,7 @@ func (c *populateClusterSpec) run(ctx context.Context, clientset simple.Clientse codeModels = append(codeModels, &components.GCPCloudControllerManagerOptionsBuilder{OptionsContext: optionsContext}) codeModels = append(codeModels, &components.GCPPDCSIDriverOptionsBuilder{OptionsContext: optionsContext}) codeModels = append(codeModels, &components.HetznerCloudControllerManagerOptionsBuilder{OptionsContext: optionsContext}) + codeModels = append(codeModels, &components.KarpenterOptionsBuilder{Context: optionsContext}) } }