mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-01-13 11:25:19 +00:00
api: Add DaemonSet MaxSurge
The MaxSurge field on DaemonSet rolling updates allows a daemonset workload to have two pods running simultaneously on a node during an update in order to perform zero-disruption handoffs of client traffic.
This commit is contained in:
@@ -20,7 +20,7 @@ import (
|
||||
"testing"
|
||||
|
||||
appsv1 "k8s.io/api/apps/v1"
|
||||
"k8s.io/api/core/v1"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/util/intstr"
|
||||
@@ -226,13 +226,14 @@ func TestV1StatefulSetUpdateStrategyConversion(t *testing.T) {
|
||||
|
||||
func TestV1RollingUpdateDaemonSetConversion(t *testing.T) {
|
||||
intorstr := intstr.FromInt(1)
|
||||
maxSurge := intstr.FromInt(0)
|
||||
testcases := map[string]struct {
|
||||
rollingUpdateDs1 *apps.RollingUpdateDaemonSet
|
||||
rollingUpdateDs2 *appsv1.RollingUpdateDaemonSet
|
||||
}{
|
||||
"RollingUpdateDaemonSet Conversion 2": {
|
||||
rollingUpdateDs1: &apps.RollingUpdateDaemonSet{MaxUnavailable: intorstr},
|
||||
rollingUpdateDs2: &appsv1.RollingUpdateDaemonSet{MaxUnavailable: &intorstr},
|
||||
rollingUpdateDs1: &apps.RollingUpdateDaemonSet{MaxUnavailable: intorstr, MaxSurge: maxSurge},
|
||||
rollingUpdateDs2: &appsv1.RollingUpdateDaemonSet{MaxUnavailable: &intorstr, MaxSurge: &maxSurge},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -84,6 +84,11 @@ func SetDefaults_DaemonSet(obj *appsv1.DaemonSet) {
|
||||
maxUnavailable := intstr.FromInt(1)
|
||||
updateStrategy.RollingUpdate.MaxUnavailable = &maxUnavailable
|
||||
}
|
||||
if updateStrategy.RollingUpdate.MaxSurge == nil {
|
||||
// Set default MaxSurge as 0 by default.
|
||||
maxSurge := intstr.FromInt(0)
|
||||
updateStrategy.RollingUpdate.MaxSurge = &maxSurge
|
||||
}
|
||||
}
|
||||
if obj.Spec.RevisionHistoryLimit == nil {
|
||||
obj.Spec.RevisionHistoryLimit = new(int32)
|
||||
|
||||
@@ -21,7 +21,7 @@ import (
|
||||
"testing"
|
||||
|
||||
appsv1 "k8s.io/api/apps/v1"
|
||||
"k8s.io/api/core/v1"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
@@ -38,6 +38,7 @@ import (
|
||||
func TestSetDefaultDaemonSetSpec(t *testing.T) {
|
||||
defaultLabels := map[string]string{"foo": "bar"}
|
||||
maxUnavailable := intstr.FromInt(1)
|
||||
maxSurge := intstr.FromInt(0)
|
||||
period := int64(v1.DefaultTerminationGracePeriodSeconds)
|
||||
defaultTemplate := v1.PodTemplateSpec{
|
||||
Spec: v1.PodSpec{
|
||||
@@ -80,6 +81,7 @@ func TestSetDefaultDaemonSetSpec(t *testing.T) {
|
||||
Type: appsv1.RollingUpdateDaemonSetStrategyType,
|
||||
RollingUpdate: &appsv1.RollingUpdateDaemonSet{
|
||||
MaxUnavailable: &maxUnavailable,
|
||||
MaxSurge: &maxSurge,
|
||||
},
|
||||
},
|
||||
RevisionHistoryLimit: utilpointer.Int32Ptr(10),
|
||||
@@ -110,6 +112,7 @@ func TestSetDefaultDaemonSetSpec(t *testing.T) {
|
||||
Type: appsv1.RollingUpdateDaemonSetStrategyType,
|
||||
RollingUpdate: &appsv1.RollingUpdateDaemonSet{
|
||||
MaxUnavailable: &maxUnavailable,
|
||||
MaxSurge: &maxSurge,
|
||||
},
|
||||
},
|
||||
RevisionHistoryLimit: utilpointer.Int32Ptr(1),
|
||||
@@ -146,6 +149,7 @@ func TestSetDefaultDaemonSetSpec(t *testing.T) {
|
||||
Type: appsv1.RollingUpdateDaemonSetStrategyType,
|
||||
RollingUpdate: &appsv1.RollingUpdateDaemonSet{
|
||||
MaxUnavailable: &maxUnavailable,
|
||||
MaxSurge: &maxSurge,
|
||||
},
|
||||
},
|
||||
RevisionHistoryLimit: utilpointer.Int32Ptr(10),
|
||||
|
||||
Reference in New Issue
Block a user