Skip to content

Commit e71d9eb

Browse files
Karthik-K-Nk8s-infra-cherrypick-robot
authored andcommitted
Add devcluster template reconciler
1 parent 6382720 commit e71d9eb

17 files changed

+263
-61
lines changed

test/e2e/autoscaler.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -260,9 +260,7 @@ func AutoscalerSpec(ctx context.Context, inputGetter func() AutoscalerSpecInput)
260260
By("Scaling the MachineDeployment scale up deployment to zero")
261261
framework.ScaleScaleUpDeploymentAndWait(ctx, framework.ScaleScaleUpDeploymentAndWaitInput{
262262
ClusterProxy: workloadClusterProxy,
263-
// We need to sum up the expected number of MachineDeployment replicas and the current
264-
// number of MachinePool replicas because otherwise the pods get scheduled on the MachinePool nodes.
265-
Replicas: mpOriginalReplicas + 0,
263+
Replicas: 0,
266264
}, input.E2EConfig.GetIntervals(specName, "wait-autoscaler")...)
267265

268266
By("Checking the MachineDeployment finished scaling down to zero")

test/e2e/config/docker.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ variables:
401401
CAPI_INSECURE_DIAGNOSTICS: "true"
402402

403403
intervals:
404-
default/wait-controllers: ["3m", "10s"]
404+
default/wait-controllers: ["4m", "10s"]
405405
default/wait-cluster: ["5m", "10s"]
406406
default/wait-control-plane: ["10m", "10s"]
407407
default/wait-worker-nodes: ["5m", "10s"]

test/e2e/data/autoscaler/autoscaler-to-workload-workload.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,8 @@ spec:
198198
# Note: The E2E test should only go up to 4 (assuming it starts with a min node group size of 2).
199199
# Using 6 for additional some buffer and to allow different starting min node group sizes.
200200
- --max-nodes-total=6
201+
# Set the log verbosity
202+
- --v=4
201203
env:
202204
# Per default autoscaler uses the preferred apiVersion to retrieve MachineDeployments.
203205
# If that apiVersion is v1beta2 the current autoscaler implementation is not able
@@ -208,6 +210,13 @@ spec:
208210
- name: kubeconfig-management-cluster
209211
mountPath: /management-cluster
210212
readOnly: true
213+
# Run the autoscaler on control plane Machines to avoid disruptions when scaling to 0.
214+
nodeSelector:
215+
node-role.kubernetes.io/control-plane: ""
216+
tolerations:
217+
- key: node-role.kubernetes.io/control-plane
218+
effect: NoSchedule
219+
operator: Exists
211220
serviceAccountName: cluster-autoscaler
212221
terminationGracePeriodSeconds: 10
213222
volumes:

