diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..b3c607500 --- /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 000000000..f19b6a9ba --- /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 000000000..3e8f8459d Binary files /dev/null and b/faults/load/icons/k6-loadgen.png differ diff --git a/faults/load/icons/load.png b/faults/load/icons/load.png new file mode 100644 index 000000000..e197a5d97 Binary files /dev/null and b/faults/load/icons/load.png differ diff --git a/faults/load/k6-loadgen/engine.yaml b/faults/load/k6-loadgen/engine.yaml new file mode 100644 index 000000000..b37f6f2fc --- /dev/null +++ b/faults/load/k6-loadgen/engine.yaml @@ -0,0 +1,45 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChaosEngine +metadata: + name: nginx-chaos + namespace: default +spec: + engineState: 'active' + appinfo: + appns: '' + applabel: '' + appkind: '' + chaosServiceAccount: litmus-admin + experiments: + - name: k6-loadgen + spec: + components: + 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: LIB_IMAGE_PULL_POLICY + value: "Always" diff --git a/faults/load/k6-loadgen/fault.yaml b/faults/load/k6-loadgen/fault.yaml new file mode 100644 index 000000000..ab572bd57 --- /dev/null +++ b/faults/load/k6-loadgen/fault.yaml @@ -0,0 +1,95 @@ +--- +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: LIB_IMAGE_PULL_POLICY + 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/k6-loadgen/k6-loadgen.chartserviceversion.yaml b/faults/load/k6-loadgen/k6-loadgen.chartserviceversion.yaml new file mode 100644 index 000000000..485aabbcd --- /dev/null +++ b/faults/load/k6-loadgen/k6-loadgen.chartserviceversion.yaml @@ -0,0 +1,29 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + createdAt: 2024-02-10T01:00:00Z + name: k6-loadgen + version: 0.1.0 + annotations: + categories: Load + vendor: LitmusChaos +spec: + displayName: k6 Load Generator + categoryDescription: | + k6 is an open-source load testing tool that makes performance testing easy and productive for engineering teams. You can easily run load testing through a single JS script. It's a modern alternative to LoadRunner, Grinder, and JMeter. + keywords: + - k6 + - Load + platforms: + - kubernetes + maintainers: + - name: Namkyu Park + email: lak9348@gmail.com + minKubeVersion: 1.32.0 + links: + - name: Documentation + url: https://litmuschaos.github.io/litmus/experiments/categories/contents + icon: + - url: + mediatype: "" diff --git a/faults/load/load.chartserviceversion.yaml b/faults/load/load.chartserviceversion.yaml new file mode 100644 index 000000000..95465e231 --- /dev/null +++ b/faults/load/load.chartserviceversion.yaml @@ -0,0 +1,32 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: load + version: 0.1.0 + annotations: + categories: Load + chartDescription: Injects load on the application + executionPlane: "kubernetes" +spec: + displayName: Load + categoryDescription: > + 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 000000000..5a423e34b --- /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"