Set provider name on karpenter-managed node

This commit is contained in:
Ole Markus With 2021-12-07 20:59:12 +01:00
parent 1ccb7840ac
commit 75d2b97754
5 changed files with 42 additions and 24 deletions

View File

@ -31,6 +31,7 @@ import (
corev1 "k8s.io/api/core/v1"
expirationcache "k8s.io/client-go/tools/cache"
"k8s.io/klog/v2"
"k8s.io/kops/pkg/nodeidentity"
)
@ -41,7 +42,8 @@ const (
// ClusterAutoscalerNodeTemplateLabel is the prefix used on node labels when copying to cloud tags.
ClusterAutoscalerNodeTemplateLabel = "k8s.io/cluster-autoscaler/node-template/label/"
// The expiration time of nodeidentity.Info cache.
cacheTTL = 60 * time.Minute
cacheTTL = 60 * time.Minute
KarpenterNodeLabel = "karpenter.sh/"
)
// nodeIdentifier identifies a node from EC2
@ -145,10 +147,18 @@ func (i *nodeIdentifier) IdentifyNode(ctx context.Context, node *corev1.Node) (*
Labels: labels,
}
isKarpenterManaged := false
for _, tag := range instance.Tags {
if strings.HasPrefix(aws.StringValue(tag.Key), ClusterAutoscalerNodeTemplateLabel) {
key := aws.StringValue(tag.Key)
if strings.HasPrefix(key, ClusterAutoscalerNodeTemplateLabel) {
info.Labels[strings.TrimPrefix(aws.StringValue(tag.Key), ClusterAutoscalerNodeTemplateLabel)] = aws.StringValue(tag.Value)
}
if strings.HasPrefix(key, KarpenterNodeLabel) {
isKarpenterManaged = true
}
}
if isKarpenterManaged {
info.Labels["karpenter.sh/provisioner-name"] = info.Labels[CloudTagInstanceGroupName]
}
// If caching is enabled add the nodeidentity.Info to cache.

View File

@ -92,6 +92,10 @@ func BuildNodeLabels(cluster *kops.Cluster, instanceGroup *kops.InstanceGroup) m
nodeLabels[k] = v
}
if instanceGroup.Spec.InstanceManager == kops.InstanceManagerKarpenter {
nodeLabels["karpenter.sh/provisioner-name"] = instanceGroup.ObjectMeta.Name
}
return nodeLabels
}

View File

@ -160,7 +160,7 @@ CloudProvider: aws
ConfigBase: memfs://clusters.example.com/minimal.example.com
InstanceGroupName: karpenter-nodes
InstanceGroupRole: Node
NodeupConfigHash: ehZK5PooPMXQw0YD3dy5oARwClEXIj8ymh6DR1XYbQ0=
NodeupConfigHash: 82WPA9hO1RdHX0zXhyshQojhW4qQug4izPAWZkgZkN4=
__EOF_KUBE_ENV

View File

@ -50,6 +50,7 @@ KubeletConfig:
logLevel: 2
networkPluginName: cni
nodeLabels:
karpenter.sh/provisioner-name: karpenter-nodes
kubernetes.io/role: node
node-role.kubernetes.io/node: ""
nonMasqueradeCIDR: 100.64.0.0/10

View File

@ -414,35 +414,38 @@ resource "aws_launch_template" "karpenter-nodes-minimal-example-com" {
tag_specifications {
resource_type = "instance"
tags = {
"KubernetesCluster" = "minimal.example.com"
"Name" = "karpenter-nodes.minimal.example.com"
"k8s.io/cluster-autoscaler/node-template/label/kubernetes.io/role" = "node"
"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/node" = ""
"k8s.io/role/node" = "1"
"kops.k8s.io/instancegroup" = "karpenter-nodes"
"kubernetes.io/cluster/minimal.example.com" = "owned"
"KubernetesCluster" = "minimal.example.com"
"Name" = "karpenter-nodes.minimal.example.com"
"k8s.io/cluster-autoscaler/node-template/label/karpenter.sh/provisioner-name" = "karpenter-nodes"
"k8s.io/cluster-autoscaler/node-template/label/kubernetes.io/role" = "node"
"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/node" = ""
"k8s.io/role/node" = "1"
"kops.k8s.io/instancegroup" = "karpenter-nodes"
"kubernetes.io/cluster/minimal.example.com" = "owned"
}
}
tag_specifications {
resource_type = "volume"
tags = {
"KubernetesCluster" = "minimal.example.com"
"Name" = "karpenter-nodes.minimal.example.com"
"k8s.io/cluster-autoscaler/node-template/label/kubernetes.io/role" = "node"
"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/node" = ""
"k8s.io/role/node" = "1"
"kops.k8s.io/instancegroup" = "karpenter-nodes"
"kubernetes.io/cluster/minimal.example.com" = "owned"
"KubernetesCluster" = "minimal.example.com"
"Name" = "karpenter-nodes.minimal.example.com"
"k8s.io/cluster-autoscaler/node-template/label/karpenter.sh/provisioner-name" = "karpenter-nodes"
"k8s.io/cluster-autoscaler/node-template/label/kubernetes.io/role" = "node"
"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/node" = ""
"k8s.io/role/node" = "1"
"kops.k8s.io/instancegroup" = "karpenter-nodes"
"kubernetes.io/cluster/minimal.example.com" = "owned"
}
}
tags = {
"KubernetesCluster" = "minimal.example.com"
"Name" = "karpenter-nodes.minimal.example.com"
"k8s.io/cluster-autoscaler/node-template/label/kubernetes.io/role" = "node"
"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/node" = ""
"k8s.io/role/node" = "1"
"kops.k8s.io/instancegroup" = "karpenter-nodes"
"kubernetes.io/cluster/minimal.example.com" = "owned"
"KubernetesCluster" = "minimal.example.com"
"Name" = "karpenter-nodes.minimal.example.com"
"k8s.io/cluster-autoscaler/node-template/label/karpenter.sh/provisioner-name" = "karpenter-nodes"
"k8s.io/cluster-autoscaler/node-template/label/kubernetes.io/role" = "node"
"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/node" = ""
"k8s.io/role/node" = "1"
"kops.k8s.io/instancegroup" = "karpenter-nodes"
"kubernetes.io/cluster/minimal.example.com" = "owned"
}
user_data = filebase64("${path.module}/data/aws_launch_template_karpenter-nodes.minimal.example.com_user_data")
}