Skip to content

Commit 9b1f6e2

Browse files
authored
Merge pull request kubernetes#3034 from elmiko/improve-delete
Improve delete node mechanisms for cluster-api autoscaler provider
2 parents e057aa2 + 1a62952 commit 9b1f6e2

File tree

4 files changed

+34
-8
lines changed

4 files changed

+34
-8
lines changed

cluster-autoscaler/cloudprovider/clusterapi/clusterapi_machinedeployment.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,15 +114,15 @@ func (r machineDeploymentScalableResource) SetSize(nreplicas int32) error {
114114
return updateErr
115115
}
116116

117+
func (r machineDeploymentScalableResource) UnmarkMachineForDeletion(machine *Machine) error {
118+
return unmarkMachineForDeletion(r.controller, machine)
119+
}
120+
117121
func (r machineDeploymentScalableResource) MarkMachineForDeletion(machine *Machine) error {
118122
u, err := r.controller.dynamicclient.Resource(*r.controller.machineResource).Namespace(machine.Namespace).Get(context.TODO(), machine.Name, metav1.GetOptions{})
119-
120123
if err != nil {
121124
return err
122125
}
123-
if u == nil {
124-
return fmt.Errorf("unknown machine %s", machine.Name)
125-
}
126126

127127
u = u.DeepCopy()
128128

cluster-autoscaler/cloudprovider/clusterapi/clusterapi_machineset.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,13 +102,9 @@ func (r machineSetScalableResource) SetSize(nreplicas int32) error {
102102

103103
func (r machineSetScalableResource) MarkMachineForDeletion(machine *Machine) error {
104104
u, err := r.controller.dynamicclient.Resource(*r.controller.machineResource).Namespace(machine.Namespace).Get(context.TODO(), machine.Name, metav1.GetOptions{})
105-
106105
if err != nil {
107106
return err
108107
}
109-
if u == nil {
110-
return fmt.Errorf("unknown machine %s", machine.Name)
111-
}
112108

113109
u = u.DeepCopy()
114110

@@ -123,6 +119,10 @@ func (r machineSetScalableResource) MarkMachineForDeletion(machine *Machine) err
123119
return updateErr
124120
}
125121

122+
func (r machineSetScalableResource) UnmarkMachineForDeletion(machine *Machine) error {
123+
return unmarkMachineForDeletion(r.controller, machine)
124+
}
125+
126126
func newMachineSetScalableResource(controller *machineController, machineSet *MachineSet) (*machineSetScalableResource, error) {
127127
minSize, maxSize, err := parseScalingBounds(machineSet.Annotations)
128128
if err != nil {

cluster-autoscaler/cloudprovider/clusterapi/clusterapi_nodegroup.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ func (ng *nodegroup) DeleteNodes(nodes []*corev1.Node) error {
160160
}
161161

162162
if err := ng.scalableResource.SetSize(replicas - 1); err != nil {
163+
nodeGroup.scalableResource.UnmarkMachineForDeletion(machine)
163164
return err
164165
}
165166

cluster-autoscaler/cloudprovider/clusterapi/clusterapi_scalableresource.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ limitations under the License.
1616

1717
package clusterapi
1818

19+
import (
20+
"context"
21+
22+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
23+
)
24+
1925
// scalableResource is a resource that can be scaled up and down by
2026
// adjusting its replica count field.
2127
type scalableResource interface {
@@ -46,4 +52,23 @@ type scalableResource interface {
4652

4753
// MarkMachineForDeletion marks machine for deletion
4854
MarkMachineForDeletion(machine *Machine) error
55+
56+
// UnmarkMachineForDeletion unmarks machine for deletion
57+
UnmarkMachineForDeletion(machine *Machine) error
58+
}
59+
60+
func unmarkMachineForDeletion(controller *machineController, machine *Machine) error {
61+
u, err := controller.dynamicclient.Resource(*controller.machineResource).Namespace(machine.Namespace).Get(context.TODO(), machine.Name, metav1.GetOptions{})
62+
if err != nil {
63+
return err
64+
}
65+
66+
annotations := u.GetAnnotations()
67+
if _, ok := annotations[machineDeleteAnnotationKey]; ok {
68+
delete(annotations, machineDeleteAnnotationKey)
69+
u.SetAnnotations(annotations)
70+
_, updateErr := controller.dynamicclient.Resource(*controller.machineResource).Namespace(u.GetNamespace()).Update(context.TODO(), u, metav1.UpdateOptions{})
71+
return updateErr
72+
}
73+
return nil
4974
}

0 commit comments

Comments
 (0)