Skip to content

Commit ff5a414

Browse files
author
jwcesign
authored
Merge pull request #43 from helen-frank/instance_create
feat: instance add create
2 parents 1f8ff2e + 1e39177 commit ff5a414

File tree

9 files changed

+325
-19
lines changed

9 files changed

+325
-19
lines changed

config/components/crds/karpenter.k8s.alicloud_ecsnodeclasses.yaml

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ spec:
8787
additionalProperties:
8888
type: string
8989
description: |-
90-
Tags is a map of key/value tags used to select subsets
90+
Tags is a map of key/value tags used to select vswitches
9191
Specifying '*' for a value selects all values for a given tag key.
9292
maxProperties: 20
9393
type: object
@@ -116,7 +116,7 @@ spec:
116116
kubeletConfiguration:
117117
description: |-
118118
KubeletConfiguration defines args to be used when configuring kubelet on provisioned nodes.
119-
They are a subset of the upstream types, recognizing not all options may be supported.
119+
They are a vswitch of the upstream types, recognizing not all options may be supported.
120120
Wherever possible, the types and names should reflect the upstream kubelet types.
121121
properties:
122122
clusterDNS:
@@ -339,6 +339,25 @@ spec:
339339
- message: size invalid
340340
rule: self >= 20
341341
type: object
342+
tags:
343+
additionalProperties:
344+
type: string
345+
description: Tags to be applied on ecs resources like instances and
346+
launch templates.
347+
type: object
348+
x-kubernetes-validations:
349+
- message: empty tag keys aren't supported
350+
rule: self.all(k, k != '')
351+
- message: tag contains a restricted tag matching ecs:ecs-cluster-name
352+
rule: self.all(k, k !='ecs:ecs-cluster-name')
353+
- message: tag contains a restricted tag matching kubernetes.io/cluster/
354+
rule: self.all(k, !k.startsWith('kubernetes.io/cluster') )
355+
- message: tag contains a restricted tag matching karpenter.sh/nodepool
356+
rule: self.all(k, k != 'karpenter.sh/nodepool')
357+
- message: tag contains a restricted tag matching karpenter.sh/nodeclaim
358+
rule: self.all(k, k !='karpenter.sh/nodeclaim')
359+
- message: tag contains a restricted tag matching karpenter.k8s.alibabacloud/ecsnodeclass
360+
rule: self.all(k, k !='karpenter.k8s.alibabacloud/ecsnodeclass')
342361
userData:
343362
description: |-
344363
UserData to be applied to the provisioned nodes.

