Skip to content

Commit

Permalink
Merge branch 'main' of github.com:JosephABC/keda
Browse files Browse the repository at this point in the history
  • Loading branch information
josephangbc committed Dec 2, 2022
2 parents bf67560 + 34db399 commit 5a1218d
Show file tree
Hide file tree
Showing 28 changed files with 837 additions and 306 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/pr-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
steps:
- uses: actions/checkout@v3

- uses: tspascoal/get-user-teams-membership@v1
- uses: tspascoal/get-user-teams-membership@v2
id: checkUserMember
with:
username: ${{ github.actor }}
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ To learn more about active deprecations, we recommend checking [GitHub Discussio
- **General:** Provide patch for CVE-2022-3172 vulnerability ([#3690](https://github.com/kedacore/keda/issues/3690))
- **General:** Respect optional parameter inside envs for ScaledJobs ([#3568](https://github.com/kedacore/keda/issues/3568))
- **Azure Blob Scaler** Store forgotten logger ([#3811](https://github.com/kedacore/keda/issues/3811))
- **New Relic Scaler** Store forgotten logger ([#3945](https://github.com/kedacore/keda/issues/3945))
- **Prometheus Scaler:** Treat Inf the same as Null result ([#3644](https://github.com/kedacore/keda/issues/3644))
- **NATS Jetstream:** Correctly count messages that should be redelivered (waiting for ack) towards keda value ([#3787](https://github.com/kedacore/keda/issues/3787))

Expand Down
10 changes: 5 additions & 5 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ require (
cloud.google.com/go/storage v1.28.0
github.com/Azure/azure-amqp-common-go/v3 v3.2.3
github.com/Azure/azure-event-hubs-go/v3 v3.3.20
github.com/Azure/azure-kusto-go v0.9.1
github.com/Azure/azure-kusto-go v0.9.2
github.com/Azure/azure-sdk-for-go v67.1.0+incompatible
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.2.0
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0
Expand All @@ -21,7 +21,7 @@ require (
github.com/DataDog/datadog-api-client-go v1.16.0
github.com/Huawei/gophercloud v1.0.21
github.com/Shopify/sarama v1.37.2
github.com/aws/aws-sdk-go v1.44.146
github.com/aws/aws-sdk-go v1.44.150
github.com/denisenkom/go-mssqldb v0.12.3
github.com/dysnix/predictkube-libs v0.0.4-0.20220717101015-44c816c4fb9c
github.com/dysnix/predictkube-proto v0.0.0-20220713123213-7135dce1e9c9
Expand All @@ -31,8 +31,9 @@ require (
github.com/go-redis/redis/v8 v8.11.5
github.com/go-sql-driver/mysql v1.6.0
github.com/gobwas/glob v0.2.3
github.com/gocql/gocql v1.2.1
github.com/gocql/gocql v1.3.0
github.com/golang/mock v1.6.0
github.com/golang/protobuf v1.5.2
github.com/google/go-cmp v0.5.9
github.com/gophercloud/gophercloud v1.1.0
github.com/hashicorp/vault/api v1.8.2
Expand Down Expand Up @@ -75,7 +76,7 @@ require (
k8s.io/metrics v0.25.4
knative.dev/pkg v0.0.0-20221123154742-05b694ec4d3a
sigs.k8s.io/controller-runtime v0.13.1
sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20221128144407-9489eb5b6c77
sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20221201045826-d9912251cd81
sigs.k8s.io/controller-tools v0.10.0
sigs.k8s.io/custom-metrics-apiserver v1.25.1
sigs.k8s.io/kustomize/kustomize/v4 v4.5.7
Expand Down Expand Up @@ -157,7 +158,6 @@ require (
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
github.com/golang-sql/sqlexp v0.1.0 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/gnostic v0.6.9 // indirect
github.com/google/go-querystring v1.1.0 // indirect
Expand Down
16 changes: 8 additions & 8 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ github.com/Azure/azure-amqp-common-go/v3 v3.2.3 h1:uDF62mbd9bypXWi19V1bN5NZEO84J
github.com/Azure/azure-amqp-common-go/v3 v3.2.3/go.mod h1:7rPmbSfszeovxGfc5fSAXE4ehlXQZHpMja2OtxC2Tas=
github.com/Azure/azure-event-hubs-go/v3 v3.3.20 h1:LRAy00JlV5aDqd0LFXwfwFReYzl03CtH/kD91OHrT94=
github.com/Azure/azure-event-hubs-go/v3 v3.3.20/go.mod h1:5GkwDWncbqGCPjf76khiylOAD2NjkrUrLFb/S99BiA8=
github.com/Azure/azure-kusto-go v0.9.1 h1:DRYvfdynXbmicz6aV3buvO0opYyTaoLPuBN/OcD2TQM=
github.com/Azure/azure-kusto-go v0.9.1/go.mod h1:i7WCtgt4XeHge3+Oi5sq84HYhneNi7VY7hr35wsUdrg=
github.com/Azure/azure-kusto-go v0.9.2 h1:AP0bNhGyvc51XHi6nBMABDjCqgJb/KGrCrcm7KvYFyk=
github.com/Azure/azure-kusto-go v0.9.2/go.mod h1:i7WCtgt4XeHge3+Oi5sq84HYhneNi7VY7hr35wsUdrg=
github.com/Azure/azure-pipeline-go v0.1.8/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg=
github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U=
github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k=
Expand Down Expand Up @@ -160,8 +160,8 @@ github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgI
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA=
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
github.com/aws/aws-sdk-go v1.44.146 h1:7YdGgPxDPRJu/yYffzZp/H7yHzQ6AqmuNFZPYraaN8I=
github.com/aws/aws-sdk-go v1.44.146/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
github.com/aws/aws-sdk-go v1.44.150 h1:X9HBhXu0ZPi+tOHUaZkjx43int7g0Ejk+IVbW25+wYg=
github.com/aws/aws-sdk-go v1.44.150/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
Expand Down Expand Up @@ -350,8 +350,8 @@ github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22
github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/gocql/gocql v1.2.1 h1:G/STxUzD6pGvRHzG0Fi7S04SXejMKBbRZb7pwre1edU=
github.com/gocql/gocql v1.2.1/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8=
github.com/gocql/gocql v1.3.0 h1:xAopLb2b1xCkWVrfWA5k8sOOr0wUwI4ewl9+ArNu0ag=
github.com/gocql/gocql v1.3.0/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0=
Expand Down Expand Up @@ -1372,8 +1372,8 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.33 h1:LYqFq+6Cj2D0g
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.33/go.mod h1:soWkSNf2tZC7aMibXEqVhCd73GOY5fJikn8qbdzemB0=
sigs.k8s.io/controller-runtime v0.13.1 h1:tUsRCSJVM1QQOOeViGeX3GMT3dQF1eePPw6sEE3xSlg=
sigs.k8s.io/controller-runtime v0.13.1/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI=
sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20221128144407-9489eb5b6c77 h1:FxASXFYBbBgGhOJutMpHaF+7Mb3odcDkoaz/Jb9Opes=
sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20221128144407-9489eb5b6c77/go.mod h1:oiCXd8V7ZaS/wwvXKZ9pYkoU0BYM86CyEa0RvivM0nw=
sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20221201045826-d9912251cd81 h1:pL+hPQJQnRweJxIa5wT0EVbUwBN/g0Z28WgNLorN6vE=
sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20221201045826-d9912251cd81/go.mod h1:oiCXd8V7ZaS/wwvXKZ9pYkoU0BYM86CyEa0RvivM0nw=
sigs.k8s.io/controller-tools v0.10.0 h1:0L5DTDTFB67jm9DkfrONgTGmfc/zYow0ZaHyppizU2U=
sigs.k8s.io/controller-tools v0.10.0/go.mod h1:uvr0EW6IsprfB0jpQq6evtKy+hHyHCXNfdWI5ONPx94=
sigs.k8s.io/custom-metrics-apiserver v1.25.1 h1:lKIvoLZR8bnFYPX7sdsUBeylGlZqeMQlJMeAI7GpHDE=
Expand Down
3 changes: 2 additions & 1 deletion pkg/scalers/newrelic_scaler.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,8 @@ func NewNewRelicScaler(config *ScalerConfig) (Scaler, error) {
return &newrelicScaler{
metricType: metricType,
metadata: meta,
nrClient: nrClient}, nil
nrClient: nrClient,
logger: logger}, nil
}

func parseNewRelicMetadata(config *ScalerConfig, logger logr.Logger) (*newrelicMetadata, error) {
Expand Down
260 changes: 260 additions & 0 deletions tests/chaos/chaos_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,260 @@
//go:build e2e
// +build e2e

package chaos_test

import (
"bufio"
"fmt"
"os"
"sync"
"testing"
"time"

"github.com/stretchr/testify/assert"
"k8s.io/client-go/kubernetes"

. "github.com/kedacore/keda/v2/tests/helper"
)

const (
testName = "chaos-test"
)

var (
testNamespace = fmt.Sprintf("%s-ns", testName)
monitoredDeploymentName = "monitored-deployment"
sutDeploymentName = "sut-deployment-%d"
scaledObjectName = "so-%d"
kedaNamespace = "keda"
operatorLabelSelector = "app=keda-operator"
msLabelSelector = "app=keda-metrics-apiserver"
operatorLogName = fmt.Sprintf("%s-operator", testName)
msLogName = fmt.Sprintf("%s-ms", testName)
scaledObjectCount = 5
minReplicaCount = 0
maxReplicaCount = 4
)

type templateData struct {
TestNamespace string
MonitoredDeploymentName string
SutDeploymentName string
ScaledObjectName string
MinReplicaCount int
MaxReplicaCount int
}

const (
monitoredDeploymentTemplate = `apiVersion: apps/v1
kind: Deployment
metadata:
name: {{.MonitoredDeploymentName}}
namespace: {{.TestNamespace}}
labels:
deploy: workload-test
spec:
replicas: 0
selector:
matchLabels:
pod: workload-test
template:
metadata:
labels:
pod: workload-test
spec:
containers:
- name: nginx
image: 'nginx'`

sutDeploymentTemplate = `apiVersion: apps/v1
kind: Deployment
metadata:
name: {{.SutDeploymentName}}
namespace: {{.TestNamespace}}
labels:
deploy: workload-sut
spec:
replicas: 0
selector:
matchLabels:
pod: workload-sut
template:
metadata:
labels:
pod: workload-sut
spec:
containers:
- name: nginx
image: 'nginx'`

scaledObjectTemplate = `apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: {{.ScaledObjectName}}
namespace: {{.TestNamespace}}
spec:
scaleTargetRef:
name: {{.SutDeploymentName}}
pollingInterval: 5
cooldownPeriod: 5
minReplicaCount: {{ .MinReplicaCount }}
maxReplicaCount: {{ .MaxReplicaCount }}
advanced:
horizontalPodAutoscalerConfig:
behavior:
scaleDown:
stabilizationWindowSeconds: 5
triggers:
- type: kubernetes-workload
metadata:
podSelector: 'pod=workload-test'
value: '1'`
)

func TestScaler(t *testing.T) {
// setup
t.Log("--- setting up ---")
// Create kubernetes resources
kc := GetKubernetesClient(t)
data, _ := getTemplateData()
CreateNamespace(t, kc, testNamespace)
monitoredDeployment := []Template{{Name: "monitoredDeploymentTemplate", Config: monitoredDeploymentTemplate}}
KubectlApplyMultipleWithTemplate(t, data, monitoredDeployment)
for i := 0; i < scaledObjectCount; i++ {
data.ScaledObjectName = fmt.Sprintf(scaledObjectName, i)
data.SutDeploymentName = fmt.Sprintf(sutDeploymentName, i)
sutDeployment := []Template{{Name: "sutDeploymentTemplate", Config: sutDeploymentTemplate}}
scaledObject := []Template{{Name: "scaledObjectTemplate", Config: scaledObjectTemplate}}
KubectlApplyMultipleWithTemplate(t, data, sutDeployment)
KubectlApplyMultipleWithTemplate(t, data, scaledObject)
}

// test scaling
testScaleOut(t, kc)
testScaleIn(t, kc)

// cleanup
KubectlDeleteMultipleWithTemplate(t, data, monitoredDeployment)
for i := 0; i < scaledObjectCount; i++ {
data.ScaledObjectName = fmt.Sprintf(scaledObjectName, i)
data.SutDeploymentName = fmt.Sprintf(sutDeploymentName, i)
sutDeployment := []Template{{Name: "sutDeploymentTemplate", Config: sutDeploymentTemplate}}
scaledObject := []Template{{Name: "scaledObjectTemplate", Config: scaledObjectTemplate}}
KubectlDeleteMultipleWithTemplate(t, data, sutDeployment)
KubectlDeleteMultipleWithTemplate(t, data, scaledObject)
}
DeleteNamespace(t, kc, testNamespace)
}

func testScaleOut(t *testing.T, kc *kubernetes.Clientset) {
// scale monitored deployment to maxReplicaCount - 2 replicas
replicas := maxReplicaCount - 2
KubernetesScaleDeployment(t, kc, monitoredDeploymentName, int64(replicas), testNamespace)
saveLogs(t, kc, operatorLogName, operatorLabelSelector, kedaNamespace)
DeletePodsInNamespaceBySelector(t, kc, operatorLabelSelector, kedaNamespace)
var wg sync.WaitGroup
wg.Add(scaledObjectCount)
for i := 0; i < scaledObjectCount; i++ {
go func(index int) {
assert.True(t, WaitForDeploymentReplicaReadyCount(t, kc, fmt.Sprintf(sutDeploymentName, index), testNamespace, replicas, 60, 2),
fmt.Sprintf("replica count should be %d after 2 minute", replicas))
wg.Done()
}(i)
}
wg.Wait()

// scale monitored deployment to maxReplicaCount - 1 replicas
replicas = maxReplicaCount - 1
KubernetesScaleDeployment(t, kc, monitoredDeploymentName, int64(replicas), testNamespace)
saveLogs(t, kc, operatorLogName, operatorLabelSelector, kedaNamespace)
DeletePodsInNamespaceBySelector(t, kc, operatorLabelSelector, kedaNamespace)
wg.Add(scaledObjectCount)
for i := 0; i < scaledObjectCount; i++ {
go func(index int) {
assert.True(t, WaitForDeploymentReplicaReadyCount(t, kc, fmt.Sprintf(sutDeploymentName, index), testNamespace, replicas, 60, 2),
fmt.Sprintf("replica count should be %d after 2 minute", replicas))
wg.Done()
}(i)
}
wg.Wait()

// scale monitored deployment to maxReplicaCount replicas
replicas = maxReplicaCount
KubernetesScaleDeployment(t, kc, monitoredDeploymentName, int64(replicas), testNamespace)
saveLogs(t, kc, msLogName, msLabelSelector, kedaNamespace)
DeletePodsInNamespaceBySelector(t, kc, msLabelSelector, kedaNamespace)
wg.Add(scaledObjectCount)
for i := 0; i < scaledObjectCount; i++ {
go func(index int) {
assert.True(t, WaitForDeploymentReplicaReadyCount(t, kc, fmt.Sprintf(sutDeploymentName, index), testNamespace, replicas, 60, 2),
fmt.Sprintf("replica count should be %d after 2 minute", replicas))
wg.Done()
}(i)
}
wg.Wait()
}

func testScaleIn(t *testing.T, kc *kubernetes.Clientset) {
// scale monitored deployment to minReplicaCount + 1 replicas
replicas := minReplicaCount + 1
KubernetesScaleDeployment(t, kc, monitoredDeploymentName, int64(replicas), testNamespace)
saveLogs(t, kc, operatorLogName, operatorLabelSelector, kedaNamespace)
DeletePodsInNamespaceBySelector(t, kc, operatorLabelSelector, kedaNamespace)
saveLogs(t, kc, msLogName, msLabelSelector, kedaNamespace)
DeletePodsInNamespaceBySelector(t, kc, msLabelSelector, kedaNamespace)
var wg sync.WaitGroup
wg.Add(scaledObjectCount)
for i := 0; i < scaledObjectCount; i++ {
go func(index int) {
assert.True(t, WaitForDeploymentReplicaReadyCount(t, kc, fmt.Sprintf(sutDeploymentName, index), testNamespace, replicas, 60, 2),
fmt.Sprintf("replica count should be %d after 2 minute", replicas))
wg.Done()
}(i)
}
wg.Wait()

// scale monitored deployment to minReplicaCount replicas
replicas = minReplicaCount
KubernetesScaleDeployment(t, kc, monitoredDeploymentName, int64(replicas), testNamespace)
saveLogs(t, kc, operatorLogName, operatorLabelSelector, kedaNamespace)
DeletePodsInNamespaceBySelector(t, kc, operatorLabelSelector, kedaNamespace)
wg.Add(scaledObjectCount)
for i := 0; i < scaledObjectCount; i++ {
go func(index int) {
assert.True(t, WaitForDeploymentReplicaReadyCount(t, kc, fmt.Sprintf(sutDeploymentName, index), testNamespace, replicas, 60, 2),
fmt.Sprintf("replica count should be %d after 2 minute", replicas))
wg.Done()
}(i)
}
wg.Wait()
}

func saveLogs(t *testing.T, kc *kubernetes.Clientset, logName, selector, namespace string) {
logs := FindPodLogs(t, kc, namespace, selector)
f, err := os.Create(fmt.Sprintf("%s-%s.log", logName, time.Now().Format("20060102150405")))
assert.NoErrorf(t, err, "cannot create log file - %s", err)
defer f.Close()

w := bufio.NewWriter(f)
for _, line := range logs {
fmt.Fprintln(w, line)
}
err = w.Flush()
assert.NoErrorf(t, err, "cannot save log file - %s", err)
}

func getTemplateData() (templateData, []Template) {
return templateData{
TestNamespace: testNamespace,
MonitoredDeploymentName: monitoredDeploymentName,
SutDeploymentName: sutDeploymentName,
ScaledObjectName: scaledObjectName,
MinReplicaCount: minReplicaCount,
MaxReplicaCount: maxReplicaCount,
}, []Template{
{Name: "monitoredDeploymentTemplate", Config: monitoredDeploymentTemplate},
{Name: "sutDeploymentTemplate", Config: sutDeploymentTemplate},
{Name: "scaledObjectTemplate", Config: scaledObjectTemplate},
}
}
9 changes: 9 additions & 0 deletions tests/helper/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -537,3 +537,12 @@ func FindPodLogs(t *testing.T, kc *kubernetes.Clientset, namespace, label string
}
return podLogs
}

// Delete all pods in namespace by selector
func DeletePodsInNamespaceBySelector(t *testing.T, kc *kubernetes.Clientset, selector, namespace string) {
t.Logf("killing all pods in %s namespace with selector %s", namespace, selector)
err := kc.CoreV1().Pods(namespace).DeleteCollection(context.Background(), metav1.DeleteOptions{}, metav1.ListOptions{
LabelSelector: selector,
})
assert.NoErrorf(t, err, "cannot delete pods - %s", err)
}
Loading

0 comments on commit 5a1218d

Please sign in to comment.