Helm chart for deploying the Hybrid Ingestion Runner.
- Hybrid Ingestion Runner deployment
- ServiceMonitor for Prometheus metrics
- PrometheusRules for alerting
- Grafana Dashboard using Grafana Operator
- ECR Registry Helper for AWS authentication
- Optional Argo Workflows integration
- OpenShift / ROSA support
- ROSA or OpenShift cluster with
ocCLI configured - Helm 3 installed
- AWS CLI configured with credentials that can authenticate to ECR
helm repo add argo https://argoproj.github.io/argo-helm
helm dependency build ./charts/hybrid-ingestion-runneroc new-project hybrid-ingestion-runnerECR tokens expire after 12 hours. Create the secret manually using the AWS CLI:
NAMESPACE="hybrid-ingestion-runner"
AWS_REGION="eu-west-1"
AWS_ACCOUNT="118146679784"
ECR_REGISTRY="${AWS_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com"
kubectl create secret docker-registry omd-registry-credentials \
--docker-server="$ECR_REGISTRY" \
--docker-username=AWS \
--docker-password="$(aws ecr get-login-password --region $AWS_REGION)" \
--namespace="$NAMESPACE"To refresh the token before it expires (safe to re-run):
kubectl create secret docker-registry omd-registry-credentials \
--docker-server="$ECR_REGISTRY" \
--docker-username=AWS \
--docker-password="$(aws ecr get-login-password --region $AWS_REGION)" \
--namespace="$NAMESPACE" \
--dry-run=client -o yaml | kubectl apply -f -Edit rosa-values.yaml and set your Collate credentials:
config:
agentId: "RemoteRunner" # unique identifier for this runner
authToken: "your-auth-token" # Collate auth token
serverHost: "your-cluster.getcollate.io"Then install:
helm upgrade --install hybrid-ingestion-runner \
./charts/hybrid-ingestion-runner \
--namespace hybrid-ingestion-runner \
-f rosa-values.yamlOpenShift's restricted-v2 SCC rejects pods that set a specific runAsUser, fsGroup, or seccompProfile — it assigns a UID from its own allowed range automatically. Setting openshift.enabled: true in your values instructs the chart to omit those fields:
openshift:
enabled: trueThis causes the deployment to render only the fields that are compatible with restricted-v2:
# pod level
securityContext:
runAsNonRoot: true
# container level
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: [ALL]
runAsNonRoot: trueThe built-in ecrRegistryHelper CronJob uses the heyvaldemar/aws-kubectl image which requires root and is blocked by OpenShift SCCs. It is disabled in rosa-values.yaml. Refresh the omd-registry-credentials secret manually using the command in step 3, or schedule it externally.
This chart includes a Grafana dashboard that can be deployed using the Grafana Operator.
- Grafana Operator must be installed in your cluster
- A Grafana instance must be deployed via the Grafana Operator
Enable the Grafana dashboard in your values.yaml:
grafanaDashboard:
enabled: true
# Namespace where the dashboard will be created (defaults to Release namespace)
namespace: ""
# Folder name in Grafana where the dashboard will be placed
folderName: "Hybrid Ingestion Runner"
# Instance selector to match the Grafana instance
# This should match the labels on your Grafana CR
instanceSelector:
dashboards: "grafana"
# Additional labels for the dashboard
labels: {}
# Additional annotations for the dashboard
annotations: {}
# Allow cross-namespace import
allowCrossNamespaceImport: falseThe instanceSelector field is crucial - it must match the labels on your Grafana CR. For example, if your Grafana instance has the label dashboards: grafana, use:
instanceSelector:
dashboards: "grafana"To find the labels on your Grafana instance:
kubectl get grafana -n <grafana-namespace> -o yamlThe dashboard includes the following panels:
- Agent Status: Shows if the hybrid ingestion runner pod is up
- Connection Status: Shows the connection status to the Collate server
- Request Rate: Displays HTTP request rates
- CPU Usage: Container CPU usage over time
- Memory Usage: Container memory usage over time
- Pod Status by Phase: Shows pod status across different phases
The dashboard JSON is located at dashboards/hybrid-ingestion-runner-dashboard.json. You can customize it by:
- Importing the JSON into Grafana
- Making your changes in the Grafana UI
- Exporting the modified JSON
- Replacing the file in the chart
The dashboard uses template variables for datasource selection. If you need to map specific datasource names, use the datasources configuration:
grafanaDashboard:
enabled: true
datasources:
- inputName: "DS_PROMETHEUS"
datasourceName: "Prometheus"