From 13119089c741ddf906d280649b8f761c68515e94 Mon Sep 17 00:00:00 2001 From: Namkyu Park <53862866+namkyu1999@users.noreply.github.com> Date: Mon, 29 Apr 2024 13:32:08 +0900 Subject: [PATCH] feat: Add a k6-loadgen chaos fault (#622) * feat: add load dir Signed-off-by: namkyu1999 * fix: chore Signed-off-by: namkyu1999 * feat: add secret Signed-off-by: namkyu1999 * fix: hostpath to secret Signed-off-by: namkyu1999 * fix: fixed scope Signed-off-by: namkyu1999 * fix: implement feedbacks Signed-off-by: namkyu1999 * fix: chore Signed-off-by: namkyu1999 * Update faults/load/k6-loadgen/engine.yaml Co-authored-by: Neelanjan Manna Signed-off-by: namkyu1999 * Update faults/load/k6-loadgen/fault.yaml Co-authored-by: Neelanjan Manna Signed-off-by: namkyu1999 * Update faults/load/k6-loadgen/engine.yaml Co-authored-by: Neelanjan Manna Signed-off-by: namkyu1999 --------- Signed-off-by: namkyu1999 Co-authored-by: Neelanjan Manna --- .gitignore | 215 ++++++++++++++++++ faults/load/experiments.yaml | 96 ++++++++ faults/load/icons/k6-loadgen.png | Bin 0 -> 4555 bytes faults/load/icons/load.png | Bin 0 -> 3148 bytes faults/load/k6-loadgen/engine.yaml | 45 ++++ faults/load/k6-loadgen/fault.yaml | 95 ++++++++ .../k6-loadgen.chartserviceversion.yaml | 29 +++ faults/load/load.chartserviceversion.yaml | 32 +++ faults/load/load.package.yaml | 6 + 9 files changed, 518 insertions(+) create mode 100644 .gitignore create mode 100644 faults/load/experiments.yaml create mode 100644 faults/load/icons/k6-loadgen.png create mode 100644 faults/load/icons/load.png create mode 100644 faults/load/k6-loadgen/engine.yaml create mode 100644 faults/load/k6-loadgen/fault.yaml create mode 100644 faults/load/k6-loadgen/k6-loadgen.chartserviceversion.yaml create mode 100644 faults/load/load.chartserviceversion.yaml create mode 100644 faults/load/load.package.yaml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b3c6075 --- /dev/null +++ b/.gitignore @@ -0,0 +1,215 @@ +# Created by https://www.toptal.com/developers/gitignore/api/git,visualstudiocode,goland+all,jetbrains+all,macos +# Edit at https://www.toptal.com/developers/gitignore?templates=git,visualstudiocode,goland+all,jetbrains+all,macos + +### Git ### +# Created by git for backups. To disable backups in Git: +# $ git config --global mergetool.keepBackup false +*.orig + +# Created by git when using merge tools for conflicts +*.BACKUP.* +*.BASE.* +*.LOCAL.* +*.REMOTE.* +*_BACKUP_*.txt +*_BASE_*.txt +*_LOCAL_*.txt +*_REMOTE_*.txt + +### GoLand+all ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### GoLand+all Patch ### +# Ignore everything but code style settings and run configurations +# that are supposed to be shared within teams. + +.idea/* + +!.idea/codeStyles +!.idea/runConfigurations + +### JetBrains+all ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff + +# AWS User-specific + +# Generated files + +# Sensitive or high-churn files + +# Gradle + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake + +# Mongo Explorer plugin + +# File-based project format + +# IntelliJ + +# mpeltonen/sbt-idea plugin + +# JIRA plugin + +# Cursive Clojure plugin + +# SonarLint plugin + +# Crashlytics plugin (for Android Studio and IntelliJ) + +# Editor-based Rest Client + +# Android studio 3.1+ serialized cache file + +### JetBrains+all Patch ### +# Ignore everything but code style settings and run configurations +# that are supposed to be shared within teams. + + + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +### VisualStudioCode ### +.vscode/ +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +# End of https://www.toptal.com/developers/gitignore/api/git,visualstudiocode,goland+all,jetbrains+all,macos \ No newline at end of file diff --git a/faults/load/experiments.yaml b/faults/load/experiments.yaml new file mode 100644 index 0000000..f19b6a9 --- /dev/null +++ b/faults/load/experiments.yaml @@ -0,0 +1,96 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Execute the k6 engine using the JS script +kind: ChaosExperiment +metadata: + name: k6-loadgen + labels: + name: k6-loadgen + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["secrets", "configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "litmuschaos.docker.scarf.sh/litmuschaos/go-runner:latest" + imagePullPolicy: Always + args: + - -c + - ./experiments -name k6-loadgen + command: + - /bin/bash + env: + # set chaos duration (in sec) as desired + - name: TOTAL_CHAOS_DURATION + value: "30" + + # Interval between chaos injection in sec + - name: CHAOS_INTERVAL + value: "30" + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: "0" + + # Provide the secret name of the JS script + - name: SCRIPT_SECRET_NAME + value: "k6-script" + + # Provide the secret key of the JS script + - name: SCRIPT_SECRET_KEY + value: "script.js" + + # Provide the image name of the helper pod + - name: LIB_IMAGE + value: "ghcr.io/grafana/k6-operator:latest-runner" + + # Provide the image pull policy of the helper pod + - name: LIBImagePullPolicy + value: "Always" + + labels: + name: k6-loadgen + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci +--- \ No newline at end of file diff --git a/faults/load/icons/k6-loadgen.png b/faults/load/icons/k6-loadgen.png new file mode 100644 index 0000000000000000000000000000000000000000..3e8f8459d0ece76fc6be73702ff1a90a0ec1b99b GIT binary patch literal 4555 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 literal 0 HcmV?d00001 diff --git a/faults/load/icons/load.png b/faults/load/icons/load.png new file mode 100644 index 0000000000000000000000000000000000000000..e197a5d97a1fda0e15abd4e75f6df678c04dacf6 GIT binary patch literal 3148 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 + Load chaos contains different chaos experiments to test the app/platform service availability. It will install all the experiments which can be used to inject load into the services like VMs, Pods and so on. + faults: + - name: k6-loadgen + description: It injects the load on the application using k6 load generator + displayName: "k6 Load Generator" + keywords: + - Load + maintainers: + - name: Namkyu Park + email: lak9348@gmail.com + minKubeVersion: 1.32.0 + links: + - name: Kubernetes Website + url: https://kubernetes.io + - name: k6 Website + url: https://k6.io/ + icon: + - url: https://github.com/litmuschaos/chaos-charts/blob/master/faults/load/icons/k6-loadgen.png + mediatype: image/png diff --git a/faults/load/load.package.yaml b/faults/load/load.package.yaml new file mode 100644 index 0000000..5a423e3 --- /dev/null +++ b/faults/load/load.package.yaml @@ -0,0 +1,6 @@ +--- +packageName: load +experiments: + - name: k6-loadgen + CSV: k6-loadgen.chartserviceversion.yaml + desc: "k6-loadgen"