diff --git a/pkg/apis/serving/k8s_validation.go b/pkg/apis/serving/k8s_validation.go index 5a8cff484cc9..459eacdc819d 100644 --- a/pkg/apis/serving/k8s_validation.go +++ b/pkg/apis/serving/k8s_validation.go @@ -925,6 +925,17 @@ func validateProbe(p *corev1.Probe, port *corev1.ContainerPort, isUserContainer } else if len(handlers) > 1 { errs = errs.Also(apis.ErrMultipleOneOf(handlers...)) } + + // Validate TerminationGracePeriodSeconds if set + if p.TerminationGracePeriodSeconds != nil { + if *p.TerminationGracePeriodSeconds < 0 { + errs = errs.Also(&apis.FieldError{ + Message: "terminationGracePeriodSeconds must be non-negative", + Paths: []string{"terminationGracePeriodSeconds"}, + }) + } + } + return errs } diff --git a/pkg/apis/serving/v1/revision_defaults.go b/pkg/apis/serving/v1/revision_defaults.go index f2014724bf45..1419a6b93986 100644 --- a/pkg/apis/serving/v1/revision_defaults.go +++ b/pkg/apis/serving/v1/revision_defaults.go @@ -138,6 +138,7 @@ func (rs *RevisionSpec) applyDefault(ctx context.Context, container *corev1.Cont } rs.applyReadinessProbeDefaults(container) rs.applyGRPCProbeDefaults(container) + rs.applyLivenessProbeDefaults(container) if rs.PodSpec.EnableServiceLinks == nil && apis.IsInCreate(ctx) { rs.PodSpec.EnableServiceLinks = cfg.Defaults.EnableServiceLinks @@ -203,6 +204,14 @@ func (*RevisionSpec) applyGRPCProbeDefaults(container *corev1.Container) { } } +// applyLivenessProbeDefaults applies default TerminationGracePeriodSeconds to liveness probe +func (*RevisionSpec) applyLivenessProbeDefaults(container *corev1.Container) { + if container.LivenessProbe != nil && container.LivenessProbe.TerminationGracePeriodSeconds == nil { + // Default to 1 second for liveness probe termination grace period + container.LivenessProbe.TerminationGracePeriodSeconds = ptr.Int64(1) + } +} + // Upgrade SecurityContext for this container and the Pod definition to use settings // for the `restricted` profile when the feature flag is enabled. // when the feature flag is enabled or AllowRootBounded: