etcd-io/etcd

[test] support cluster-api style rolling replacement upgrade

Open

#20804 opened on Oct 15, 2025

View on GitHub
 (8 comments) (0 reactions) (1 assignee)Go (51,701 stars) (10,352 forks)batch import
area/testinghelp wantedstage/trackedtype/feature

Description

What would you like to be added?

Currently our e2e framework supports in-place upgrade. We just replace the binary, and reuse the existing data.

https://github.com/etcd-io/etcd/blob/30452ab110473eda5f60bdb301c046194a154e91/tests/framework/e2e/downgrade.go#L131

However, the cluster-api/Kubeadm upgrades Kubernetes cluster in a rolling replacement approach,

  • add a new learner first;
  • promote it later
  • remove an old node
  • repeat the above steps until all nodes are replaced.

The key difference is the new member(learner) gets started without local data, so it may receive a snapshot from the leader.

We should update our e2e test framework to support both upgrade approaches,

  • rolling in-place upgrade
  • rolling replacement upgrade

Why is this needed?

To improve test coverage.

Contributor guide