in internal/deployers/eksapi/node.go [153:210]
func (m *nodeManager) createNodePool(opts *deployerOptions, k8sClient *k8sClient) error {
nodePool := karpv1.NodePool{
ObjectMeta: metav1.ObjectMeta{
Name: m.resourceID,
},
Spec: karpv1.NodePoolSpec{
Weight: pointer.Int32(100), // max
Disruption: karpv1.Disruption{
Budgets: []karpv1.Budget{
{
Nodes: "10%",
},
},
ConsolidationPolicy: karpv1.ConsolidationPolicyWhenEmpty,
ConsolidateAfter: karpv1.MustParseNillableDuration("600s"),
},
Template: karpv1.NodeClaimTemplate{
Spec: karpv1.NodeClaimTemplateSpec{
ExpireAfter: karpv1.MustParseNillableDuration("24h"),
NodeClassRef: &karpv1.NodeClassReference{
Group: "eks.amazonaws.com",
Kind: "NodeClass",
Name: "default",
},
Requirements: []karpv1.NodeSelectorRequirementWithMinValues{
{
NodeSelectorRequirement: corev1.NodeSelectorRequirement{
Key: "kubernetes.io/os",
Operator: corev1.NodeSelectorOpIn,
Values: []string{"linux"},
},
},
{
NodeSelectorRequirement: corev1.NodeSelectorRequirement{
Key: "karpenter.sh/capacity-type",
Operator: corev1.NodeSelectorOpIn,
Values: []string{"on-demand"},
},
},
{
NodeSelectorRequirement: corev1.NodeSelectorRequirement{
Key: "node.kubernetes.io/instance-type",
Operator: corev1.NodeSelectorOpIn,
Values: opts.InstanceTypes,
},
},
},
},
},
},
}
klog.Infof("creating node pool...")
if err := k8sClient.client.Create(context.TODO(), &nodePool); err != nil {
return fmt.Errorf("failed to create node pool: %v", err)
}
klog.Infof("created node pool: %+v", nodePool)
return nil
}