Installation
Install Krkn Operator using Helm
Installation Admin
Deploy Krkn Operator on Kubernetes or OpenShift using Helm.
This walkthrough is retained with v1.0.0 documentation and may show an earlier interface.
Prerequisites
- Kubernetes 1.19+ or OpenShift 4.x
- Helm 3.0+
Quick Start
Helm chart version for this release: 1.0.0
helm install krkn-operator oci://quay.io/krkn-chaos/charts/krkn-operator \
--version 1.0.0 \
--namespace krkn-operator-system \
--create-namespace
Verify:
kubectl get pods -n krkn-operator-system -l app.kubernetes.io/name=krkn-operator
Access the console (local):
kubectl port-forward -n krkn-operator-system svc/krkn-operator-console 3000:3000
Production Installation
Choose the method that matches your environment:
| Method | External Access |
|---|---|
| Kubernetes | Gateway API (recommended) or Ingress |
| OpenShift | Routes (native) |
Install with a custom values.yaml:
helm install krkn-operator oci://quay.io/krkn-chaos/charts/krkn-operator \
--version 1.0.0 \
--namespace krkn-operator-system \
--create-namespace \
-f values.yaml
Kubernetes with Gateway API
console:
enabled: true
gateway:
enabled: true
gatewayName: krkn-gateway
hostname: krkn.example.com
path: /
pathType: PathPrefix
Kubernetes with Ingress
console:
enabled: true
ingress:
enabled: true
className: nginx
hostname: krkn.example.com
tls:
- secretName: krkn-tls
hosts:
- krkn.example.com
OpenShift with Routes
console:
enabled: true
route:
enabled: true
hostname: krkn.apps.cluster.example.com
tls:
enabled: true
termination: edge
insecureEdgeTerminationPolicy: Redirect
INFO
OpenShift Security: The chart automatically detects OpenShift and configures the required Security Context Constraints (SCC). No manual SCC configuration is needed.
OCM/ACM Integration
Enable automatic cluster discovery through Open Cluster Management (OCM) or Red Hat Advanced Cluster Management (ACM):
See the OCM/ACM Compatibility page for tested versions.
helm install krkn-operator oci://quay.io/krkn-chaos/charts/krkn-operator \
--version 1.0.0 \
--namespace krkn-operator-system \
--create-namespace \
--set acm.enabled=true
Upgrade
helm upgrade krkn-operator oci://quay.io/krkn-chaos/charts/krkn-operator \
--version 1.0.0 \
--namespace krkn-operator-system \
-f values.yaml
Uninstall
helm uninstall krkn-operator --namespace krkn-operator-system
INFO
CRDs are preserved after uninstall to prevent data loss. To remove them manually:
kubectl delete crds -l app.kubernetes.io/name=krkn-operator
Complete values.yaml Reference
Click to expand the full values.yaml reference
namespaceOverride: ""
operator:
image: quay.io/krkn-chaos/krkn-operator:latest
pullPolicy: IfNotPresent
enabled: true
replicaCount: 1
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
dataProvider:
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 200m
memory: 256Mi
service:
type: ClusterIP
port: 8080
grpcPort: 50051
logging:
level: info
format: json
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
nodeSelector: {}
tolerations: []
affinity: {}
extraEnv: []
dataProvider:
image: quay.io/krkn-chaos/data-provider:latest
acm:
enabled: false
image: quay.io/krkn-chaos/krkn-operator-acm:latest
replicaCount: 1
config:
secretName: "application-manager"
service:
port: 8080
grpcPort: 50051
logging:
level: info
format: json
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi
nodeSelector: {}
tolerations: []
affinity: {}
console:
enabled: true
image: quay.io/krkn-chaos/console:latest
replicaCount: 1
service:
type: ClusterIP
port: 3000
nodePort: null
ingress:
enabled: false
className: nginx
hostname: krkn.example.com
annotations: {}
tls: []
gateway:
enabled: false
gatewayName: krkn-gateway
gatewayNamespace: ""
sectionName: ""
hostname: krkn.example.com
path: /
pathType: PathPrefix
annotations: {}
route:
enabled: false
hostname: ""
tls:
termination: edge
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 200m
memory: 256Mi
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
nodeSelector: {}
tolerations: []
affinity: {}
pullSecrets: []
auth:
jwtSecret: ""
jwtExpiryHours: 24
rbac:
create: true
serviceAccount:
create: true
name: ""
annotations: {}
crds:
keep: true
monitoring:
enabled: false
service:
port: 8443
serviceMonitor:
enabled: false
interval: 30s
networkPolicy:
enabled: false
ingress: []
egress: []
updateStrategy:
type: RollingUpdate
podDisruptionBudget:
enabled: false
minAvailable: 1
commonLabels: {}
commonAnnotations: {}
nameOverride: ""
fullnameOverride: ""