This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Installation

Install krkn-operator using Helm

    This guide walks you through installing krkn-operator using Helm, the recommended installation method.

    Prerequisites

    • Kubernetes 1.19+ or OpenShift 4.x
    • Helm 3.0+
    • A Kubernetes cluster (kind, minikube, or production cluster)

    Quick Start (kind/minikube)

    Perfect for testing and local development, this minimal installation gets krkn-operator running quickly on kind or minikube.

    Latest Version: loading…

    The version number is automatically updated in the commands below. For other available versions, see the releases page.

    1. Install krkn-operator

    helm install krkn-operator oci://quay.io/krkn-chaos/charts/krkn-operator --version <VERSION>
    

    This installs krkn-operator with default settings in the current namespace.

    3. Verify Installation

    kubectl get pods -l app.kubernetes.io/name=krkn-operator
    

    Expected output:

    NAME                              READY   STATUS    RESTARTS   AGE
    krkn-operator-xxxxxxxxx-xxxxx     2/2     Running   0          1m
    

    4. Access the Console (Optional)

    For local testing, use port-forwarding to access the web console:

    kubectl port-forward svc/krkn-operator-console 3000:3000
    

    Then open http://localhost:3000 in your browser.


    Production Installation

    For production deployments, you’ll want to customize the installation with a values.yaml file to ensure high availability, proper resource limits, monitoring integration, and secure external access.

    When to Use Each Installation Method

    Choose the installation method that matches your environment and requirements:

    MethodUse WhenKey Features
    Quick StartTesting on kind/minikube, local development, POCMinimal configuration, port-forward access, no HA
    Production (Kubernetes)Running on standard Kubernetes (EKS, GKE, AKS, self-managed)Ingress for external access, HA setup, resource limits, monitoring
    Production (OpenShift)Running on OpenShift/OKD clustersOpenShift Routes instead of Ingress, enhanced security contexts, HA setup

    The main differences between production installations are:

    • Kubernetes can use either:
      • Gateway API (recommended) - Modern routing standard with powerful features
      • Ingress (legacy) - Traditional method, still widely supported
    • OpenShift uses Routes for external access (native OpenShift feature, no additional controller needed)
    • Production configurations add replica counts, resource limits, pod disruption budgets, and monitoring compared to Quick Start

    All production methods support the same chaos scenarios and core functionality—the choice depends on your platform and infrastructure preferences.

    Installation on Kubernetes

    Kubernetes clusters can expose the web console using either Gateway API (recommended) or Ingress (legacy).

    Gateway API is the modern successor to Ingress and provides more powerful and flexible routing capabilities.

    Prerequisites:

    • Gateway API CRDs installed in your cluster (installation guide)
    • A Gateway resource already deployed (usually managed by cluster admins)

    Create a values.yaml file:

    # Production values for Kubernetes with Gateway API
    
    # Enable web console with Gateway API
    console:
      enabled: true
      gateway:
        enabled: true
        gatewayName: krkn-gateway  # Name of your existing Gateway
        gatewayNamespace: ""  # Optional: if Gateway is in a different namespace
        hostname: krkn.example.com
        path: /
        pathType: PathPrefix
    
    # Operator configuration
    operator:
      replicaCount: 2
      resources:
        requests:
          cpu: 100m
          memory: 128Mi
        limits:
          cpu: 500m
          memory: 512Mi
      logging:
        level: info
        format: json
    
    # High availability
    podDisruptionBudget:
      enabled: true
      minAvailable: 1
    
    # Monitoring (if using Prometheus)
    monitoring:
      enabled: true
      serviceMonitor:
        enabled: true
        interval: 30s
    

    Note: Gateway API assumes you have a Gateway resource already configured in your cluster. The chart creates only the HTTPRoute that attaches to that Gateway.

    Option 2: Using Ingress (Legacy)

    If your cluster doesn’t support Gateway API yet, you can use traditional Ingress:

    # Production values for Kubernetes with Ingress
    
    # Enable web console with Ingress
    console:
      enabled: true
      ingress:
        enabled: true
        className: nginx  # or your ingress controller
        hostname: krkn.example.com
        annotations:
          cert-manager.io/cluster-issuer: letsencrypt-prod
        tls:
          - secretName: krkn-tls
            hosts:
              - krkn.example.com
    
    # Operator configuration
    operator:
      replicaCount: 2
      resources:
        requests:
          cpu: 100m
          memory: 128Mi
        limits:
          cpu: 500m
          memory: 512Mi
      logging:
        level: info
        format: json
    
    # High availability
    podDisruptionBudget:
      enabled: true
      minAvailable: 1
    
    # Monitoring (if using Prometheus)
    monitoring:
      enabled: true
      serviceMonitor:
        enabled: true
        interval: 30s
    

    Install with your custom values:

    helm install krkn-operator oci://quay.io/krkn-chaos/charts/krkn-operator \
      --version <VERSION> \
      --namespace krkn-operator-system \
      --create-namespace \
      -f values.yaml
    

    Installation on OpenShift

    OpenShift uses Routes instead of Ingress. The Helm chart automatically handles OpenShift-specific security requirements (SCC configuration, RBAC permissions).

    Create an OpenShift-specific values.yaml:

    # Production values for OpenShift
    
    # Enable web console with Route
    console:
      enabled: true
      route:
        enabled: true
        hostname: krkn.apps.cluster.example.com  # Change to your cluster's app domain
        tls:
          enabled: true
          termination: edge
          insecureEdgeTerminationPolicy: Redirect
    
    # Operator configuration
    operator:
      replicaCount: 2
      resources:
        requests:
          cpu: 100m
          memory: 128Mi
        limits:
          cpu: 500m
          memory: 512Mi
      logging:
        level: info
        format: json
    
    # High availability
    podDisruptionBudget:
      enabled: true
      minAvailable: 1
    
    # Monitoring (if Prometheus Operator is installed)
    monitoring:
      enabled: true
      serviceMonitor:
        enabled: true
        interval: 30s
    

    Install on OpenShift:

    helm install krkn-operator oci://quay.io/krkn-chaos/charts/krkn-operator \
      --version <VERSION> \
      --namespace krkn-operator-system \
      --create-namespace \
      -f values-openshift.yaml
    

    Advanced Configuration Options

    Enable ACM Integration

    To enable Red Hat Advanced Cluster Management (ACM) / Open Cluster Management (OCM) integration:

    acm:
      enabled: true
      replicaCount: 1
      config:
        secretName: "application-manager"  # ACM managed clusters secret (auto-created by ACM)
      resources:
        requests:
          cpu: 100m
          memory: 128Mi
        limits:
          cpu: 500m
          memory: 512Mi
      logging:
        level: info
        format: json
    

    Install with ACM enabled (Kubernetes):

    helm install krkn-operator oci://quay.io/krkn-chaos/charts/krkn-operator \
      --version <VERSION> \
      --namespace krkn-operator-system \
      --create-namespace \
      --set acm.enabled=true
    

    Install with ACM enabled (OpenShift with Route):

    helm install krkn-operator oci://quay.io/krkn-chaos/charts/krkn-operator \
      --version <VERSION> \
      --namespace krkn-operator-system \
      --create-namespace \
      --set acm.enabled=true \
      --set console.route.enabled=true \
      --set console.route.hostname=krkn.apps.cluster.example.com