diff --git a/pkg/apis/serving/v1beta1/revision_defaults.go b/pkg/apis/serving/v1beta1/revision_defaults.go index 714a5fc61a91..f13e3b676488 100644 --- a/pkg/apis/serving/v1beta1/revision_defaults.go +++ b/pkg/apis/serving/v1beta1/revision_defaults.go @@ -45,51 +45,68 @@ func (rs *RevisionSpec) SetDefaults(ctx context.Context) { } for idx := range rs.PodSpec.Containers { - if rs.PodSpec.Containers[idx].Name == "" { - rs.PodSpec.Containers[idx].Name = cfg.Defaults.UserContainerName(ctx) + ctr := &rs.PodSpec.Containers[idx] + + if ctr.Name == "" { + ctr.Name = cfg.Defaults.UserContainerName(ctx) } - if rs.PodSpec.Containers[idx].Resources.Requests == nil { - rs.PodSpec.Containers[idx].Resources.Requests = corev1.ResourceList{} + if ctr.Resources.Requests == nil { + ctr.Resources.Requests = corev1.ResourceList{} } - if _, ok := rs.PodSpec.Containers[idx].Resources.Requests[corev1.ResourceCPU]; !ok { + if _, ok := ctr.Resources.Requests[corev1.ResourceCPU]; !ok { if rsrc := cfg.Defaults.RevisionCPURequest; rsrc != nil { - rs.PodSpec.Containers[idx].Resources.Requests[corev1.ResourceCPU] = *rsrc + ctr.Resources.Requests[corev1.ResourceCPU] = *rsrc } } - if _, ok := rs.PodSpec.Containers[idx].Resources.Requests[corev1.ResourceMemory]; !ok { + if _, ok := ctr.Resources.Requests[corev1.ResourceMemory]; !ok { if rsrc := cfg.Defaults.RevisionMemoryRequest; rsrc != nil { - rs.PodSpec.Containers[idx].Resources.Requests[corev1.ResourceMemory] = *rsrc + ctr.Resources.Requests[corev1.ResourceMemory] = *rsrc } } - if rs.PodSpec.Containers[idx].Resources.Limits == nil { - rs.PodSpec.Containers[idx].Resources.Limits = corev1.ResourceList{} + if ctr.Resources.Limits == nil { + ctr.Resources.Limits = corev1.ResourceList{} } - if _, ok := rs.PodSpec.Containers[idx].Resources.Limits[corev1.ResourceCPU]; !ok { + if _, ok := ctr.Resources.Limits[corev1.ResourceCPU]; !ok { if rsrc := cfg.Defaults.RevisionCPULimit; rsrc != nil { - rs.PodSpec.Containers[idx].Resources.Limits[corev1.ResourceCPU] = *rsrc + ctr.Resources.Limits[corev1.ResourceCPU] = *rsrc } } - if _, ok := rs.PodSpec.Containers[idx].Resources.Limits[corev1.ResourceMemory]; !ok { + if _, ok := ctr.Resources.Limits[corev1.ResourceMemory]; !ok { if rsrc := cfg.Defaults.RevisionMemoryLimit; rsrc != nil { - rs.PodSpec.Containers[idx].Resources.Limits[corev1.ResourceMemory] = *rsrc + ctr.Resources.Limits[corev1.ResourceMemory] = *rsrc } } - if rs.PodSpec.Containers[idx].ReadinessProbe == nil { - rs.PodSpec.Containers[idx].ReadinessProbe = &corev1.Probe{} + + if ctr.ReadinessProbe == nil { + ctr.ReadinessProbe = &corev1.Probe{} + } + if ctr.ReadinessProbe.TCPSocket == nil && + ctr.ReadinessProbe.HTTPGet == nil && + ctr.ReadinessProbe.Exec == nil { + ctr.ReadinessProbe.TCPSocket = &corev1.TCPSocketAction{} } - if rs.PodSpec.Containers[idx].ReadinessProbe.TCPSocket == nil && - rs.PodSpec.Containers[idx].ReadinessProbe.HTTPGet == nil && - rs.PodSpec.Containers[idx].ReadinessProbe.Exec == nil { - rs.PodSpec.Containers[idx].ReadinessProbe.TCPSocket = &corev1.TCPSocketAction{} + if ctr.ReadinessProbe.SuccessThreshold == 0 { + ctr.ReadinessProbe.SuccessThreshold = 1 } - - if rs.PodSpec.Containers[idx].ReadinessProbe.SuccessThreshold == 0 { - rs.PodSpec.Containers[idx].ReadinessProbe.SuccessThreshold = 1 + // If any of FailureThreshold, TimeoutSeconds or PeriodSeconds are greater than 0, + // standard k8s-style would be used so setting normal k8s default values. + if ctr.ReadinessProbe.FailureThreshold > 0 || + ctr.ReadinessProbe.TimeoutSeconds > 0 || + ctr.ReadinessProbe.PeriodSeconds > 0 { + if ctr.ReadinessProbe.FailureThreshold == 0 { + ctr.ReadinessProbe.FailureThreshold = 3 + } + if ctr.ReadinessProbe.TimeoutSeconds == 0 { + ctr.ReadinessProbe.TimeoutSeconds = 1 + } + if ctr.ReadinessProbe.PeriodSeconds == 0 { + ctr.ReadinessProbe.PeriodSeconds = 10 + } } - vms := rs.PodSpec.Containers[idx].VolumeMounts + vms := ctr.VolumeMounts for i := range vms { vms[i].ReadOnly = true } diff --git a/pkg/apis/serving/v1beta1/revision_defaults_test.go b/pkg/apis/serving/v1beta1/revision_defaults_test.go index d1098d356c59..310eaadbb0c8 100644 --- a/pkg/apis/serving/v1beta1/revision_defaults_test.go +++ b/pkg/apis/serving/v1beta1/revision_defaults_test.go @@ -243,6 +243,40 @@ func TestRevisionDefaulting(t *testing.T) { }, }, }, + }, { + name: "defaulting non aggressive probe", + in: &Revision{ + Spec: RevisionSpec{ + PodSpec: corev1.PodSpec{ + Containers: []corev1.Container{{ + Name: config.DefaultUserContainerName, + ReadinessProbe: &corev1.Probe{ + FailureThreshold: 3, + }, + }}, + }, + }, + }, + want: &Revision{ + Spec: RevisionSpec{ + TimeoutSeconds: ptr.Int64(config.DefaultRevisionTimeoutSeconds), + PodSpec: corev1.PodSpec{ + Containers: []corev1.Container{{ + Name: config.DefaultUserContainerName, + Resources: defaultResources, + ReadinessProbe: &corev1.Probe{ + TimeoutSeconds: 1, + PeriodSeconds: 10, + FailureThreshold: 3, + SuccessThreshold: 1, + Handler: corev1.Handler{ + TCPSocket: &corev1.TCPSocketAction{}, + }, + }, + }}, + }, + }, + }, }} for _, test := range tests {