mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-09 20:17:41 +00:00
Chore: add rolling update max unavailable type tweak function
This commit is contained in:
parent
1b17b4fa79
commit
f97d3cf748
@ -143,6 +143,15 @@ func tweakRollingUpdatePartition(partition int32) statefulSetTweak {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func tweakMaxUnavailable(mu intstr.IntOrString) statefulSetTweak {
|
||||||
|
return func(ss *apps.StatefulSet) {
|
||||||
|
if ss.Spec.UpdateStrategy.RollingUpdate == nil {
|
||||||
|
ss.Spec.UpdateStrategy.RollingUpdate = &apps.RollingUpdateStatefulSetStrategy{}
|
||||||
|
}
|
||||||
|
ss.Spec.UpdateStrategy.RollingUpdate.MaxUnavailable = intStrAddr(mu)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestValidateStatefulSet(t *testing.T) {
|
func TestValidateStatefulSet(t *testing.T) {
|
||||||
validLabels := map[string]string{"a": "b"}
|
validLabels := map[string]string{"a": "b"}
|
||||||
validPodTemplate := api.PodTemplate{
|
validPodTemplate := api.PodTemplate{
|
||||||
@ -236,22 +245,12 @@ func TestValidateStatefulSet(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "maxUnavailable with parallel pod management",
|
name: "maxUnavailable with parallel pod management",
|
||||||
set: apps.StatefulSet{
|
set: mkStatefulSet(&validPodTemplate,
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault},
|
tweakReplicas(3),
|
||||||
Spec: apps.StatefulSetSpec{
|
tweakUpdateStrategyType(apps.RollingUpdateStatefulSetStrategyType),
|
||||||
PodManagementPolicy: apps.ParallelPodManagement,
|
tweakRollingUpdatePartition(2),
|
||||||
Selector: &metav1.LabelSelector{MatchLabels: validLabels},
|
tweakMaxUnavailable(intstr.FromInt(2)),
|
||||||
Template: validPodTemplate.Template,
|
),
|
||||||
Replicas: 3,
|
|
||||||
UpdateStrategy: apps.StatefulSetUpdateStrategy{
|
|
||||||
Type: apps.RollingUpdateStatefulSetStrategyType,
|
|
||||||
RollingUpdate: &apps.RollingUpdateStatefulSetStrategy{
|
|
||||||
Partition: 2,
|
|
||||||
MaxUnavailable: intStrAddr(intstr.FromInt(2)),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "ordinals.start positive value",
|
name: "ordinals.start positive value",
|
||||||
@ -494,63 +493,33 @@ func TestValidateStatefulSet(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "zero maxUnavailable",
|
name: "zero maxUnavailable",
|
||||||
set: apps.StatefulSet{
|
set: mkStatefulSet(&validPodTemplate,
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault},
|
tweakReplicas(3),
|
||||||
Spec: apps.StatefulSetSpec{
|
tweakUpdateStrategyType(apps.RollingUpdateStatefulSetStrategyType),
|
||||||
PodManagementPolicy: apps.OrderedReadyPodManagement,
|
tweakMaxUnavailable(intstr.FromInt(0)),
|
||||||
Selector: &metav1.LabelSelector{MatchLabels: validLabels},
|
),
|
||||||
Template: validPodTemplate.Template,
|
|
||||||
Replicas: 3,
|
|
||||||
UpdateStrategy: apps.StatefulSetUpdateStrategy{
|
|
||||||
Type: apps.RollingUpdateStatefulSetStrategyType,
|
|
||||||
RollingUpdate: &apps.RollingUpdateStatefulSetStrategy{
|
|
||||||
MaxUnavailable: intStrAddr(intstr.FromInt(0)),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
errs: field.ErrorList{
|
errs: field.ErrorList{
|
||||||
field.Invalid(field.NewPath("spec", "updateStrategy", "rollingUpdate", "maxUnavailable"), nil, ""),
|
field.Invalid(field.NewPath("spec", "updateStrategy", "rollingUpdate", "maxUnavailable"), nil, ""),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "zero percent maxUnavailable",
|
name: "zero percent maxUnavailable",
|
||||||
set: apps.StatefulSet{
|
set: mkStatefulSet(&validPodTemplate,
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault},
|
tweakReplicas(3),
|
||||||
Spec: apps.StatefulSetSpec{
|
tweakUpdateStrategyType(apps.RollingUpdateStatefulSetStrategyType),
|
||||||
PodManagementPolicy: apps.ParallelPodManagement,
|
tweakMaxUnavailable(intstr.FromString("0%")),
|
||||||
Selector: &metav1.LabelSelector{MatchLabels: validLabels},
|
),
|
||||||
Template: validPodTemplate.Template,
|
|
||||||
Replicas: 3,
|
|
||||||
UpdateStrategy: apps.StatefulSetUpdateStrategy{
|
|
||||||
Type: apps.RollingUpdateStatefulSetStrategyType,
|
|
||||||
RollingUpdate: &apps.RollingUpdateStatefulSetStrategy{
|
|
||||||
MaxUnavailable: intStrAddr(intstr.FromString("0%")),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
errs: field.ErrorList{
|
errs: field.ErrorList{
|
||||||
field.Invalid(field.NewPath("spec", "updateStrategy", "rollingUpdate", "maxUnavailable"), nil, ""),
|
field.Invalid(field.NewPath("spec", "updateStrategy", "rollingUpdate", "maxUnavailable"), nil, ""),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "greater than 100 percent maxUnavailable",
|
name: "greater than 100 percent maxUnavailable",
|
||||||
set: apps.StatefulSet{
|
set: mkStatefulSet(&validPodTemplate,
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault},
|
tweakReplicas(3),
|
||||||
Spec: apps.StatefulSetSpec{
|
tweakUpdateStrategyType(apps.RollingUpdateStatefulSetStrategyType),
|
||||||
PodManagementPolicy: apps.ParallelPodManagement,
|
tweakMaxUnavailable(intstr.FromString("101%")),
|
||||||
Selector: &metav1.LabelSelector{MatchLabels: validLabels},
|
),
|
||||||
Template: validPodTemplate.Template,
|
|
||||||
Replicas: 3,
|
|
||||||
UpdateStrategy: apps.StatefulSetUpdateStrategy{
|
|
||||||
Type: apps.RollingUpdateStatefulSetStrategyType,
|
|
||||||
RollingUpdate: &apps.RollingUpdateStatefulSetStrategy{
|
|
||||||
MaxUnavailable: intStrAddr(intstr.FromString("101%")),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
errs: field.ErrorList{
|
errs: field.ErrorList{
|
||||||
field.Invalid(field.NewPath("spec", "updateStrategy", "rollingUpdate", "maxUnavailable"), nil, ""),
|
field.Invalid(field.NewPath("spec", "updateStrategy", "rollingUpdate", "maxUnavailable"), nil, ""),
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user