test/infrastructure/docker/api/v1alpha3/conversion.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ func (src *DockerMachineTemplate) ConvertTo(dstRaw conversion.Hub) error {
165165

166166
if ok {
167167
RestoreDockerMachineTemplateSpec(&restored.Spec, &dst.Spec)
168+
dst.Status = restored.Status
168169
}
169170

170171
return nil

test/infrastructure/docker/api/v1alpha4/conversion.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ func (src *DockerMachineTemplate) ConvertTo(dstRaw conversion.Hub) error {
196196

197197
if ok {
198198
RestoreDockerMachineTemplateSpec(&restored.Spec, &dst.Spec)
199+
dst.Status = restored.Status
199200
}
200201

201202
return nil

test/infrastructure/docker/api/v1beta1/conversion.go

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,22 @@ func (dst *DockerMachine) ConvertFrom(srcRaw conversion.Hub) error {
120120
func (src *DockerMachineTemplate) ConvertTo(dstRaw conversion.Hub) error {
121121
dst := dstRaw.(*infrav1.DockerMachineTemplate)
122122

123-
return Convert_v1beta1_DockerMachineTemplate_To_v1beta2_DockerMachineTemplate(src, dst, nil)
123+
if err := Convert_v1beta1_DockerMachineTemplate_To_v1beta2_DockerMachineTemplate(src, dst, nil); err != nil {
124+
return err
125+
}
126+
127+
// Manually restore data.
128+
restored := &infrav1.DockerMachineTemplate{}
129+
ok, err := utilconversion.UnmarshalData(src, restored)
130+
if err != nil {
131+
return err
132+
}
133+
134+
if ok {
135+
dst.Status = restored.Status
136+
}
137+
138+
return nil
124139
}
125140

126141
func (dst *DockerMachineTemplate) ConvertFrom(srcRaw conversion.Hub) error {
@@ -134,7 +149,7 @@ func (dst *DockerMachineTemplate) ConvertFrom(srcRaw conversion.Hub) error {
134149
dst.Spec.Template.Spec.ProviderID = nil
135150
}
136151

137-
return nil
152+
return utilconversion.MarshalData(src, dst)
138153
}
139154

140155
func (src *DevCluster) ConvertTo(dstRaw conversion.Hub) error {
@@ -226,7 +241,22 @@ func (dst *DevMachine) ConvertFrom(srcRaw conversion.Hub) error {
226241
func (src *DevMachineTemplate) ConvertTo(dstRaw conversion.Hub) error {
227242
dst := dstRaw.(*infrav1.DevMachineTemplate)
228243

229-
return Convert_v1beta1_DevMachineTemplate_To_v1beta2_DevMachineTemplate(src, dst, nil)
244+
if err := Convert_v1beta1_DevMachineTemplate_To_v1beta2_DevMachineTemplate(src, dst, nil); err != nil {
245+
return err
246+
}
247+
248+
// Manually restore data.
249+
restored := &infrav1.DevMachineTemplate{}
250+
ok, err := utilconversion.UnmarshalData(src, restored)
251+
if err != nil {
252+
return err
253+
}
254+
255+
if ok {
256+
dst.Status = restored.Status
257+
}
258+
259+
return nil
230260
}
231261

232262
func (dst *DevMachineTemplate) ConvertFrom(srcRaw conversion.Hub) error {
@@ -240,7 +270,7 @@ func (dst *DevMachineTemplate) ConvertFrom(srcRaw conversion.Hub) error {
240270
dst.Spec.Template.Spec.ProviderID = nil
241271
}
242272

243-
return nil
273+
return utilconversion.MarshalData(src, dst)
244274
}
245275

246276
func Convert_v1beta1_ObjectMeta_To_v1beta2_ObjectMeta(in *clusterv1beta1.ObjectMeta, out *clusterv1.ObjectMeta, s apiconversion.Scope) error {
@@ -624,3 +654,7 @@ func Convert_v1beta1_DockerClusterBackendSpec_To_v1beta2_DockerClusterBackendSpe
624654
func Convert_v1beta2_DockerMachineTemplate_To_v1beta1_DockerMachineTemplate(in *infrav1.DockerMachineTemplate, out *DockerMachineTemplate, s apiconversion.Scope) error {
625655
return autoConvert_v1beta2_DockerMachineTemplate_To_v1beta1_DockerMachineTemplate(in, out, s)
626656
}
657+
658+
func Convert_v1beta2_DevMachineTemplate_To_v1beta1_DevMachineTemplate(in *infrav1.DevMachineTemplate, out *DevMachineTemplate, s apiconversion.Scope) error {
659+
return autoConvert_v1beta2_DevMachineTemplate_To_v1beta1_DevMachineTemplate(in, out, s)
660+
}

test/infrastructure/docker/api/v1beta1/zz_generated.conversion.go

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

test/infrastructure/docker/api/v1beta2/devmachinetemplate_types.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package v1beta2
1818

1919
import (
20+
corev1 "k8s.io/api/core/v1"
2021
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2122

2223
clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2"
@@ -27,7 +28,17 @@ type DevMachineTemplateSpec struct {
2728
Template DevMachineTemplateResource `json:"template"`
2829
}
2930

31+
// DevMachineTemplateStatus defines the observed state of a DevMachineTemplate.
32+
type DevMachineTemplateStatus struct {
33+
// capacity defines the resource capacity for this DevMachineTemplate.
34+
// This value is used for autoscaling from zero operations as defined in:
35+
// https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20210310-opt-in-autoscaling-from-zero.md
36+
// +optional
37+
Capacity corev1.ResourceList `json:"capacity,omitempty"`
38+
}
39+
3040
// +kubebuilder:object:root=true
41+
// +kubebuilder:subresource:status
3142
// +kubebuilder:resource:path=devmachinetemplates,scope=Namespaced,categories=cluster-api
3243
// +kubebuilder:storageversion
3344
// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp",description="Time duration since creation of the DevMachineTemplate"
@@ -37,7 +48,8 @@ type DevMachineTemplate struct {
3748
metav1.TypeMeta `json:",inline"`
3849
metav1.ObjectMeta `json:"metadata,omitempty"`
3950

40-
Spec DevMachineTemplateSpec `json:"spec,omitempty"`
51+
Spec DevMachineTemplateSpec `json:"spec,omitempty"`
52+
Status DevMachineTemplateStatus `json:"status,omitempty"`
4153
}
4254

4355
// +kubebuilder:object:root=true

test/infrastructure/docker/api/v1beta2/dockermachinetemplate_types.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ type DockerMachineTemplateSpec struct {
3030

3131
// DockerMachineTemplateStatus defines the observed state of a DockerMachineTemplate.
3232
type DockerMachineTemplateStatus struct {
33+
// capacity defines the resource capacity for this DockerMachineTemplate.
34+
// This value is used for autoscaling from zero operations as defined in:
35+
// https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20210310-opt-in-autoscaling-from-zero.md
36+
// +optional
3337
Capacity corev1.ResourceList `json:"capacity,omitempty"`
3438
}
3539

test/infrastructure/docker/api/v1beta2/zz_generated.deepcopy.go

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

0 commit comments

Comments
 (0)