diff --git a/api/v1alpha1/healthcheck_types.go b/api/v1alpha1/healthcheck_types.go index 7fd1cd6a15..0d6d083deb 100644 --- a/api/v1alpha1/healthcheck_types.go +++ b/api/v1alpha1/healthcheck_types.go @@ -81,6 +81,13 @@ type PassiveHealthCheck struct { // +kubebuilder:validation:Maximum=100 // +optional FailurePercentageThreshold *uint32 `json:"failurePercentageThreshold,omitempty"` + + // AlwaysEjectOneHost defines whether at least one host should be ejected, + // regardless of MaxEjectionPercent. + // + // +kubebuilder:default=false + // +optional + AlwaysEjectOneHost *bool `json:"alwaysEjectOneHost,omitempty"` } // ActiveHealthCheck defines the active health check configuration. diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index cb7bda9be2..47170a2ee8 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -5489,6 +5489,11 @@ func (in *PassiveHealthCheck) DeepCopyInto(out *PassiveHealthCheck) { *out = new(uint32) **out = **in } + if in.AlwaysEjectOneHost != nil { + in, out := &in.AlwaysEjectOneHost, &out.AlwaysEjectOneHost + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PassiveHealthCheck. diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml index 123e89c94a..7c737dda6b 100644 --- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml +++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml @@ -577,6 +577,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base duration for diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml index c7847dd52d..839f06d720 100644 --- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml +++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml @@ -635,6 +635,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base duration diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml index 1236d0d613..1ca190ed79 100644 --- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml +++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml @@ -11700,6 +11700,12 @@ spec: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime @@ -12952,6 +12958,12 @@ spec: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime @@ -14363,6 +14375,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines @@ -15689,6 +15707,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_securitypolicies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_securitypolicies.yaml index 6d20dad82e..7351a840a1 100644 --- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_securitypolicies.yaml +++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_securitypolicies.yaml @@ -1253,6 +1253,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base @@ -2393,6 +2399,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base @@ -3743,6 +3755,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the @@ -5153,6 +5171,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml index 0e5b09c8e6..df41a5bc08 100644 --- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml +++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml @@ -576,6 +576,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base duration for diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml index f87b1cacfa..d124e56266 100644 --- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml +++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml @@ -634,6 +634,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base duration diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml index 66b39ecc0c..77513ddaec 100644 --- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml +++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml @@ -11699,6 +11699,12 @@ spec: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime @@ -12951,6 +12957,12 @@ spec: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime @@ -14362,6 +14374,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines @@ -15688,6 +15706,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml index 684d40a80d..5c8713876b 100644 --- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml +++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml @@ -1252,6 +1252,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base @@ -2392,6 +2398,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base @@ -3742,6 +3754,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the @@ -5152,6 +5170,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base diff --git a/internal/gatewayapi/backendtrafficpolicy_test.go b/internal/gatewayapi/backendtrafficpolicy_test.go index c9db878cab..c8eba28038 100644 --- a/internal/gatewayapi/backendtrafficpolicy_test.go +++ b/internal/gatewayapi/backendtrafficpolicy_test.go @@ -260,6 +260,7 @@ func TestBuildPassiveHealthCheck(t *testing.T) { BaseEjectionTime: ptr.To(gwapiv1.Duration("30s")), MaxEjectionPercent: ptr.To[int32](10), FailurePercentageThreshold: ptr.To[uint32](85), + AlwaysEjectOneHost: ptr.To(true), }, }, expected: &ir.OutlierDetection{ @@ -271,6 +272,7 @@ func TestBuildPassiveHealthCheck(t *testing.T) { BaseEjectionTime: ptr.To(metav1.Duration{Duration: 30 * time.Second}), MaxEjectionPercent: ptr.To[int32](10), FailurePercentageThreshold: ptr.To[uint32](85), + AlwaysEjectOneHost: ptr.To(true), }, }, } diff --git a/internal/gatewayapi/clustersettings.go b/internal/gatewayapi/clustersettings.go index 9ce505df26..40519f83c1 100644 --- a/internal/gatewayapi/clustersettings.go +++ b/internal/gatewayapi/clustersettings.go @@ -471,6 +471,7 @@ func buildPassiveHealthCheck(policy egv1a1.HealthCheck) *ir.OutlierDetection { Consecutive5xxErrors: hc.Consecutive5xxErrors, MaxEjectionPercent: hc.MaxEjectionPercent, FailurePercentageThreshold: hc.FailurePercentageThreshold, + AlwaysEjectOneHost: hc.AlwaysEjectOneHost, } if hc.Interval != nil { diff --git a/internal/ir/xds.go b/internal/ir/xds.go index 1816f9f417..f32f2036f7 100644 --- a/internal/ir/xds.go +++ b/internal/ir/xds.go @@ -2820,6 +2820,8 @@ type OutlierDetection struct { MaxEjectionPercent *int32 `json:"maxEjectionPercent,omitempty" yaml:"maxEjectionPercent,omitempty"` // FailurePercentageThreshold sets the failure percentage threshold for outlier detection. FailurePercentageThreshold *uint32 `json:"failurePercentageThreshold,omitempty" yaml:"failurePercentageThreshold,omitempty"` + // AlwaysEjectOneHost defines whether at least one host should be ejected, regardless of MaxEjectionPercent. + AlwaysEjectOneHost *bool `json:"alwaysEjectOneHost,omitempty" yaml:"alwaysEjectOneHost,omitempty"` } // ActiveHealthCheck defines active health check settings diff --git a/internal/ir/zz_generated.deepcopy.go b/internal/ir/zz_generated.deepcopy.go index 4b35cdfe35..dbe6d4a3cd 100644 --- a/internal/ir/zz_generated.deepcopy.go +++ b/internal/ir/zz_generated.deepcopy.go @@ -2835,6 +2835,11 @@ func (in *OutlierDetection) DeepCopyInto(out *OutlierDetection) { *out = new(uint32) **out = **in } + if in.AlwaysEjectOneHost != nil { + in, out := &in.AlwaysEjectOneHost, &out.AlwaysEjectOneHost + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OutlierDetection. diff --git a/internal/xds/translator/cluster.go b/internal/xds/translator/cluster.go index 82b41d83bc..477a9fba5e 100644 --- a/internal/xds/translator/cluster.go +++ b/internal/xds/translator/cluster.go @@ -645,6 +645,10 @@ func buildXdsOutlierDetection(outlierDetection *ir.OutlierDetection) *clusterv3. od.EnforcingFailurePercentage = wrapperspb.UInt32(100) } + if outlierDetection.AlwaysEjectOneHost != nil { + od.AlwaysEjectOneHost = wrapperspb.Bool(*outlierDetection.AlwaysEjectOneHost) + } + return od } diff --git a/internal/xds/translator/cluster_test.go b/internal/xds/translator/cluster_test.go index 6127fded2e..251753039a 100644 --- a/internal/xds/translator/cluster_test.go +++ b/internal/xds/translator/cluster_test.go @@ -132,6 +132,7 @@ func TestBuildXdsOutlierDetection(t *testing.T) { BaseEjectionTime: ptr.To(metav1.Duration{Duration: 30 * time.Second}), MaxEjectionPercent: ptr.To[int32](10), FailurePercentageThreshold: ptr.To[uint32](85), + AlwaysEjectOneHost: ptr.To(true), }, expected: &clusterv3.OutlierDetection{ SplitExternalLocalOriginErrors: true, @@ -144,6 +145,7 @@ func TestBuildXdsOutlierDetection(t *testing.T) { MaxEjectionPercent: wrapperspb.UInt32(10), FailurePercentageThreshold: wrapperspb.UInt32(85), EnforcingFailurePercentage: wrapperspb.UInt32(100), + AlwaysEjectOneHost: wrapperspb.Bool(true), }, }, } diff --git a/internal/xds/translator/testdata/in/xds-ir/passive-failure-percentage.yaml b/internal/xds/translator/testdata/in/xds-ir/passive-failure-percentage.yaml index 8d698a3ec4..d492a3181e 100644 --- a/internal/xds/translator/testdata/in/xds-ir/passive-failure-percentage.yaml +++ b/internal/xds/translator/testdata/in/xds-ir/passive-failure-percentage.yaml @@ -30,3 +30,4 @@ http: consecutiveLocalOriginFailures: 5 splitExternalLocalOriginErrors: false failurePercentageThreshold: 90 + alwaysEjectOneHost: true diff --git a/internal/xds/translator/testdata/out/xds-ir/passive-failure-percentage.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/passive-failure-percentage.clusters.yaml index 9290f1ef5d..188f008334 100644 --- a/internal/xds/translator/testdata/out/xds-ir/passive-failure-percentage.clusters.yaml +++ b/internal/xds/translator/testdata/out/xds-ir/passive-failure-percentage.clusters.yaml @@ -21,6 +21,7 @@ localityWeightedLbConfig: {} name: dest-1 outlierDetection: + alwaysEjectOneHost: true baseEjectionTime: 30s consecutive5xx: 5 consecutiveGatewayFailure: 0 diff --git a/site/content/en/latest/api/extension_types.md b/site/content/en/latest/api/extension_types.md index 650c8ac4d8..48391a7ec0 100644 --- a/site/content/en/latest/api/extension_types.md +++ b/site/content/en/latest/api/extension_types.md @@ -3830,6 +3830,7 @@ _Appears in:_ | `baseEjectionTime` | _[Duration](https://gateway-api.sigs.k8s.io/reference/1.4/spec/#duration)_ | false | 30s | BaseEjectionTime defines the base duration for which a host will be ejected on consecutive failures. | | `maxEjectionPercent` | _integer_ | false | 10 | MaxEjectionPercent sets the maximum percentage of hosts in a cluster that can be ejected. | | `failurePercentageThreshold` | _integer_ | false | | FailurePercentageThreshold sets the failure percentage threshold for outlier detection.
If the failure percentage of a given host is greater than or equal to this value, it will be ejected.
Defaults to 85. | +| `alwaysEjectOneHost` | _boolean_ | false | false | AlwaysEjectOneHost defines whether at least one host should be ejected,
regardless of MaxEjectionPercent. | #### PathEscapedSlashAction diff --git a/test/helm/gateway-crds-helm/all.out.yaml b/test/helm/gateway-crds-helm/all.out.yaml index 6471a60343..49ab0eaa78 100644 --- a/test/helm/gateway-crds-helm/all.out.yaml +++ b/test/helm/gateway-crds-helm/all.out.yaml @@ -21874,6 +21874,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base duration for @@ -26821,6 +26827,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base duration @@ -40565,6 +40577,12 @@ spec: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime @@ -41817,6 +41835,12 @@ spec: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime @@ -43228,6 +43252,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines @@ -44554,6 +44584,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the @@ -47220,6 +47256,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base @@ -48360,6 +48402,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base @@ -49710,6 +49758,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the @@ -51120,6 +51174,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base diff --git a/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml b/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml index 781ff9c646..014afe2da1 100644 --- a/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml +++ b/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml @@ -1054,6 +1054,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base duration for @@ -6001,6 +6007,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base duration @@ -19745,6 +19757,12 @@ spec: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime @@ -20997,6 +21015,12 @@ spec: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime @@ -22408,6 +22432,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines @@ -23734,6 +23764,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the @@ -26400,6 +26436,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base @@ -27540,6 +27582,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base @@ -28890,6 +28938,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the @@ -30300,6 +30354,12 @@ spec: passive: description: Passive passive check configuration properties: + alwaysEjectOneHost: + default: false + description: |- + AlwaysEjectOneHost defines whether at least one host should be ejected, + regardless of MaxEjectionPercent. + type: boolean baseEjectionTime: default: 30s description: BaseEjectionTime defines the base