Decoupling MinIO from fossa-core

Migrate a bundled-MinIO deployment to externally managed MinIO releases when upgrading the fossa-core chart to 5.0.0.

3 min readUpdated Jul 9, 2026

Overview

As of fossa-core 5.0.0, MinIO is no longer a sub-chart dependency. Instead, MinIO is deployed via its own Helm chart for both fossa-core and Hubble. Migrating off the bundled MinIO requires a scheduled maintenance window of roughly 30 minutes to 1 hour.

The following configuration changes are required during the migration:

  • storage.endpoint must include the http prefix.
  • iam.kind must be set to AccessKey, and iam.region must be set to minio.
  • storage.forcePathStyle must be set to true when using MinIO.
  • hubble.storage.endpoint must include the http prefix.
  • hubble.iam.kind must be set to AccessKey, and hubble.iam.region must be set to minio.
  • storage.provisionInstance and hubble.storage.provisionInstance must be removed. They are deprecated flags.

Assumptions

The example commands assume:

  • Namespace: fossa
  • fossa-core release name: fossa
  • Values files:
    • MinIO bundled config: fossa-core-config.yml
    • New decoupled config: decoupled-fossa-core-config.yml
  • Persistent Volume Claims (PVCs): fossa-core-minio, fossa-hubble-minio
  • Existing buckets: fossa.test (core), hubble.fossa.test (hubble)
  • storage.endpoint: http://fossa-core-minio, storage.forcePathStyle: true
  • hubble.storage.endpoint: http://fossa-hubble-minio
  • IAM overrides: iam.kind: AccessKey, iam.region: minio (and the same under hubble.iam)

Danger

This migration deletes the fossa-core release. Your MinIO data survives only if its PVCs are annotated with helm.sh/resource-policy: keep. Verify this (Step 3) before proceeding; if the annotation is missing, do not continue.

Decoupling steps

  1. 1

    Set the namespace

    Shell
    kubectl config set-context --current --namespace=fossa
  2. 2

    Locate the MinIO PVCs

    Find the MinIO PVCs and note them. They follow the pattern RELEASE-minio for fossa-core and RELEASE-hubble-minio for Hubble:

    • fossa-core-minio
    • fossa-hubble-minio
  3. 3

    Confirm the PVC resource policy is `keep`

    Ensure both PVCs have the resource-policy annotation set to keep. If this is not the case, do not proceed.

    Shell
    kubectl get pvc fossa-core-minio -o jsonpath='{.metadata.annotations.helm\.sh/resource-policy}'kubectl get pvc fossa-hubble-minio -o jsonpath='{.metadata.annotations.helm\.sh/resource-policy}'
  4. 4

    Enable maintenance mode

    This triggers a downtime event.

    Shell
    helm upgrade -i fossa fossa/fossa-core --values fossa-core-config.yml --set global.maintenanceMode.enabled=true --version "^4.0.0"
  5. 5

    Delete the fossa-core release

    This triggers a downtime event. The MinIO PVCs are retained because of their keep resource policy.

    Shell
    helm delete fossa
  6. 6

    Deploy externally managed MinIO releases

    Deploy standalone MinIO releases for fossa-core and Hubble, reusing the existing PVCs with persistence.existingClaim:

    Shell
    helm upgrade -i fossa-core-minio fossa/minio --set bucket=fossa.test --set auth.accessKey=minio --set auth.secretKey=minio123 --set persistence.existingClaim=fossa-core-minio helm upgrade -i fossa-hubble-minio fossa/minio --set bucket=hubble.fossa.test --set auth.accessKey=minio --set auth.secretKey=minio123 --set persistence.existingClaim=fossa-hubble-minio
  7. 7

    Upgrade fossa-core to 5.0.0

    Ensure storage.endpoint, iam.kind, iam.region, hubble.storage.endpoint, hubble.iam.kind, and hubble.iam.region are defined in your values file.

    Example decoupled-fossa-core-config.yml:

    YAML
    # decoupled-fossa-core-config.yml iam:  kind: AccessKey  region: minio storage:  endpoint: http://fossa-core-minio  bucket: fossa.test  forcePathStyle: true  auth:    accessKey: minio    secretKey: minio123 hubble:  iam:    kind: AccessKey    region: minio   storage:    bucket: hubble.fossa.test    endpoint: http://fossa-hubble-minio    auth:      accessKey: minio      secretKey: minio123

    Upgrade:

    Shell
    helm upgrade -i fossa fossa/fossa-core --values decoupled-fossa-core-config.yml --version "^5.0.0"
  8. 8

    Verify pod health and data

    Ensure all pods become healthy and your data is still available:

    Shell
    kubectl exec fossa-core-minio-0 -- /opt/bitnami/minio-client/bin/mc ls local/fossa.test/BUILDS/kubectl exec fossa-hubble-minio-0 -- /opt/bitnami/minio-client/bin/mc ls local/hubble.fossa.test/BUILDS/
  9. 9

    Confirm in the UI

    Log in to the FOSSA UI and confirm your data is available.

© 2026 FOSSA, Inc.support@fossa.com