mirror of https://github.com/fluxcd/flagger.git
Merge pull request #1102 from SomtochiAma/topology-spread
Add field `spec.analysis.canaryReadyThreshold` for configuring canary threshold
This commit is contained in:
commit
3bfa7c974d
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
Loading…
Reference in New Issue