Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[release/v1.7] Update etcd to v3.5.10 if needed #3004

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
46 changes: 26 additions & 20 deletions pkg/templates/kubeadm/v1beta3/kubeadm.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,29 +49,31 @@ const (
const (
// fixedEtcdVersion is an etcd version that doesn't have known data integrity and durability bugs
// (see etcdVersionCorruptCheckExtraArgs for more details)
fixedEtcdVersion = "3.5.6-0"

// NB: Currently no Kubernetes version uses 3.5.6, but to avoid deleting the code
// we just use some super high version as a fixed version.
// fixedEtcd123 defines a semver constraint used to check if Kubernetes 1.23 uses fixed etcd version
fixedEtcd123 = ">= 1.23.15, < 1.24"
// fixedEtcd124 defines a semver constraint used to check if Kubernetes 1.24 uses fixed etcd version
fixedEtcd124 = ">= 1.24.9, < 1.25"
// fixedEtcd125 defines a semver constraint used to check if Kubernetes 1.25 uses fixed etcd version
fixedEtcd125 = ">= 1.25.5, < 1.26"
// fixedEtcd126 defines a semver constraint used to check if Kubernetes 1.26+ uses fixed etcd version
fixedEtcd126 = ">= 1.26.0"
fixedEtcdVersion = "3.5.10-0"
)

const (
registryK8sio = "registry.k8s.io"
)

var (
fixedEtcd123Constraint = semverutil.MustParseConstraint(fixedEtcd123)
fixedEtcd124Constraint = semverutil.MustParseConstraint(fixedEtcd124)
fixedEtcd125Constraint = semverutil.MustParseConstraint(fixedEtcd125)
fixedEtcd126Constraint = semverutil.MustParseConstraint(fixedEtcd126)
// defines a semver constraint used to check if Kubernetes 1.24 uses fixed etcd version
fixedEtcd124Constraint = semverutil.MustParseConstraint(">= 1.24, < 1.25")

// defines a semver constraint used to check if Kubernetes 1.25 uses fixed etcd version
fixedEtcd125Constraint = semverutil.MustParseConstraint(">= 1.25, < 1.26")

// defines a semver constraint used to check if Kubernetes 1.26 uses fixed etcd version
fixedEtcd126Constraint = semverutil.MustParseConstraint(">= 1.26.13, < 1.27")

// defines a semver constraint used to check if Kubernetes 1.27 uses fixed etcd version
fixedEtcd127Constraint = semverutil.MustParseConstraint(">= 1.27.9, < 1.28")

// defines a semver constraint used to check if Kubernetes 1.28 uses fixed etcd version
fixedEtcd128Constraint = semverutil.MustParseConstraint(">= 1.28.6, < 1.29")

// defines a semver constraint used to check if Kubernetes 1.29 uses fixed etcd version
fixedEtcd129Constraint = semverutil.MustParseConstraint(">= 1.29")
)

// NewConfig returns all required configs to init a cluster via a set of v1beta3 configs
Expand Down Expand Up @@ -548,13 +550,17 @@ func etcdVersionCorruptCheckExtraArgs(kubeVersion *semver.Version, etcdImageTag
switch {
case etcdImageTag != "":
return etcdImageTag, etcdExtraArgs
case fixedEtcd123Constraint.Check(kubeVersion):
fallthrough
case fixedEtcd124Constraint.Check(kubeVersion):
fallthrough
return fixedEtcdVersion, etcdExtraArgs
case fixedEtcd125Constraint.Check(kubeVersion):
fallthrough
return fixedEtcdVersion, etcdExtraArgs
case fixedEtcd126Constraint.Check(kubeVersion):
fallthrough
case fixedEtcd127Constraint.Check(kubeVersion):
fallthrough
case fixedEtcd128Constraint.Check(kubeVersion):
fallthrough
case fixedEtcd129Constraint.Check(kubeVersion):
return "", etcdExtraArgs
default:
return fixedEtcdVersion, etcdExtraArgs
Expand Down
66 changes: 48 additions & 18 deletions pkg/templates/kubeadm/v1beta3/kubeadm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,57 +38,87 @@ func TestEtcdVersionCorruptCheckExtraArgs(t *testing.T) {
expectedEtcdArgs map[string]string
}{
{
name: "unfixed 1.23",
kubeVersion: semver.MustParse("1.23.13"),
name: "any 1.24",
kubeVersion: semver.MustParse("1.24"),
expectedEtcdImageTag: fixedEtcdVersion,
expectedEtcdArgs: etcdExtraArgs,
},
{
name: "unfixed 1.24",
kubeVersion: semver.MustParse("1.24.7"),
name: "any 1.24 high",
kubeVersion: semver.MustParse("1.24.999"),
expectedEtcdImageTag: fixedEtcdVersion,
expectedEtcdArgs: etcdExtraArgs,
},
{
name: "unfixed 1.25",
kubeVersion: semver.MustParse("1.25.3"),
name: "any 1.25",
kubeVersion: semver.MustParse("1.25"),
expectedEtcdImageTag: fixedEtcdVersion,
expectedEtcdArgs: etcdExtraArgs,
},
{
name: "fixed 1.23",
kubeVersion: semver.MustParse("1.23.99"),
name: "any 1.25 high",
kubeVersion: semver.MustParse("1.25.999"),
expectedEtcdImageTag: fixedEtcdVersion,
expectedEtcdArgs: etcdExtraArgs,
},
{
name: "fixed 1.26",
kubeVersion: semver.MustParse("1.26.13"),
expectedEtcdImageTag: "",
expectedEtcdArgs: etcdExtraArgs,
},
{
name: "unfixed 1.26",
kubeVersion: semver.MustParse("1.26.12"),
expectedEtcdImageTag: fixedEtcdVersion,
expectedEtcdArgs: etcdExtraArgs,
},
{
name: "fixed 1.27",
kubeVersion: semver.MustParse("1.27.9"),
expectedEtcdImageTag: "",
expectedEtcdArgs: etcdExtraArgs,
},
{
name: "fixed 1.24",
kubeVersion: semver.MustParse("1.24.99"),
name: "unfixed 1.27",
kubeVersion: semver.MustParse("1.27.8"),
expectedEtcdImageTag: fixedEtcdVersion,
expectedEtcdArgs: etcdExtraArgs,
},
{
name: "fixed 1.28",
kubeVersion: semver.MustParse("1.28.6"),
expectedEtcdImageTag: "",
expectedEtcdArgs: etcdExtraArgs,
},
{
name: "fixed 1.25",
kubeVersion: semver.MustParse("1.25.99"),
name: "unfixed 1.28",
kubeVersion: semver.MustParse("1.28.5"),
expectedEtcdImageTag: fixedEtcdVersion,
expectedEtcdArgs: etcdExtraArgs,
},
{
name: "any 1.29",
kubeVersion: semver.MustParse("1.29"),
expectedEtcdImageTag: "",
expectedEtcdArgs: etcdExtraArgs,
},
{
name: "fixed 1.26",
kubeVersion: semver.MustParse("1.26.99"),
name: "any 1.29 high",
kubeVersion: semver.MustParse("1.29.999"),
expectedEtcdImageTag: "",
expectedEtcdArgs: etcdExtraArgs,
},
{
name: "unfixed 1.25, but tag is overwritten",
kubeVersion: semver.MustParse("1.25.3"),
name: "unfixed, but tag is overwritten",
kubeVersion: semver.MustParse("1.26.12"),
etcdImageTag: "9.9.9-0",
expectedEtcdImageTag: "9.9.9-0",
expectedEtcdArgs: etcdExtraArgs,
},
{
name: "fixed 1.25, but tag is overwritten",
kubeVersion: semver.MustParse("1.25.4"),
name: "fixed, but tag is overwritten",
kubeVersion: semver.MustParse("1.26.13"),
etcdImageTag: "9.9.9-0",
expectedEtcdImageTag: "9.9.9-0",
expectedEtcdArgs: etcdExtraArgs,
Expand Down