diff --git a/cmd/config/node-density-cni/node-density-cni.yml b/cmd/config/node-density-cni/node-density-cni.yml index 5daa93dd..2e5aff54 100644 --- a/cmd/config/node-density-cni/node-density-cni.yml +++ b/cmd/config/node-density-cni/node-density-cni.yml @@ -38,6 +38,12 @@ jobs: burst: {{.BURST}} namespacedIterations: {{.NAMESPACED_ITERATIONS}} iterationsPerNamespace: {{.ITERATIONS_PER_NAMESPACE}} + churn: {{.CHURN}} + churnCycles: {{.CHURN_CYCLES}} + churnDuration: {{.CHURN_DURATION}} + churnPercent: {{.CHURN_PERCENT}} + churnDelay: {{.CHURN_DELAY}} + churnDeletionStrategy: {{.CHURN_DELETION_STRATEGY}} podWait: false waitWhenFinished: true preLoadImages: true diff --git a/cmd/config/node-density-heavy/node-density-heavy.yml b/cmd/config/node-density-heavy/node-density-heavy.yml index 0a954176..68d92121 100644 --- a/cmd/config/node-density-heavy/node-density-heavy.yml +++ b/cmd/config/node-density-heavy/node-density-heavy.yml @@ -34,6 +34,12 @@ jobs: burst: {{.BURST}} namespacedIterations: {{.NAMESPACED_ITERATIONS}} iterationsPerNamespace: {{.ITERATIONS_PER_NAMESPACE}} + churn: {{.CHURN}} + churnCycles: {{.CHURN_CYCLES}} + churnDuration: {{.CHURN_DURATION}} + churnPercent: {{.CHURN_PERCENT}} + churnDelay: {{.CHURN_DELAY}} + churnDeletionStrategy: {{.CHURN_DELETION_STRATEGY}} podWait: false waitWhenFinished: true preLoadImages: true diff --git a/cmd/config/node-density/node-density.yml b/cmd/config/node-density/node-density.yml index cbe94074..7586534d 100644 --- a/cmd/config/node-density/node-density.yml +++ b/cmd/config/node-density/node-density.yml @@ -32,10 +32,17 @@ jobs: jobIterations: {{.JOB_ITERATIONS}} qps: {{.QPS}} burst: {{.BURST}} - namespacedIterations: false + namespacedIterations: {{.NAMESPACED_ITERATIONS}} + iterationsPerNamespace: {{.ITERATIONS_PER_NAMESPACE}} podWait: false waitWhenFinished: true preLoadImages: true + churn: {{.CHURN}} + churnCycles: {{.CHURN_CYCLES}} + churnDuration: {{.CHURN_DURATION}} + churnPercent: {{.CHURN_PERCENT}} + churnDelay: {{.CHURN_DELAY}} + churnDeletionStrategy: {{.CHURN_DELETION_STRATEGY}} preLoadPeriod: 10s namespaceLabels: security.openshift.io/scc.podSecurityLabelSync: false diff --git a/node-density-cni.go b/node-density-cni.go index 30b52f80..1f6669b2 100644 --- a/node-density-cni.go +++ b/node-density-cni.go @@ -28,10 +28,11 @@ import ( // NewNodeDensity holds node-density-cni workload func NewNodeDensityCNI(wh *workloads.WorkloadHelper) *cobra.Command { - var podsPerNode int - var namespacedIterations, svcLatency bool + var podsPerNode, iterationsPerNamespace, churnCycles, churnPercent int + var churnDelay, churnDuration time.Duration + var churnDeletionStrategy string + var churn, namespacedIterations, svcLatency bool var podReadyThreshold time.Duration - var iterationsPerNamespace int cmd := &cobra.Command{ Use: "node-density-cni", Short: "Runs node-density-cni workload", @@ -42,6 +43,13 @@ func NewNodeDensityCNI(wh *workloads.WorkloadHelper) *cobra.Command { if err != nil { log.Fatal(err) } + + os.Setenv("CHURN", fmt.Sprint(churn)) + os.Setenv("CHURN_CYCLES", fmt.Sprintf("%v", churnCycles)) + os.Setenv("CHURN_DURATION", fmt.Sprintf("%v", churnDuration)) + os.Setenv("CHURN_DELAY", fmt.Sprintf("%v", churnDelay)) + os.Setenv("CHURN_PERCENT", fmt.Sprint(churnPercent)) + os.Setenv("CHURN_DELETION_STRATEGY", churnDeletionStrategy) os.Setenv("JOB_ITERATIONS", fmt.Sprint((totalPods-podCount)/2)) os.Setenv("NAMESPACED_ITERATIONS", fmt.Sprint(namespacedIterations)) os.Setenv("ITERATIONS_PER_NAMESPACE", fmt.Sprint(iterationsPerNamespace)) @@ -53,6 +61,13 @@ func NewNodeDensityCNI(wh *workloads.WorkloadHelper) *cobra.Command { wh.Run(cmd.Name()) }, } + + cmd.Flags().BoolVar(&churn, "churn", false, "Enable churning") + cmd.Flags().IntVar(&churnCycles, "churn-cycles", 0, "Churn cycles to execute") + cmd.Flags().DurationVar(&churnDuration, "churn-duration", 1*time.Hour, "Churn duration") + cmd.Flags().DurationVar(&churnDelay, "churn-delay", 2*time.Minute, "Time to wait between each churn") + cmd.Flags().StringVar(&churnDeletionStrategy, "churn-deletion-strategy", "default", "Churn deletion strategy to use") + cmd.Flags().IntVar(&churnPercent, "churn-percent", 10, "Percentage of job iterations that kube-burner will churn each round") cmd.Flags().DurationVar(&podReadyThreshold, "pod-ready-threshold", 1*time.Minute, "Pod ready timeout threshold") cmd.Flags().IntVar(&podsPerNode, "pods-per-node", 245, "Pods per node") cmd.Flags().BoolVar(&namespacedIterations, "namespaced-iterations", true, "Namespaced iterations") diff --git a/node-density-heavy.go b/node-density-heavy.go index 6e7a60e1..37d28743 100644 --- a/node-density-heavy.go +++ b/node-density-heavy.go @@ -27,10 +27,10 @@ import ( // NewNodeDensity holds node-density-heavy workload func NewNodeDensityHeavy(wh *workloads.WorkloadHelper) *cobra.Command { - var podsPerNode int - var podReadyThreshold, probesPeriod time.Duration - var namespacedIterations bool - var iterationsPerNamespace int + var podsPerNode, churnCycles, iterationsPerNamespace, churnPercent int + var podReadyThreshold, churnDuration, churnDelay, probesPeriod time.Duration + var churnDeletionStrategy string + var churn, namespacedIterations bool cmd := &cobra.Command{ Use: "node-density-heavy", Short: "Runs node-density-heavy workload", @@ -41,6 +41,12 @@ func NewNodeDensityHeavy(wh *workloads.WorkloadHelper) *cobra.Command { if err != nil { log.Fatal(err) } + os.Setenv("CHURN", fmt.Sprint(churn)) + os.Setenv("CHURN_CYCLES", fmt.Sprintf("%v", churnCycles)) + os.Setenv("CHURN_DURATION", fmt.Sprintf("%v", churnDuration)) + os.Setenv("CHURN_DELAY", fmt.Sprintf("%v", churnDelay)) + os.Setenv("CHURN_PERCENT", fmt.Sprint(churnPercent)) + os.Setenv("CHURN_DELETION_STRATEGY", churnDeletionStrategy) // We divide by two the number of pods to deploy to obtain the workload iterations os.Setenv("JOB_ITERATIONS", fmt.Sprint((totalPods-podCount)/2)) os.Setenv("POD_READY_THRESHOLD", fmt.Sprintf("%v", podReadyThreshold)) @@ -53,6 +59,13 @@ func NewNodeDensityHeavy(wh *workloads.WorkloadHelper) *cobra.Command { wh.Run(cmd.Name()) }, } + + cmd.Flags().BoolVar(&churn, "churn", false, "Enable churning") + cmd.Flags().IntVar(&churnCycles, "churn-cycles", 0, "Churn cycles to execute") + cmd.Flags().DurationVar(&churnDuration, "churn-duration", 1*time.Hour, "Churn duration") + cmd.Flags().DurationVar(&churnDelay, "churn-delay", 2*time.Minute, "Time to wait between each churn") + cmd.Flags().StringVar(&churnDeletionStrategy, "churn-deletion-strategy", "default", "Churn deletion strategy to use") + cmd.Flags().IntVar(&churnPercent, "churn-percent", 10, "Percentage of job iterations that kube-burner will churn each round") cmd.Flags().DurationVar(&podReadyThreshold, "pod-ready-threshold", 2*time.Minute, "Pod ready timeout threshold") cmd.Flags().DurationVar(&probesPeriod, "probes-period", 10*time.Second, "Perf app readiness/livenes probes period") cmd.Flags().IntVar(&podsPerNode, "pods-per-node", 245, "Pods per node") diff --git a/node-density.go b/node-density.go index a0ab9f8d..ce495035 100644 --- a/node-density.go +++ b/node-density.go @@ -27,9 +27,10 @@ import ( // NewNodeDensity holds node-density workload func NewNodeDensity(wh *workloads.WorkloadHelper) *cobra.Command { - var podsPerNode int - var podReadyThreshold time.Duration - var containerImage string + var iterationsPerNamespace, podsPerNode, churnCycles, churnPercent int + var podReadyThreshold, churnDuration, churnDelay time.Duration + var containerImage, churnDeletionStrategy string + var namespacedIterations, churn bool cmd := &cobra.Command{ Use: "node-density", Short: "Runs node-density workload", @@ -40,7 +41,16 @@ func NewNodeDensity(wh *workloads.WorkloadHelper) *cobra.Command { if err != nil { log.Fatal(err.Error()) } + + os.Setenv("CHURN", fmt.Sprint(churn)) + os.Setenv("CHURN_CYCLES", fmt.Sprintf("%v", churnCycles)) + os.Setenv("CHURN_DURATION", fmt.Sprintf("%v", churnDuration)) + os.Setenv("CHURN_DELAY", fmt.Sprintf("%v", churnDelay)) + os.Setenv("CHURN_PERCENT", fmt.Sprint(churnPercent)) + os.Setenv("CHURN_DELETION_STRATEGY", churnDeletionStrategy) os.Setenv("JOB_ITERATIONS", fmt.Sprint(totalPods-podCount)) + os.Setenv("NAMESPACED_ITERATIONS", fmt.Sprint(namespacedIterations)) + os.Setenv("ITERATIONS_PER_NAMESPACE", fmt.Sprint(iterationsPerNamespace)) os.Setenv("POD_READY_THRESHOLD", fmt.Sprintf("%v", podReadyThreshold)) os.Setenv("CONTAINER_IMAGE", containerImage) }, @@ -49,8 +59,17 @@ func NewNodeDensity(wh *workloads.WorkloadHelper) *cobra.Command { wh.Run(cmd.Name()) }, } + + cmd.Flags().BoolVar(&churn, "churn", false, "Enable churning") + cmd.Flags().IntVar(&churnCycles, "churn-cycles", 0, "Churn cycles to execute") + cmd.Flags().DurationVar(&churnDuration, "churn-duration", 1*time.Hour, "Churn duration") + cmd.Flags().DurationVar(&churnDelay, "churn-delay", 2*time.Minute, "Time to wait between each churn") + cmd.Flags().StringVar(&churnDeletionStrategy, "churn-deletion-strategy", "gvr", "Churn deletion strategy to use") + cmd.Flags().IntVar(&churnPercent, "churn-percent", 10, "Percentage of job iterations that kube-burner will churn each round") cmd.Flags().IntVar(&podsPerNode, "pods-per-node", 245, "Pods per node") cmd.Flags().DurationVar(&podReadyThreshold, "pod-ready-threshold", 15*time.Second, "Pod ready timeout threshold") cmd.Flags().StringVar(&containerImage, "container-image", "gcr.io/google_containers/pause:3.1", "Container image") + cmd.Flags().BoolVar(&namespacedIterations, "namespaced-iterations", false, "Namespaced iterations") + cmd.Flags().IntVar(&iterationsPerNamespace, "iterations-per-namespace", 1000, "Iterations per namespace") return cmd }