pkg/apis/v1alpha1/ecsnodeclass.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ type ECSNodeClassSpec struct {
5959
// +optional
6060
UserData *string `json:"userData,omitempty"`
6161
// KubeletConfiguration defines args to be used when configuring kubelet on provisioned nodes.
62-
// They are a subset of the upstream types, recognizing not all options may be supported.
62+
// They are a vswitch of the upstream types, recognizing not all options may be supported.
6363
// Wherever possible, the types and names should reflect the upstream kubelet types.
6464
// +kubebuilder:validation:XValidation:message="imageGCHighThresholdPercent must be greater than imageGCLowThresholdPercent",rule="has(self.imageGCHighThresholdPercent) && has(self.imageGCLowThresholdPercent) ? self.imageGCHighThresholdPercent > self.imageGCLowThresholdPercent : true"
6565
// +kubebuilder:validation:XValidation:message="evictionSoft OwnerKey does not have a matching evictionSoftGracePeriod",rule="has(self.evictionSoft) ? self.evictionSoft.all(e, (e in self.evictionSoftGracePeriod)):true"
@@ -69,6 +69,15 @@ type ECSNodeClassSpec struct {
6969
// SystemDisk to be applied to provisioned nodes.
7070
// +optional
7171
SystemDisk *SystemDisk `json:"systemDisk,omitempty"`
72+
// Tags to be applied on ecs resources like instances and launch templates.
73+
// +kubebuilder:validation:XValidation:message="empty tag keys aren't supported",rule="self.all(k, k != '')"
74+
// +kubebuilder:validation:XValidation:message="tag contains a restricted tag matching ecs:ecs-cluster-name",rule="self.all(k, k !='ecs:ecs-cluster-name')"
75+
// +kubebuilder:validation:XValidation:message="tag contains a restricted tag matching kubernetes.io/cluster/",rule="self.all(k, !k.startsWith('kubernetes.io/cluster') )"
76+
// +kubebuilder:validation:XValidation:message="tag contains a restricted tag matching karpenter.sh/nodepool",rule="self.all(k, k != 'karpenter.sh/nodepool')"
77+
// +kubebuilder:validation:XValidation:message="tag contains a restricted tag matching karpenter.sh/nodeclaim",rule="self.all(k, k !='karpenter.sh/nodeclaim')"
78+
// +kubebuilder:validation:XValidation:message="tag contains a restricted tag matching karpenter.k8s.alibabacloud/ecsnodeclass",rule="self.all(k, k !='karpenter.k8s.alibabacloud/ecsnodeclass')"
79+
// +optional
80+
Tags map[string]string `json:"tags,omitempty"`
7281
}
7382

7483
// VSwitchSelectorTerm defines selection logic for a vSwitch used by Karpenter to launch nodes.
@@ -116,7 +125,7 @@ type ImageSelectorTerm struct {
116125
// +kubebuilder:validation:MaxLength=30
117126
// +optional
118127
Alias string `json:"alias,omitempty"`
119-
// Tags is a map of key/value tags used to select subsets
128+
// Tags is a map of key/value tags used to select vswitches
120129
// Specifying '*' for a value selects all values for a given tag key.
121130
// +kubebuilder:validation:XValidation:message="empty tag keys aren't supported",rule="self.all(k, k != '')"
122131
// +kubebuilder:validation:MaxProperties:=20
@@ -136,7 +145,7 @@ type ImageSelectorTerm struct {
136145
}
137146

138147
// KubeletConfiguration defines args to be used when configuring kubelet on provisioned nodes.
139-
// They are a subset of the upstream types, recognizing not all options may be supported.
148+
// They are a vswitch of the upstream types, recognizing not all options may be supported.
140149
// Wherever possible, the types and names should reflect the upstream kubelet types.
141150
// https://pkg.go.dev/k8s.io/kubelet/config/v1beta1#KubeletConfiguration
142151
// https://github.com/kubernetes/kubernetes/blob/9f82d81e55cafdedab619ea25cabf5d42736dacf/cmd/kubelet/app/options/options.go#L53

pkg/apis/v1alpha1/labels.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ var (
7373
// https://docs.alicloud.amazon.com/eks/latest/APIReference/API_CreateCluster.html
7474
regexp.MustCompile(`^kubernetes\.io/cluster/[0-9A-Za-z][A-Za-z0-9\-_]*$`),
7575
regexp.MustCompile(fmt.Sprintf("^%s$", regexp.QuoteMeta(karpv1.NodePoolLabelKey))),
76-
regexp.MustCompile(fmt.Sprintf("^%s$", regexp.QuoteMeta(EKSClusterNameTagKey))),
76+
regexp.MustCompile(fmt.Sprintf("^%s$", regexp.QuoteMeta(ECSClusterNameTagKey))),
7777
regexp.MustCompile(fmt.Sprintf("^%s$", regexp.QuoteMeta(LabelNodeClass))),
7878
regexp.MustCompile(fmt.Sprintf("^%s$", regexp.QuoteMeta(TagNodeClaim))),
7979
}
@@ -97,7 +97,7 @@ var (
9797
ResourcePrivateIPv4Address corev1.ResourceName = "vpc.amazonalicloud.com/PrivateIPv4Address"
9898
ResourceEFA corev1.ResourceName = "vpc.amazonalicloud.com/efa"
9999

100-
EKSClusterNameTagKey = "eks:eks-cluster-name"
100+
ECSClusterNameTagKey = "ecs:ecs-cluster-name"
101101

102102
LabelNodeClass = apis.Group + "/ecsnodeclass"
103103

pkg/apis/v1alpha1/zz_generated.deepcopy.go

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/controllers/nodeclaim/tagging/controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ func (c *Controller) tagInstance(ctx context.Context, nc *karpv1.NodeClaim, id s
100100
tags := map[string]string{
101101
v1alpha1.TagName: nc.Status.NodeName,
102102
v1alpha1.TagNodeClaim: nc.Name,
103-
v1alpha1.EKSClusterNameTagKey: options.FromContext(ctx).ClusterName,
103+
v1alpha1.ECSClusterNameTagKey: options.FromContext(ctx).ClusterName,
104104
}
105105

106106
// Remove tags which have been already populated

pkg/operator/operator.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,6 @@ func NewOperator(ctx context.Context, operator *operator.Operator) (context.Cont
7777
os.Exit(1)
7878
}
7979

80-
instanceProvider := instance.NewDefaultProvider(
81-
ctx,
82-
region,
83-
ecsClient,
84-
)
85-
8680
versionProvider := version.NewDefaultProvider(operator.KubernetesInterface, cache.New(alicache.KubernetesVersionTTL, alicache.DefaultCleanupInterval))
8781
vSwitchProvider := vswitch.NewDefaultProvider(vpcClient, cache.New(alicache.DefaultTTL, alicache.DefaultCleanupInterval), cache.New(alicache.AvailableIPAddressTTL, alicache.DefaultCleanupInterval))
8882
securityGroupProvider := securitygroup.NewDefaultProvider(region, ecsClient, cache.New(alicache.DefaultTTL, alicache.DefaultCleanupInterval))
@@ -102,6 +96,14 @@ func NewOperator(ctx context.Context, operator *operator.Operator) (context.Cont
10296
"",
10397
)
10498

99+
instanceProvider := instance.NewDefaultProvider(
100+
ctx,
101+
region,
102+
ecsClient,
103+
vSwitchProvider,
104+
launchTemplateProvider,
105+
)
106+
105107
unavailableOfferingsCache := alicache.NewUnavailableOfferings()
106108
instanceTypeProvider := instancetype.NewDefaultProvider(
107109
*ecsClient.RegionId, ecsClient,

0 commit comments

Comments
 (0)