Krkn Operator is a Kubernetes-native platform to deploy, configure and orchestrate Chaos Engineering experiments through a web console. Instead of manually executing scenarios, the Operator provides a complete platform to manage users, clusters, permissions and experiment execution from a single place.
Multi-Cluster Chaos Testing
Multi-cluster execution is a core capability of the platform. Every chaos scenario can target one or more clusters simultaneously, regardless of how those clusters were registered:
Manual targets — clusters registered directly by an administrator through the web console
OCM/ACM discovery — clusters discovered automatically through Open Cluster Management or Red Hat Advanced Cluster Management
Both methods produce the same unified cluster pool. When executing a scenario, users select any combination of available targets and the platform runs the experiment in parallel across all of them. This enables cross-environment resilience testing (dev, staging, production), regional failover validation, and multi-tenant chaos campaigns — all from a single execution.
INFO
Multi-cluster is always available. OCM/ACM integration is optional and adds automatic cluster discovery, but multi-cluster execution works identically with manually registered targets. No external cluster management platform is required.
Personas
The platform defines two roles with different access levels.
Admin
Full access to the platform. Administrators configure the infrastructure that users operate on.
Register and remove target clusters
Create groups with cluster access and permissions
Create users and assign them to groups
Configure private registries, mirror signed images, and control registry visibility
Configure cloud credentials and their visibility
Configure target providers (e.g. ACM integration)
All operational features available to users
User
Operational access scoped by group membership. Every user must belong to a group — the group determines which clusters, registries, credentials and features are accessible.
View and manage jobs (based on View/Cancel permissions)
Use the cluster terminal (requires Run permission)
Run scenarios on assigned clusters (requires Run permission)
Design workflows in Chaos Studio (requires Run permission)
Upload and manage files (scoped by group visibility)
Select cloud credentials available to their group when running cloud scenarios
INFO
Users only see jobs from their own group. A cluster-wide indicator shows the names of running scenarios across all groups, but no details.
Permission Model
Admin
│
Creates Groups
│
┌─────┴──────┐
│ │
Group A Group B
│ │
Clusters Clusters
Permissions Permissions
(View,Run, (View)
Cancel)
│ │
Users Users
Permissions are assigned at the group level and determine what users can do on clusters accessible to their group.
View
View
Allows users to see jobs and their execution results. Users with this permission can inspect single run outcomes, console logs, graph run nodes, and Resiliency Scores — but cannot execute, cancel or remove anything.
Allows users to execute chaos experiments on the clusters assigned to their group. This includes running single scenarios, designing and executing Chaos Studio workflows, and accessing the cluster terminal for read-only inspection.
Allows users to cancel running scenarios and to remove scenario runs and their execution history. Without this permission, jobs remain visible but cannot be cancelled or removed.
Deploy Krkn Operator on Kubernetes or OpenShift using Helm.
Upgrade from 1.0.x to 1.1.0
Upgrade an existing Helm release in place. The 1.1.x chart includes hooks that preserve existing custom resources while the operator updates their Custom Resource Definitions (CRDs) and migrates legacy run fields. Upgrading from 1.0.x to 1.1.x with helm upgrade does not require deleting CRDs or recreating runs, and is designed to preserve existing run data. Back up your configuration before upgrading.
Confirm the release name and namespace, and save the current Helm values for reference:
# Set these to your existing installation.RELEASE_NAME=krkn-operator
RELEASE_NAMESPACE=krkn-operator-system
helm list --namespace "$RELEASE_NAMESPACE"helm get values "$RELEASE_NAME" --namespace "$RELEASE_NAMESPACE" -o yaml > krkn-operator-values-backup.yaml
Upgrade the existing release to chart version 1.1.0, retaining its configured values:
helm status "$RELEASE_NAME" --namespace "$RELEASE_NAMESPACE"kubectl get pods -n "$RELEASE_NAMESPACE" -l app.kubernetes.io/name=krkn-operator
During the upgrade, a pre-upgrade hook saves legacy run fields and pauses run reconciliation. After the new operator starts, a post-upgrade hook updates the CRDs, completes the run migration, and resumes reconciliation. Helm does not upgrade files in a chart’s crds/ directory by itself; the operator’s upgrade hooks handle that step. While the migration guard exists in the release namespace, scenario and graph run creation and mutation requests return HTTP 503. The hook jobs have a six-minute deadline. If a hook fails, the guard remains active: inspect the hook logs, fix the reported cause, then retry the same helm upgrade command. The hooks resume from saved migration annotations. For an individually blocked run, restore its missing current-API scenario or graph identity and, for private scenarios, its registry name before retrying. Do not remove the guard to bypass an incomplete migration.
OpenShift Security: The chart automatically detects OpenShift and configures the required Security Context Constraints (SCC). No manual SCC configuration is needed.
# Default values for krkn-operator# This is a YAML-formatted file.## Global settingsglobal:# Namespace where to install (if empty, uses Release.Namespace)namespaceOverride:""## Images configuration# NOTE: Tags are automatically updated during release by CI/CD workflow# - Operator & Data Provider: match the release tag (e.g., v0.4.3-beta)# - ACM: frozen to latest stable ACM tag at release time# - Console: frozen to latest stable Console tag at release time# Local development: uses :latest tags for all componentsimages:operator:image:krkn-chaos.docker.scarf.sh/krkn-chaos/krkn-operator:v1.1.0-rc7pullPolicy:IfNotPresentdataProvider:image:krkn-chaos.docker.scarf.sh/krkn-chaos/krkn-operator-data-provider:v1.1.0-rc7pullPolicy:IfNotPresentacm:image:krkn-chaos.docker.scarf.sh/krkn-chaos/krkn-operator-acm:v1.1.0-rc3pullPolicy:IfNotPresentconsole:image:krkn-chaos.docker.scarf.sh/krkn-chaos/krkn-operator-console:v1.1.0-rc8pullPolicy:IfNotPresentpullSecrets:[]# - name: my-registry-secret## Authentication & Securityauth:# JWT secret for token signing (base64 encoded)# If empty, a random one is generated by Helm# To provide your own: echo -n "your-secret-key" | base64jwtSecret:""# JWT token expiry in hours (default: 24)# Passed to operator as JWT_EXPIRY_HOURS environment variablejwtExpiryHours:24# Trusted reverse-proxy / load-balancer networks (comma-separated CIDRs).# Passed to the operator as the TRUSTED_PROXY_CIDRS environment variable.## The auth endpoints (/api/v1/auth/register, /login, /is-registered) are# rate-limited per client IP. When the operator sits behind an ingress,# reverse proxy, or load balancer, the direct connection address is the# proxy's, so every client would share a single rate-limit bucket. Setting# this to the proxy network(s) makes the operator read the real client IP# from the X-Forwarded-For / X-Real-IP headers — but ONLY when the request# actually arrives from one of these CIDRs.## Leave empty (default) when the operator is reached directly: forwarding# headers are then ignored and the connection address is used, so clients# cannot spoof the rate-limit key. Only set this if you trust the listed# networks to set the forwarding headers correctly.## Example: "10.0.0.0/8,192.168.0.0/16"trustedProxyCIDRs:""# WebSocket Origin enforcement (comma-separated list of allowed origins).# Passed to the operator as the WEBSOCKET_ALLOWED_ORIGINS environment variable.## There IS an optional Origin-based access control for WebSocket upgrades# (cluster terminal, live log streaming), but it is OPT-IN and OFF by default:## - Empty (default): all origins are accepted. This is safe because# WebSocket connections authenticate with a JWT sent in the# Sec-WebSocket-Protocol subprotocol (not browser cookies), so cross-site# WebSocket hijacking (CSWSH) is not exploitable — a malicious page cannot# read the origin-scoped token and therefore cannot connect.# - Non-empty: enables enforcement. Only same-origin requests and the listed# origins may open WebSocket connections. Use this as optional# defense-in-depth when you want to pin the allowed browser origins.## Note: enabling enforcement can reject legitimate traffic behind proxies that# rewrite the Host header, so only turn it on if you understand your ingress.## Example: "https://console.example.com,http://localhost:3000"websocketAllowedOrigins:""## Core Operatoroperator:enabled:truereplicaCount:1olmBootstrap:falseolmOpenShift:falseresources:requests:cpu:100mmemory:128Milimits:cpu:500mmemory:512Mi# Data provider sidecar resourcesdataProvider:resources:requests:cpu:50mmemory:128Milimits:cpu:200mmemory:256Miservice:type:ClusterIPport:8080grpcPort:50051logging:level:info# debug, info, warn, errorformat:json# json or textsecurityContext:runAsNonRoot:trueseccompProfile:type:RuntimeDefaultnodeSelector:{}tolerations:[]affinity:{}extraEnv:[]## ACM Integration (optional)acm:enabled:falsereplicaCount:1resources:requests:cpu:100mmemory:128Milimits:cpu:500mmemory:512Miservice:type:ClusterIPport:8080grpcPort:50051config:# Secret name for ACM managed clusters (must exist - created by OpenShift ACM)secretName:"application-manager"logging:level:infoformat:jsonsecurityContext:runAsNonRoot:trueseccompProfile:type:RuntimeDefaultnodeSelector:{}tolerations:[]affinity:{}extraEnv:[]## Console (web UI)console:enabled:truereplicaCount:1resources:requests:cpu:50mmemory:64Milimits:cpu:200mmemory:256Miservice:type:ClusterIPport:3000# NodePort (only used if type: NodePort)nodePort:30080# Ingress configuration (Kubernetes - legacy)ingress:enabled:falseclassName:"nginx"hostname:"krkn-operator.example.com"hosts:[]# Legacy list of host/path mappings; takes precedence when non-empty.tls:enabled:falsesecretName:""# If empty, uses hostname to generate name# Annotations (for cert-manager, AWS ALB, etc.)annotations:{}# cert-manager.io/cluster-issuer: letsencrypt-prod# kubernetes.io/ingress.class: alb# Gateway API configuration (Kubernetes - recommended)# Requires Gateway API CRDs installed in the cluster# See: https://gateway-api.sigs.k8s.io/gateway:enabled:false# Name of the existing Gateway resource to attach togatewayName:"krkn-gateway"# Namespace of the Gateway (if different from release namespace)# Leave empty to use the same namespacegatewayNamespace:""# Optional: Listener/Section name on the Gateway to attach to# Useful when Gateway has multiple listenerssectionName:""# Hostname for the HTTPRoutehostname:"krkn-operator.example.com"# Path configurationpath:"/"pathType:"PathPrefix"# PathPrefix, Exact, or ImplementationSpecific# Annotations for the HTTPRoute resourceannotations:{}# OpenShift Route configurationroute:enabled:false# Leave empty to let OpenShift generate the Route hostname. Set this# explicitly only when the cluster has a configured DNS name for it.hostname:""host:""# Legacy hostname fallback.tls:enabled:truetermination:edge# edge, passthrough, reencryptinsecureEdgeTerminationPolicy:Redirectannotations:{}logging:level:infoformat:jsonsecurityContext:runAsNonRoot:trueseccompProfile:type:RuntimeDefaultnodeSelector:{}tolerations:[]affinity:{}extraEnv:[]## RBACrbac:create:true# OLM creates the scenario-runner resources during bootstrap because the# ServiceAccount namespace is chosen at installation time.scenarioRunner:create:true## ServiceAccountserviceAccount:create:truename:""annotations:{}## CRDscrds:# Keep CRDs on chart uninstallkeep:true## Monitoring (optional)monitoring:enabled:false# SAFE DEFAULT for Kind/Minikubeservice:port:8443annotations:{}serviceMonitor:enabled:falseinterval:30sscrapeTimeout:10slabels:{}## Network Policy (optional)networkPolicy:enabled:falseingress:[]egress:[]## Update strategyupdateStrategy:type:RollingUpdaterollingUpdate:maxUnavailable:0maxSurge:1## Pod disruption budget (for HA)podDisruptionBudget:enabled:falseminAvailable:1## Common labels/annotationscommonLabels:{}commonAnnotations:{}## Name overridesnameOverride:""fullnameOverride:""
Administrators configure the platform infrastructure that users operate on. This includes registering clusters, managing users and groups, setting up private registries, cloud credentials, observability endpoints and target providers.
Permission Model
The Admin creates groups that define what users can do on the platform. Each group specifies:
Which clusters are accessible
Which permissions are granted (View, Run, Cancel)
Which registries and cloud credentials are visible
Users inherit all permissions from their assigned group.
Admin creates Group
│
├── Assigns Clusters (target-1, target-2, ...)
├── Assigns Permissions (View, Run, Cancel)
├── Assigns Registry Visibility
└── Assigns Cloud Credential Visibility
│
└── Users in this group inherit everything
INFO
Every user must belong to a group. A user without a group has no access to the platform.
Register target Kubernetes clusters for chaos scenario execution. Krkn Operator runs on a management cluster and executes scenarios against registered targets; it does not run scenarios against itself.
This walkthrough is retained with v1.1.0 documentation and may show an earlier interface.
Operations
Operation
Description
Add Cluster
Register a new target cluster by providing its name and kubeconfig
View Clusters
Browse all registered clusters and their status
Delete Cluster
Remove a cluster from the platform
Once registered, clusters become available for assignment to groups through User Management.
Organize users through groups that define cluster access and permissions. The group is the central unit of the permission model — users inherit all capabilities from their assigned group.
This walkthrough is retained with v1.1.0 documentation and may show an earlier interface.
Groups
A group defines what its members can access and do on the platform.
Field
Description
Name
Group identifier
Description
Purpose of the group
Cluster Permissions
Which registered clusters this group can target
Groups also receive permission flags that control what operations their members can perform:
Permission
What it grants
View
View jobs and execution results
Run
Execute scenarios, use Chaos Studio, access cluster terminal
Cancel
Cancel running jobs, and remove jobs and execution history
Users
Users are created and assigned to a group during creation.
Field
Description
User Data
Username, credentials
Group
The group this user belongs to
INFO
Group assignment is mandatory. Every user must belong to exactly one group. A user cannot be created without selecting a group. The group determines which clusters the user can target and which operations they can perform.
Permission Cascade
Group "SRE Team"
├── Clusters: production-us, production-eu
├── Permissions: View, Run
└── Members: alice, bob
│
├── alice → can run scenarios on production-us, production-eu
└── bob → can run scenarios on production-us, production-eu
2.3 - Registry Management
Configure private container registries and visibility
Configure private container registries for chaos scenario images and control which groups can access them. By default, scenarios are pulled from the public Quay.io registry. Private registries enable air-gapped deployments and custom scenario images.
INFO
Before running scenarios from a private registry, follow Mirror Signed Images to copy the scenario and its Cosign signature. Mirror any helper workload image too, and override the scenario’s IMAGE parameter with its private registry URL. An image-only mirror is insufficient for signed scenario execution.
This walkthrough is retained with v1.1.0 documentation and may show an earlier interface.
Creating a Private Registry
Configure a private registry by providing its connection settings (URL, credentials, TLS configuration).
Visibility
Each registry has a visibility setting that controls who can use it:
Visibility
Description
Everyone
All users on the platform can select this registry
Group-based
Only users belonging to assigned groups can see and use this registry
Impact on Scenario Selection
When a user selects a private registry during scenario execution, only the scenarios that have been mirrored to that registry will be available. Scenarios not present in the private registry will not appear in the selection list.
The Operator requires a valid signature for each selected scenario image by default. For the commands and workload-image override, see Mirror Signed Images.
INFO
Air-Gapped Environments: The operator uses OCI registry APIs for scenario metadata. A private registry configuration allows the platform to function completely in disconnected environments without external connectivity.
2.4 - Mirror Signed Images
Mirror signed scenario and workload images into a private registry
For a private or disconnected environment, mirror both the scenario image and any helper workload image it launches. Copy their Cosign signatures with the images. A normal docker pull/docker push, podman pull/podman push, or image-only mirror can leave the signatures behind.
INFO
Image signature verification is enabled by default. The Operator checks the scenario image against the Krkn public key before creating its pod. If the mirrored scenario has no valid signature, the run is rejected. A mirrored workload image also needs its signature when your cluster enforces signed images; the scenario must point to its private registry URL or the workload pod will try to pull from Quay.io.
The source repository is quay.io/krkn-chaos/krkn-hub-multiarch. Its tags include scenarios such as node-cpu-hog and pod-scenarios, and helper images such as workload-krkn-hog and workload-krkn-tools. Choose the tags required by the scenarios you plan to run.
Mirror directly between registries
On a machine that can reach Quay.io and your private registry, install Cosign and authenticate to the destination registry. The example mirrors node-cpu-hog and its workload-krkn-hog helper into the same repository. Replace the destination with your own registry host and repository.
cosign copy carries the image and its associated signature artifacts. Repeat it for every scenario and workload tag you need. Preserve the tag names so the private registry’s scenario list and the IMAGE override use the same names as the source. Do not use an image-only copy as a substitute.
For a fully disconnected registry, save the signed images on a connected machine, transfer the resulting directories through your approved transfer path, and load them into the destination registry:
# Connected machineSOURCE=quay.io/krkn-chaos/krkn-hub-multiarch
cosign save --dir ./node-cpu-hog "$SOURCE:node-cpu-hog"cosign save --dir ./workload-krkn-hog "$SOURCE:workload-krkn-hog"# After transferring both directories to a machine with access to the private registryMIRROR=registry.example.com/chaos/krkn-hub-multiarch
cosign login registry.example.com
cosign load --dir ./node-cpu-hog "$MIRROR:node-cpu-hog"cosign load --dir ./workload-krkn-hog "$MIRROR:workload-krkn-hog"
cosign save and cosign load include the associated signatures; a container image tarball alone does not.
Verify the mirror
On a connected staging machine, obtain the Krkn Cosign public key from the Krknctl v0.14.2-beta revision used by Operator 1.1.0 through a trusted channel, then verify both destination images:
Krkn uses key-based signatures, so the --insecure-ignore-tlog=true option skips the transparency-log check while Cosign still checks the public key and signed image digest. If verification fails, inspect the destination registry’s support for Cosign signature artifacts and copy the signed image again. Do not re-sign a changed image with an unrelated key: the Operator trusts the Krkn key.
Configure the Operator and workload override
In Registry Management, create a private registry with Registry URLregistry.example.com and Scenario Repositorychaos/krkn-hub-multiarch. Configure credentials, TLS, and group visibility as needed.
In Run Scenarios, select that registry and choose node-cpu-hog. The Operator resolves and verifies the mirrored scenario image before running it.
In the scenario’s parameter form, override IMAGE with registry.example.com/chaos/krkn-hub-multiarch:workload-krkn-hog. This is the helper pod image used by node-cpu-hog; selecting the private scenario registry does not rewrite this parameter automatically.
Other scenarios may launch different helper images. For example, network-chaos uses workload-krkn-tools, and pod-network-filter uses workload-krkn-network-chaos. Mirror the matching workload-* tag with Cosign and set that scenario’s IMAGE parameter to its private URL. Consult the selected scenario’s parameters and the source tag list for the exact image.
If a run does not start
Scenario missing from the list: confirm its tag exists in the configured scenario repository and the user can access that registry.
Unsigned or untrusted scenario: confirm the image and signature were copied together, then verify the destination tag with the Krkn public key. A changed image digest invalidates the original signature.
Workload pod cannot pull its image: check the IMAGE override, the target cluster’s access to the private registry, and its pull credentials and TLS configuration.
Configure target providers that integrate with external cluster management platforms. The provider configuration interface adapts dynamically based on the selected provider.
This walkthrough is retained with v1.1.0 documentation and may show an earlier interface.
Supported Providers
Provider
Description
ACM / OCM
Discover and synchronize managed Kubernetes clusters through Red Hat Advanced Cluster Management or Open Cluster Management
INFO
The provider configuration interface is extensible. New integration operators can add their configuration panels here. Cloud credentials are managed separately; see the section below.
Cloud Provider Configuration
Krkn Operator supports cloud scenarios that use saved provider credentials. Administrators create and manage these credentials through Cloud Credentials Management. Users can select credentials their group is allowed to access.
The following scenarios interact with provider infrastructure and need the corresponding cloud or bare-metal credentials:
Scenario
Why Cloud Provider Is Required
node-scenarios
Stops, terminates, or reboots nodes via the cloud provider API
node-scenarios-bm
Controls bare metal nodes via BMC/IPMI credentials
power-outages
Shuts down and restarts the entire cluster through the cloud provider
zone-outages
Simulates availability zone failures by manipulating cloud network resources
INFO
Cloud credentials are stored as Kubernetes Secrets and injected into scenario pods through SecretKeyRef. Users must have access to the saved credential through their group. For setup and provider-specific fields, see Cloud Credentials Management.
2.6 - Elasticsearch Management
Configure saved Elasticsearch endpoints for platform-wide observability
Administrators can configure and save Elasticsearch endpoints that users can reference when executing chaos scenarios. This enables centralized observability configuration without requiring users to manually enter connection details.
This walkthrough is retained with v1.1.0 documentation and may show an earlier interface.
Overview
Elasticsearch integration allows krkn scenarios to index execution metrics, logs, and telemetry data for analysis and historical tracking. Instead of requiring each user to configure Elasticsearch details manually, admins can:
Pre-configure Elasticsearch endpoints with connection details
Save named configurations for reuse across all scenarios
Control which Elasticsearch endpoints are available platform-wide
Users can then select from the saved Elasticsearch configurations when setting global parameters during scenario execution.
INFO
Users can select saved Elasticsearch configurations but cannot add new ones. Only admins have permission to create, edit, or delete Elasticsearch endpoints.
Adding an Elasticsearch Endpoint
Navigate to Administration > Elasticsearch Management
Click Add Elasticsearch
Configure the following details:
Field
Description
Required
Name
Friendly name for this configuration (e.g., “Production ES”, “Dev Cluster”)
Index name or pattern for storing krkn data (e.g., krkn-chaos-*)
Yes
Username
Authentication username (if required)
No
Password
Authentication password (if required)
No
Verify SSL
Whether to verify SSL certificates (toggle)
Yes
Click Save to add the configuration to the saved list
Managing Saved Configurations
View Saved Elasticsearch Endpoints
The Elasticsearch Management page displays all saved configurations:
Name: Friendly identifier shown to users
URL: Elasticsearch endpoint
Index: Target index pattern
Actions: Edit or Delete options
Edit an Endpoint
Click the Edit icon next to the saved configuration
Modify any field (Name, URL, Index, credentials, SSL verification)
Click Save to update
INFO
Editing a saved Elasticsearch configuration affects all scenarios currently using it. Changes apply to future scenario executions immediately.
Delete an Endpoint
Click the Delete icon next to the saved configuration
Confirm the deletion
INFO
Deleting an Elasticsearch configuration does not affect running scenarios, but it will no longer be available for selection in new scenario executions.
How Users Select Elasticsearch
When users configure global parameters for a scenario or workflow, they can:
Expand the Global parameters section
Locate the Elasticsearch parameter
Click the dropdown to view all saved Elasticsearch configurations
Select an Elasticsearch endpoint by name (e.g., “Production ES”)
The selected configuration automatically applies the admin-defined connection details (URL, index, credentials) to the scenario execution.
Users cannot:
Add new Elasticsearch endpoints from the scenario configuration interface
Edit existing saved configurations
View sensitive details like passwords (only admins can see/edit credentials)
Users can:
Choose from the dropdown list of saved Elasticsearch endpoints
Opt not to use Elasticsearch (by leaving the parameter unset)
Best Practices
Naming Conventions
Use descriptive names that indicate the purpose or environment:
✅ Production Observability
✅ Staging Metrics
✅ Dev Team Shared ES
❌ ES1, Elasticsearch, Test
Security
Use dedicated credentials for krkn with limited write permissions to specific indices
Enable SSL verification for production endpoints
Restrict index patterns to prevent accidental data overwrites (e.g., krkn-* not *)
Index Patterns
Use time-based or scenario-based index naming:
krkn-chaos-{YYYY-MM-DD} — daily indices for easy retention management
krkn-scenarios-* — scenario-specific index pattern
krkn-{environment}-* — environment-specific indices
Administrators can configure and save cloud provider credentials that users select when running cloud-dependent chaos scenarios. Credentials are stored as Kubernetes Secrets and injected into scenario pods via SecretKeyRef — plaintext cloud secrets never appear in the Custom Resource or pod environment values.
This walkthrough is retained with v1.1.0 documentation and may show an earlier interface.
Overview
Many krkn scenarios need cloud API access (for example node stop/start, zone outages, or power outages). Instead of asking every user to paste access keys into scenario parameters, admins can:
Pre-configure named credentials for each supported cloud provider
Control visibility so credentials are available to everyone or only to selected groups
Reuse the same credential across single runs and Chaos Studio workflows
Users then select a saved credential when configuring a scenario. Matching cloud parameter fields are filled from the Secret and locked in the UI.
INFO
Users can select saved cloud credentials they are allowed to see, but cannot create, edit, or delete them. Only admins manage credentials.
Supported Providers
Provider
Typical use
AWS
EC2 / zone / node scenarios using AWS APIs
GCP
GCE-backed node and zone scenarios
Azure
Azure node and zone scenarios
OpenStack
OpenStack compute outage scenarios
Baremetal
IPMI/BMC power and node scenarios
VMware
vSphere-backed node scenarios
IBM Cloud
IBM Cloud infrastructure scenarios
When a credential is applied, the platform also sets CLOUD_TYPE to the value expected by krkn-hub for that provider:
Provider
CLOUD_TYPE value
AWS
aws
GCP
gcp
Azure
azure
OpenStack
openstack
Baremetal
bm
VMware
vmware
IBM Cloud
ibmcloud
Adding a Cloud Credential
Navigate to Settings > Cloud Credentials
Click Create Cloud Credential (or the add action)
Configure the common fields, then the provider-specific fields below
Click Save to create the credential
Common fields
Field
Description
Required
Name
Unique credential name (used when users select it). Lowercase alphanumeric and hyphens
Yes
Provider
Cloud provider (cannot be changed after create)
Yes
Description
Short note for operators
No
Visibility
Everyone or Group-based access
Yes
Provider-specific fields
AWS
Field
Required
Access Key ID
Yes
Secret Access Key
Yes
Default Region
Yes
GCP
Field
Required
Service Account JSON (base64-encoded)
Yes
GCP credentials are mounted into the scenario pod as a file. The operator also sets GOOGLE_APPLICATION_CREDENTIALS to that mount path.
Azure
Field
Required
Tenant ID
Yes
Client ID
Yes
Client Secret
Yes
Subscription ID
Yes
OpenStack
Field
Required
Auth URL
Yes
Username
Yes
Password
Yes
Project Name
Yes
Domain Name
No (optional; injected only when present on the Secret)
Baremetal (IPMI/BMC)
Field
Required
BMC User
Yes
BMC Password
Yes
BMC Address
Yes
VMware
Field
Required
vSphere IP
Yes
vSphere Username
Yes
vSphere Password
Yes
IBM Cloud
Field
Required
IBM Cloud URL
Yes
API Key
Yes
INFO
These credential names are reserved and cannot be used: available, aws, gcp, azure, openstack, baremetal, vmware, ibmcloud.
Visibility
Each credential has a visibility setting that controls who can use it:
Visibility
Description
Everyone
All users on the platform can select this credential
Group-based
Only users belonging to the assigned groups can see and use this credential
INFO
Partial updates (for example rotating a region or key) preserve existing access labels unless you explicitly change visibility or group membership.
Managing Saved Credentials
View Credentials
The Cloud Credentials page lists saved configurations with:
Name: Identifier shown in scenario selection
Provider: Cloud provider type
Access: Everyone or assigned groups
Actions: Edit or Delete
Admins can filter the list by name, provider, and access type.
Edit a Credential
Click Edit next to the credential
Update description, visibility, groups, or provider secret fields
Click Save
The provider cannot be changed after creation — create a new credential if you need a different provider. Secret values are never shown after creation. Leave a secret field empty to keep the existing value; provide a new value only when rotating credentials.
INFO
Editing a saved credential affects future scenario executions that select it. Already running pods keep the Secret values they started with.
Delete a Credential
Click Delete next to the credential
Confirm the deletion
INFO
Deleting a credential removes it from selection for new runs. It does not cancel jobs that already started with that credential.
How Credentials Are Injected
When a run references a cloud credential:
The console (and API) store only the credential name on the run (cloudCredentialRef)
Cloud-related environment variables from the request are stripped so plaintext keys cannot land in the Custom Resource
The operator loads the credential Secret and injects values into the scenario pod using SecretKeyRef (and file mounts where required, such as GCP service-account JSON)
Users cannot:
Create or edit credentials from the scenario wizard
View secret values for saved credentials
Select credentials outside their visibility (group membership)
Users can:
Choose from the credentials available to them
Clear the selection and enter parameters manually when no credential is needed
The Krkn Operator includes a built-in backup and restore feature accessible from the web console. Backups contain portable operator configuration for:
Admin settings
Cluster targets
Users and groups
Private registries
Elasticsearch configuration
The backup also includes the operator-managed secrets required for these settings.
This feature is not a complete Kubernetes or cluster backup. It does not include runtime registration objects, ACM integration data, uploaded files, file metadata, or the JWT signing key.
Creating a Backup
Navigate to the Backup & Restore card in the console.
Click Download Backup.
The operator creates a compressed .tar.gz archive and saves it to your local machine.
INFO
Security: Backup archives contain sensitive configuration data, including target connection details and operator-managed credentials. Store backups securely and restrict access to authorized administrators.
Restoring from a Backup
Open the Backup & Restore card in the console.
Click Upload & Restore.
Select a previously downloaded .tar.gz backup archive and confirm the restore.
Monitor the restore progress from the same page.
Only one restore can run at a time. The maximum upload size is 100 MB.
The restore runs asynchronously. Existing resources are updated with the corresponding configuration from the backup, while resources that do not exist are created. Resources absent from the backup are not deleted.
After the restore completes, the operator refreshes the connectivity status of restored target clusters.
INFO
Restoring a backup changes the current operator configuration. Before restoring an older archive, create a backup of the current state.
Restore Status
Restore status is available from the same page and can be:
In progress
Completed
Failed
Restore job status is held in memory and is not persisted across operator restarts.
3 - Usage
Operational features for running chaos experiments
Usage
The operational features of Krkn Operator are available to all users, scoped by the permissions assigned to their group. This section covers the day-to-day workflow: running scenarios, designing workflows, monitoring jobs and managing files.
Users only see data from their own group. A cluster-wide indicator shows the names of currently running scenarios across all groups, but without details.
Features
Jobs — Monitor and inspect scenario execution results
Cluster Terminal — Explore target clusters with read-only commands
Run Scenarios — Execute single chaos scenarios (including selecting saved cloud credentials)
Chaos Studio — Design visual workflows with serial and parallel execution
The Jobs page is the platform home screen. It lists scenario executions available to your group, with status updates and access to logs and results.
This walkthrough is retained with v1.1.0 documentation and may show an earlier interface.
Run Types
Single Run
A single scenario execution on one or more target clusters. For each run you can inspect:
Execution outcome (success, failure)
Console logs of the krkn pod that executed the scenario
Replay & Edit
Single runs can be replayed to re-execute the same scenario with the same configuration. You can also edit the details before replaying to modify:
Target cluster(s)
Scenario parameters
Configuration values
Run Name
This allows you to quickly iterate on chaos experiments or run the same test across different environments.
Graph Run (Chaos Studio)
A workflow execution created through Chaos Studio. The execution is displayed as a graph where each node represents an individual krkn scenario. For each node you can inspect the outcome and logs independently.
Graph runs can include a Resiliency Score — a calculated metric based on PromQL queries executed during the workflow. This score measures how well the target application withstood the chaos experiment.
INFO
Resiliency Score is a key differentiating feature of Krkn Operator. It transforms chaos experiments from pass/fail tests into quantitative resilience measurements. See Chaos Studio for details on configuring it.
Visibility & Permissions
Only jobs from your own group are displayed
A cluster-wide tip shows the names of scenarios currently running across all groups (no details)
Cancelling or removing jobs requires Cancel permission
Use the guided wizard to execute a chaos scenario on one or more target clusters in parallel.
This walkthrough is retained with v1.1.0 documentation and may show an earlier interface.
Execution Flow
1. Select Target Clusters
Choose one or more clusters to run the scenario on. All selected clusters execute the scenario simultaneously.
2. Select Registry
Choose the container registry for scenario images:
Registry
Description
Public (Quay.io)
Default registry with all community scenarios
Private
Configured by admin, only mirrored scenarios available. Visibility controlled by group permissions
For a disconnected target, follow Mirror Signed Images before selecting a private registry. Scenario signatures and any helper workload images must be available in the mirror.
3. Select Scenario
Browse and select a chaos scenario from the chosen registry.
4. Configure Parameters
Each scenario defines its own parameter set, divided into three categories:
Category
Description
Mandatory
Must be configured before execution. Not all scenarios have them
Optional
Fine-grained control over scenario behavior (label selectors, timing, filters)
Global
Framework-level settings (Elasticsearch, Prometheus, Cerberus integration). Applied only if modified from defaults
When a scenario starts a helper workload, set its IMAGE parameter to the mirrored workload-* image URL. Selecting a private scenario registry does not change the workload image automatically. See Mirror Signed Images for an example.
Elasticsearch in Global Parameters
When configuring Global parameters, you can select a saved Elasticsearch endpoint to index scenario metrics and telemetry:
Expand the Global parameters section
Locate the Elasticsearch dropdown
Select from available saved configurations (configured by your admin)
INFO
You can select from saved Elasticsearch configurations but cannot add new ones. Contact your administrator to add additional Elasticsearch endpoints.
Selecting an Elasticsearch configuration automatically applies connection details (URL, index, credentials) without requiring manual input.
Load Cloud Credential
When a scenario declares cloud-related fields (CLOUD_TYPE, AWS_*, AZURE_*, and similar), a Load Cloud Credential section appears:
Open Load Cloud Credential
Select a saved credential from the dropdown (configured by your admin)
Matching cloud fields become read-only and show masked placeholders (••••••••)
Fields belonging to other cloud providers are hidden from the form
Continue configuring non-cloud parameters as usual
The dropdown only lists credentials your group can access.
INFO
You can select from saved cloud credentials but cannot create new ones. Contact your administrator to add or rotate cloud credentials.
Selecting a credential stores only the credential name on the run (cloudCredentialRef). The console and API strip plaintext cloud environment variables from the payload so they cannot land in the Custom Resource. The operator injects secret values into the scenario pod via SecretKeyRef.
5. Mount Files
Optionally attach configuration files previously uploaded through File Management. Files are available via a select dropdown.
6. Preview
Review a summary of all configured parameters before execution.
7. Run
Launch the scenario. You are redirected to the Jobs page where you can monitor the execution in real time.
3.4 - Chaos Studio
Design visual chaos workflows with serial and parallel execution
A visual drag-and-drop editor for designing complex chaos workflows. Build graphs of scenarios that execute in series or parallel, and measure application resilience with the Resiliency Score.
This walkthrough is retained with v1.1.0 documentation and may show an earlier interface.
Creating and Saving Workflows
Creating a New Workflow
Navigate to Chaos Studio from the main navigation
Click the “New Workflow” button to start a blank canvas
Give your workflow a meaningful name that describes its purpose
Adding Nodes
Click the “Add Node” button or drag from the node palette
Position nodes on the canvas by dragging them
Configure each node by clicking on it and selecting:
Registry: Choose your scenario source
Scenario: Select the chaos scenario to run
Parameters: Set mandatory and optional parameters
Cloud credential: Optionally load a saved cloud credential for cloud-dependent scenarios
Files: Mount any required configuration files
Connecting Nodes
Click and drag from a node’s output port to another node’s input port to create dependencies
Serial execution: connect nodes in a chain (A → B → C)
Parallel execution: connect one node to multiple targets (A → B and A → C)
Saving Your Workflow
Click the “Save” button in the top toolbar
The workflow is automatically saved to your workspace
Saved workflows appear in the Chaos Studio workflow list
You can edit saved workflows by selecting them from the list
Visual Editor
Nodes represent individual krkn scenarios
Arrows define execution order — connect nodes to create dependencies
Serial execution: chain nodes sequentially with single arrows
Parallel execution: branch from one node to multiple targets
Drag and drop to arrange the workflow visually
Node Configuration
Each node is configured exactly like a single scenario: select a registry, choose a scenario, set mandatory/optional/global parameters, optionally load a cloud credential, and mount files.
Global Parameters in Workflows
When configuring global parameters for workflow nodes:
Elasticsearch: Select from saved admin-configured endpoints to index metrics across the entire workflow
Prometheus: Configure Prometheus integration for metric collection
Cerberus: Enable cluster health monitoring during scenario execution
INFO
Configure Elasticsearch in global parameters to track metrics across all nodes in a workflow. This provides centralized observability for complex multi-scenario executions.
Cloud fields for that provider become masked; other providers’ fields are hidden
Each node can select its own credential (for example one AWS credential on a zone-outage node and a BMC credential on a power-outage node).
INFO
You can select credentials available to your group but cannot create new ones from Chaos Studio. Contact your administrator to add credentials.
Clone: duplicate a configured node to repeat the same scenario multiple times within the workflow.
Validation
The editor validates the workflow before execution:
Configured nodes: green arrows and connections — ready to execute
Unconfigured nodes: red arrows and red node border — must be configured before the workflow can run
Only fully configured nodes can be connected and executed.
Resiliency Score
INFO
Resiliency Score quantifies how well your application withstood a chaos workflow. Instead of a simple pass/fail, you get a numeric score based on real application metrics.
Enable the Resiliency Score on a workflow to measure application resilience:
Enable the resiliency score option on the workflow
Mount a PromQL file — a special file containing PromQL queries uploaded via File Management
Queries execute during the workflow and their results contribute to the final score
View the score in the Jobs page alongside the graph run results
The PromQL file defines which metrics to evaluate (latency, error rate, throughput, etc.) and their expected thresholds. The score reflects how closely the application maintained its expected behavior under chaos.
3.5 - File Management
Upload and manage reusable configuration files
File Management
Create and manage text-based configuration files for scenario executions and Chaos Studio workflows.
This walkthrough is retained with v1.1.0 documentation and may show an earlier interface.
Adding Files
Create a file by pasting its contents into the text input box. The console does not upload files from your device.
Mount as PromQL query file for resiliency score calculation
3.6 - Job Categories & Resiliency Score Report
Group scenario runs with categories and compare their resiliency scores
Job Categories & Resiliency Score Report
Use categories to organize scenario runs, then compare their resiliency scores over time in the report.
This walkthrough is retained with v1.1.0 documentation and may show an earlier interface.
Create a Category
Open Categories from the left navigation menu.
Select Create Category.
Enter a name and choose a color in the color picker.
Set the category visibility and create it.
Categories help you group related runs for reporting. Choose a color to identify the category in the console.
Assign a Category to Runs
Open Jobs and locate a scenario run.
Open the run’s Actions menu and select Category.
Select one or more categories to assign them to the run.
Repeat for other runs you want to compare.
The category is saved on the run and can be used as a filter in the report.
For example, assign score-category to pod-scenarios-99629e65 and pod-scenarios-aedd3317 to compare their resiliency scores together.
View the Resiliency Score Report
Open Resiliency History from the left navigation menu.
Select one or more categories and target clusters.
Select Apply filters to display the report.
The report plots resiliency scores over time. In Separate configuration groups mode, runs with the same settings appear in the same chart; runs with different settings appear in separate charts. This makes it easier to compare like-for-like runs while keeping different configurations distinct.
Combine Configurations by Category
Select Combine configurations by category to put runs from the selected category into a single chart, including runs with different settings. This helps compare scores across heterogeneous configurations.
When the report includes more than one cluster, each cluster is shown as a separate line so you can compare results across clusters. The report can also be exported as a PDF.
4 - Releases & Roadmap
Krkn Operator release strategy, roadmap, and compatibility matrix
This document outlines the Krkn Operator release strategy, roadmap, and how the community prioritizes features, bug fixes, and security updates.
Elasticsearch views (summary charts, metric views, and alerts)
Signed krkn-hub images
Operator Backup/Restore
Krkn AI
Release Cadence
Krkn Operator aims to deliver feature releases every 6–8 weeks. These releases may include new features, enhancements, usability improvements, and other roadmap items driven by community feedback and contributor activity.
The release cadence is intended to balance rapid delivery of value to users while maintaining stability and quality across supported environments.
Feature Requests and Roadmap
Community feedback plays a key role in shaping the future of Krkn Operator.
Feature requests submitted through GitHub issues, enhancement proposals, community discussions, and feedback forms are reviewed regularly and considered as part of the project roadmap.
Features are prioritized based on:
Community interest
User impact
Project goals
Contributor capacity
Planned enhancements and major initiatives will be communicated through project documentation, GitHub, community meetings, and release notes.
Bug Fixes and Security Updates
Bug fixes and security updates are prioritized independently of the feature release cadence.
Critical security vulnerabilities and high-impact issues may be addressed through patch or minor releases outside the normal release cycle when necessary.
Community contributions for bug fixes, testing, and validation are always welcome.
Release Notes
Each release includes documentation for:
New features and enhancements
Bug fixes
Security updates
Compatibility updates
Breaking changes and deprecations
Upgrade or migration guidance, when applicable
Any compatibility changes, breaking changes, or upgrade considerations will be documented as part of the release notes to help users plan upgrades and understand changes between releases.
Getting Involved
The Krkn community welcomes feedback, feature requests, bug reports, testing, and code contributions. Community participation helps shape the roadmap and improve the overall user experience.
Supported platforms and ACM/OCM versions for Krkn Operator
OCM/ACM Compatibility
Krkn Operator supports multi-cluster chaos testing on Kubernetes and OpenShift. Cluster discovery can be manual or automated through ACM/OCM integration.
INFO
Multi-cluster works without ACM/OCM. Clusters registered manually through the web console have the exact same capabilities as clusters discovered via ACM. The integration is optional — it adds automatic discovery, not functionality.
Platform Support
Platform
Status
Kubernetes 1.19+
Supported
OpenShift 4.x
Supported
ACM Compatibility
The following versions of Red Hat Advanced Cluster Management have been tested and validated with Krkn Operator:
ACM Version
Status
2.14
Tested
2.15
Tested
2.16
Tested
OCM Compatibility
The following versions of Open Cluster Management have been tested and validated:
OCM Version
Status
1.1.0
Tested
1.2.0
Tested
1.3.1
Tested
INFO
Older ACM versions may work but are not actively tested. We recommend running one of the validated versions above.
How ACM Integration Works
When ACM is enabled (--set acm.enabled=true at install time), Krkn Operator deploys a dedicated component that connects to the ACM hub and automatically discovers managed clusters. Discovered clusters appear in the same cluster pool as manually registered targets — users select from both without distinction.