Skip to content

Commit

Permalink
Add SLO parameter to API availability measurement
Browse files Browse the repository at this point in the history
  • Loading branch information
tosi3k committed Mar 24, 2021
1 parent 81c96c3 commit 60cf1a2
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (

clientset "k8s.io/client-go/kubernetes"
"k8s.io/klog"
"k8s.io/perf-tests/clusterloader2/pkg/errors"
"k8s.io/perf-tests/clusterloader2/pkg/execservice"
"k8s.io/perf-tests/clusterloader2/pkg/measurement"
"k8s.io/perf-tests/clusterloader2/pkg/provider"
Expand Down Expand Up @@ -56,6 +57,7 @@ type apiAvailabilityMeasurement struct {
hostIPs []string
summaries []measurement.Summary
clusterLevelMetrics *apiAvailabilityMetrics
threshold float64
// Metrics per host internal IP.
hostLevelMetrics map[string]*apiAvailabilityMetrics
hostPollTimeoutSeconds int
Expand Down Expand Up @@ -177,6 +179,12 @@ func (a *apiAvailabilityMeasurement) initFields(config *measurement.Config) erro
}
a.pollFrequency = frequency

threshold, err := util.GetFloat64OrDefault(config.Params, "threshold", 0.0)
if err != nil {
return err
}
a.threshold = threshold

a.clusterLevelMetrics = &apiAvailabilityMetrics{}
if config.ClusterLoaderConfig.EnableExecService {
a.hostIPs = config.ClusterFramework.GetClusterConfig().MasterInternalIPs
Expand Down Expand Up @@ -252,7 +260,10 @@ func (a *apiAvailabilityMeasurement) gather() ([]measurement.Summary, error) {
}
summary := measurement.CreateSummary(apiAvailabilityMeasurementName, "json", content)
a.summaries = append(a.summaries, summary)
return a.summaries, nil
if sli := output.ClusterSummary.AvailabilityPercentage; sli < a.threshold {
err = errors.NewMetricViolationError("API availability", fmt.Sprintf("SLO not fulfilled (expected >= %.2f, got: %.2f)", a.threshold, sli))
}
return a.summaries, err
}

func (a *apiAvailabilityMeasurement) Dispose() {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ type apiAvailabilityMetrics struct {

type apiAvailabilitySummary struct {
IP string `json:"IP,omitempty"`
AvailabilityPercentage float32 `json:"availabilityPercentage"`
AvailabilityPercentage float64 `json:"availabilityPercentage"`
LongestUnavailablePeriod string `json:"longestUnavailablePeriod"`
}

Expand All @@ -51,9 +51,9 @@ func (a *apiAvailabilityMetrics) update(availability bool) {
}

func (a *apiAvailabilityMetrics) buildSummary(pollFrequency time.Duration, hostIP string) apiAvailabilitySummary {
availabilityPercentage := float32(100)
availabilityPercentage := float64(100)
if a.numSuccesses > 0 || a.numFailures > 0 {
availabilityPercentage = (float32(a.numSuccesses) / float32(a.numSuccesses+a.numFailures)) * 100
availabilityPercentage = (float64(a.numSuccesses) / float64(a.numSuccesses+a.numFailures)) * 100
}
longestUnavailablePeriod := time.Duration(a.maxConsecutiveFailedProbes) * pollFrequency
return apiAvailabilitySummary{
Expand Down
2 changes: 2 additions & 0 deletions clusterloader2/testing/load/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
{{$ENABLE_VIOLATIONS_FOR_API_CALL_PROMETHEUS := DefaultParam .CL2_ENABLE_VIOLATIONS_FOR_API_CALL_PROMETHEUS false}}
{{$ENABLE_VIOLATIONS_FOR_API_CALL_PROMETHEUS_SIMPLE := DefaultParam .CL2_ENABLE_VIOLATIONS_FOR_API_CALL_PROMETHEUS_SIMPLE true}}
{{$ENABLE_API_AVAILABILITY_MEASUREMENT := DefaultParam .CL2_ENABLE_API_AVAILABILITY_MEASUREMENT false}}
{{$API_AVAILABILITY_PERCENTAGE_THRESHOLD := DefaultParam .CL2_API_AVAILABILITY_PERCENTAGE_THRESHOLD 0.0}}
#Variables
{{$namespaces := DivideInt .Nodes $NODES_PER_NAMESPACE}}
{{$totalPods := MultiplyInt $namespaces $NODES_PER_NAMESPACE $PODS_PER_NODE}}
Expand Down Expand Up @@ -183,6 +184,7 @@ steps:
action: start
pollFrequency: "5s"
hostPollTimeoutSeconds: 5
threshold: {{$API_AVAILABILITY_PERCENTAGE_THRESHOLD}}
{{end}}
- Identifier: TestMetrics
Method: TestMetrics
Expand Down

0 comments on commit 60cf1a2

Please sign in to comment.