Merge pull request #1102 from SomtochiAma/topology-spread

Add field `spec.analysis.canaryReadyThreshold` for configuring canary threshold
This commit is contained in:
Stefan Prodan 2022-02-10 11:11:37 +02:00 committed by GitHub
commit 3bfa7c974d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 32 additions and 2 deletions

View File

@ -829,6 +829,9 @@ spec:
primaryReadyThreshold:
description: Percentage of pods that need to be available to consider primary as ready
type: number
canaryReadyThreshold:
description: Percentage of pods that need to be available to consider canary as ready
type: number
match:
description: A/B testing match conditions
type: array

View File

@ -829,6 +829,9 @@ spec:
primaryReadyThreshold:
description: Percentage of pods that need to be available to consider primary as ready
type: number
canaryReadyThreshold:
description: Percentage of pods that need to be available to consider canary as ready
type: number
match:
description: A/B testing match conditions
type: array

View File

@ -343,6 +343,10 @@ Spec:
# before starting rollout. this is optional and the default is 100
# percentage (0-100)
primaryReadyThreshold: 100
# threshold of canary pods that need to be available to consider it ready
# before starting rollout. this is optional and the default is 100
# percentage (0-100)
canaryReadyThreshold: 100
# canary match conditions
# used for A/B Testing
match:

View File

@ -829,6 +829,9 @@ spec:
primaryReadyThreshold:
description: Percentage of pods that need to be available to consider primary as ready
type: number
canaryReadyThreshold:
description: Percentage of pods that need to be available to consider canary as ready
type: number
match:
description: A/B testing match conditions
type: array

View File

@ -30,6 +30,7 @@ const (
ProgressDeadlineSeconds = 600
AnalysisInterval = 60 * time.Second
PrimaryReadyThreshold = 100
CanaryReadyThreshold = 100
MetricInterval = "1m"
)
@ -233,6 +234,9 @@ type CanaryAnalysis struct {
// Percentage of pods that need to be available to consider primary as ready
PrimaryReadyThreshold *int `json:"primaryReadyThreshold,omitempty"`
// Percentage of pods that need to be available to consider canary as ready
CanaryReadyThreshold *int `json:"canaryReadyThreshold,omitempty"`
// Alert list for this canary analysis
Alerts []CanaryAlert `json:"alerts,omitempty"`
@ -452,6 +456,14 @@ func (c *Canary) GetAnalysisPrimaryReadyThreshold() int {
return PrimaryReadyThreshold
}
// GetAnalysisCanaryReadyThreshold returns the canary canaryReadyThreshold (default 100)
func (c *Canary) GetAnalysisCanaryReadyThreshold() int {
if c.GetAnalysis().CanaryReadyThreshold != nil {
return *c.GetAnalysis().CanaryReadyThreshold
}
return CanaryReadyThreshold
}
// GetMetricInterval returns the metric interval default value (1m)
func (c *Canary) GetMetricInterval() string {
return MetricInterval

View File

@ -208,6 +208,11 @@ func (in *CanaryAnalysis) DeepCopyInto(out *CanaryAnalysis) {
*out = new(int)
**out = **in
}
if in.CanaryReadyThreshold != nil {
in, out := &in.CanaryReadyThreshold, &out.CanaryReadyThreshold
*out = new(int)
**out = **in
}
if in.Alerts != nil {
in, out := &in.Alerts, &out.Alerts
*out = make([]CanaryAlert, len(*in))

View File

@ -52,7 +52,7 @@ func (c *DaemonSetController) IsCanaryReady(cd *flaggerv1.Canary) (bool, error)
return true, fmt.Errorf("daemonset %s.%s get query error: %w", targetName, cd.Namespace, err)
}
retryable, err := c.isDaemonSetReady(cd, canary, 100)
retryable, err := c.isDaemonSetReady(cd, canary, cd.GetAnalysisCanaryReadyThreshold())
if err != nil {
return retryable, fmt.Errorf("canary damonset %s.%s not ready with retryable %v: %w",
targetName, cd.Namespace, retryable, err)

View File

@ -59,7 +59,7 @@ func (c *DeploymentController) IsCanaryReady(cd *flaggerv1.Canary) (bool, error)
return true, fmt.Errorf("deployment %s.%s get query error: %w", targetName, cd.Namespace, err)
}
retryable, err := c.isDeploymentReady(canary, cd.GetProgressDeadlineSeconds(), 100)
retryable, err := c.isDeploymentReady(canary, cd.GetProgressDeadlineSeconds(), cd.GetAnalysisCanaryReadyThreshold())
if err != nil {
return retryable, fmt.Errorf(
"canary deployment %s.%s not ready: %w",