Skip to content

Commit

Permalink
feat: add support karpenter resources v1
Browse files Browse the repository at this point in the history
  • Loading branch information
rafatio committed Sep 27, 2024
1 parent 9ac5efa commit 77a1e90
Show file tree
Hide file tree
Showing 25 changed files with 1,910 additions and 359 deletions.
10 changes: 8 additions & 2 deletions apis/infrastructure/v1alpha1/kopsmachinepool_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,13 @@ limitations under the License.
package v1alpha1

import (
karpenter "github.com/aws/karpenter-core/pkg/apis/v1alpha5"
karpenterv1alpha5 "github.com/aws/karpenter-core/pkg/apis/v1alpha5"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
kops "k8s.io/kops/pkg/apis/kops"
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
karpenterv1beta1 "sigs.k8s.io/karpenter/pkg/apis/v1beta1"

karpenterv1 "sigs.k8s.io/karpenter/pkg/apis/v1"
)

const (
Expand Down Expand Up @@ -57,12 +59,16 @@ type KopsMachinePoolSpec struct {

// KarpenterProvisioners is the list of provisioners to be applied.
// +optional
KarpenterProvisioners []karpenter.Provisioner `json:"karpenterProvisioners,omitempty"`
KarpenterProvisioners []karpenterv1alpha5.Provisioner `json:"karpenterProvisioners,omitempty"`

// KarpenterNodePools is the list of node pools to be applied.
// +optional
KarpenterNodePools []karpenterv1beta1.NodePool `json:"karpenterNodePools,omitempty"`

// KarpenterNodePoolsV1 is the list of node pools v1 to be applied.
// +optional
KarpenterNodePoolsV1 []karpenterv1.NodePool `json:"karpenterNodePoolsV1,omitempty"`

// KopsInstanceGroupSpec declare a desired InstanceGroup Kops resource: https://kops.sigs.k8s.io/instance_groups/
KopsInstanceGroupSpec kops.InstanceGroupSpec `json:"kopsInstanceGroupSpec"`

Expand Down
8 changes: 8 additions & 0 deletions apis/infrastructure/v1alpha1/zz_generated.deepcopy.go

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

519 changes: 519 additions & 0 deletions config/crd/bases/infrastructure.cluster.x-k8s.io_kopsmachinepools.yaml

Large diffs are not rendered by default.

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions config/crd/patches/remove-x-kubernetes-validations.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ patch: |-
path: /spec/versions/0/schema/openAPIV3Schema/properties/spec/properties/karpenterNodePools/items/properties/spec/properties/template/properties/spec/properties/requirements/x-kubernetes-validations
- op: remove
path: /spec/versions/0/schema/openAPIV3Schema/properties/spec/properties/karpenterNodePools/items/properties/spec/properties/disruption/properties/budgets/x-kubernetes-validations
- op: remove
path: /spec/versions/0/schema/openAPIV3Schema/properties/spec/properties/karpenterNodePoolsV1/items/properties/spec/properties/template/properties/spec/properties/requirements/x-kubernetes-validations
- op: remove
path: /spec/versions/0/schema/openAPIV3Schema/properties/spec/properties/karpenterNodePoolsV1/items/properties/spec/properties/disruption/properties/budgets/x-kubernetes-validations
target:
kind: CustomResourceDefinition
name: kopsmachinepools.infrastructure.cluster.x-k8s.io
2 changes: 1 addition & 1 deletion config/manager/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@ images:
newTag: latest
- name: manager
newName: tfgco/kubernetes-kops-operator
newTag: v0.14.2-alpha
newTag: v0.14.3-alpha
53 changes: 44 additions & 9 deletions controllers/controlplane/kopscontrolplane_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -177,15 +177,6 @@ func (r *KopsControlPlaneReconciler) PrepareCustomCloudResources(ctx context.Con
}
defer karpenterResourcesContent.Close()

// Workaround to enable auto assign public IPs in public subnets
// This is needed because Karpenter in the current version does not support configuring
// public IPs in the EC2NodeClass yet, this is already available in the newers versions,
// but it's needed now during the migration and upgrade.
err = utils.EnableAutoPublicIPAssignToPublicSubnets(kopsCluster.Spec.Networking.Subnets, kopsCluster.Name, terraformOutputDir)
if err != nil {
return err
}

// This is needed because the apply will fail if the file is empty
placeholder := corev1.ConfigMap{
TypeMeta: metav1.TypeMeta{
Expand Down Expand Up @@ -263,6 +254,47 @@ func (r *KopsControlPlaneReconciler) PrepareCustomCloudResources(ctx context.Con
return err
}
}

for _, nodePool := range kmp.Spec.KarpenterNodePoolsV1 {
nodePool.SetLabels(map[string]string{
"kops.k8s.io/managed-by": "kops-controller",
})

// Create NodePool
if _, err := karpenterResourcesContent.Write([]byte("---\n")); err != nil {
return err
}
nodePoolBytes, err := yaml.Marshal(nodePool)
if err != nil {
return err
}
if _, err := karpenterResourcesContent.Write(nodePoolBytes); err != nil {
return err
}
// Create EC2NodeClass
if _, err := karpenterResourcesContent.Write([]byte("---\n")); err != nil {
return err
}
ec2NodeClass, err := utils.CreateEC2NodeClassV1FromKopsLaunchTemplateInfo(kopsCluster, &kmp, nodePool.Name, terraformOutputDir)
if err != nil {
return err
}

ec2NodeClassBytes, err := yaml.Marshal(ec2NodeClass)
if err != nil {
return err
}

if _, err := karpenterResourcesContent.Write(ec2NodeClassBytes); err != nil {
return err
}

// This line is needed to separate the following resources from the UserData of the EC2NodeClass
// without this line the following resource can be considered as part of the UserData
if _, err := karpenterResourcesContent.Write([]byte("\n")); err != nil {
return err
}
}
}
fileData, err := os.ReadFile(karpenterResourcesContent.Name())
if err != nil {
Expand Down Expand Up @@ -814,6 +846,9 @@ func (r *KopsControlPlaneReconciler) Reconcile(ctx context.Context, req ctrl.Req
if len(kopsMachinePool.Spec.KarpenterNodePools) > 0 {
shouldEnableKarpenter = true
}
if len(kopsMachinePool.Spec.KarpenterNodePoolsV1) > 0 {
shouldEnableKarpenter = true
}
}

if shouldEnableKarpenter {
Expand Down
Loading

0 comments on commit 77a1e90

Please sign in to comment.