Post

Running Renovate in Kubernetes with GitOps

Auto Detect your new Container and Helm Chart Updates with Renovate, FluxCD, and GitOps.

Running Renovate in Kubernetes with GitOps

Running Renovate in Kubernetes with GitOps

In this post, you’ll learn how to deploy Renovate Bot in Kubernetes to scan your FluxCD manifests and HelmRelease resources, detect new Docker image tags and Helm chart versions, and automatically create Pull Requests in your GitOps repository.


✅ Why Renovate?

Renovate is an open-source tool for automated dependency management. In a GitOps environment, it enables:

  • Detecting new container image versions in your deployments.
  • Updating Helm charts defined in Flux manifests (HelmRelease).
  • Creating pull requests with changes and a Dependency Dashboard.

🚀 Installing in Kubernetes with Helm

Renovate provides an official Helm chart. You can run it as a CronJob to perform daily scans.

First, create the HelmRepository for Renovate:

1
2
3
4
5
6
7
8
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
  name: renovate
  namespace: monitoring
spec:
  interval: 1h
  url: https://renovatebot.github.io/helm-charts

Then here you have your renovate HelmRelease. In this example i am using a GitHub repo, and for that, you will need a GitHub Token. That token is inside the secret renovate-secret as RENOVATE_TOKEN name. Also you can enable redis and a persistence volume as cache. Configure your User and Repo in “repositories”: [“YourUser/YourRepo”]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: renovate
  namespace: monitoring
spec:
  interval: 1h
  chart:
    spec:
      chart: renovate
      version: 41.37.4
      sourceRef:
        kind: HelmRepository
        name: renovate
  values:
    cronjob:
      schedule: "0 3 * * *" # Runs daily at 03:00 AM
    redis:
      enabled: true        
    envFrom:
      - secretRef:
          name: renovate-secret # Contains RENOVATE_TOKEN
    renovate:
      config: |
        {
          "$schema": "https://docs.renovatebot.com/renovate-schema.json",
          "platform": "github",
          "token": "${RENOVATE_TOKEN}",
          "repositories": ["YourUser/YourRepo"],
          "extends": ["config:recommended"],
          "enabledManagers": ["kubernetes", "flux"],
          "flux": {
            "fileMatch": ["cluster/.+\\.ya?ml$"]
          },
          "kubernetes": {
            "fileMatch": ["cluster/.+\\.ya?ml$"]
          },
          "dependencyDashboard": true,
          "branchConcurrentLimit": 5,
          "prConcurrentLimit": 5,
          "baseBranchPatterns": ["master"],
          "automerge": false
        }
    persistence:
      cache:
        enabled: true
        storageClass: "longhorn"
        storageSize: "512Mi"

👉When our Job runs for the first time (we can force it manually), we will go to our repo and we will find a PR that we must accept so that Renovate can scan our repo and create the PRs. In the future runs we will see our Issues DashBoard and the first PRs

Instead of relying on complex regex rules, Renovate now supports flux natively: “enabledManagers”: [“kubernetes”, “flux”] This allows it to detect:

  • HelmRelease (chart.spec.chart and version)
  • OCIRepository
  • GitRepository

It also continues to support Kubernetes resources like Deployments, DaemonSets, etc., for Container images.

🚀Renovate creates an issue called Dependency Dashboard, where you can:

  • See the list of detected updates.
  • Force creation of PRs manually.
  • Aprobe the PRs

👉Final Result

With this setup:

✅FluxCD + Renovate + GitOps → Always up-to-date manifests.

✅Renovate automatically opens PRs for Docker images and Helm charts.

✅Everything is managed through the Dependency Dashboard.

🚀 Enjoy!

👉 Extra-Tip: I would also recommend integrating GitHub with Slack to receive notifications in your channel: Slack

This post is licensed under CC BY 4.0 by the author.