Skip to main content
This guide shows how to host Kubernetes manifests in an S3-compatible repository (MinIO) and have Flux Source Controller fetch them using a Bucket resource. The example demonstrates:
  • Creating an in-cluster MinIO instance
  • Uploading manifests to a bucket and path
  • Creating a Flux Bucket source that points to MinIO
  • Creating a Flux Kustomization that applies the manifests to your cluster
Prerequisites:
  • A running Kubernetes cluster and kubectl configured
  • Flux CLI installed and bootstrapped to your cluster
  • Repository with the demo branch and manifests available locally
Helpful links and reference docs:
Before you begin, ensure the Flux CLI is authenticated to the cluster and that you are in the repository root containing the demo branch. Example: use git checkout 4-demo (shown below) to switch to the demo branch that contains the manifests used in this demo.

1. Checkout the demo branch

Switch to the branch that contains the example manifests:
In this branch you will find three manifests for the block-buster app:
  • namespace manifest
  • deployment manifest
  • service manifest
Example Service manifest:
Deployment snippet (image + resources):

2. Deploy MinIO in-cluster

For this demo we use MinIO as an S3-compatible object store. Apply the provided MinIO manifests which create a namespace, pod, and service:
Verify the created resources:
MinIO exposes:
  • Web console: NodePort 30040 -> internal 9090
  • S3 API (minio server): NodePort 30041 -> internal 9000
Summary (local access): Open the MinIO console in your browser:
Log in with the default demo credentials:
  • Access Key: minioadmin
  • Secret Key: minioadmin
Create a bucket named bucket-bb-app using the console.
Screenshot of the MinIO Object Store web console showing the "Create Bucket" page with a bucket name field, feature toggles (versioning, object locking, quota) and a Create Bucket button. A left navigation panel lists sections like Object Browser, Access Keys, Buckets, Policies and Settings.

3. Upload manifests into a path inside the bucket

In MinIO’s Object Browser create a folder (path) named app-740 and upload the three manifests (namespace, deployment, service) to bucket-bb-app/app-740/. Open the bucket to confirm it exists:
A screenshot of the MinIO Object Store web console on the "Buckets" page showing a single bucket named "bucket-bb-app" with 0 objects and 0 B usage. The left sidebar displays navigation items like Object Browser, Access Keys, Policies, and Settings.
When you click Upload, choose the local manifests folder (for example ~/bb-app-source/manifests) and add the YAML files.
A MinIO Object Store web console showing the "bucket-bb-app" bucket, with an open file dialog overlaid. The dialog displays a "manifests" folder containing YAML files named deployment, namespace, and service.
Confirm the upload; the path should be bucket-bb-app/app-740/ with your manifest files present.

4. Create a Flux Bucket source that points to MinIO

Use the Flux CLI to create a source of type Bucket that references the MinIO bucket and export the resource manifest into your cluster repo:
The exported Bucket resource will look like:
Note the secretRef entry — it references a Kubernetes secret named minio-crds in the flux-system namespace which holds MinIO credentials. The secret does not yet exist, so the Bucket will fail to reconcile until the secret is created.

5. Create a Flux Kustomization that points to the Bucket source

Create and export a Kustomization that applies the manifests from the app-740 path in the Bucket:
Apply or commit both exported manifests (Bucket + Kustomization) to the flux-system/cluster manifests repository so Flux can reconcile them.

6. Create the secret with MinIO credentials

Check existing secrets in flux-system:
Create the minio-crds secret that Flux will use to access the bucket. For this demo both credentials are the default minioadmin:

7. Reconcile the Bucket source and verify readiness

Force Flux to reconcile the Bucket source:
Check the source status:
Once the source is READY, Flux will begin applying the Kustomization which creates the 4-demo namespace and applies the manifests.

8. Verify deployed resources

Confirm the namespace exists:
Check workloads in 4-demo:
Access the application on the NodePort:
In release 7.4.0 the app displays a score when a brick is hit — this is the change introduced by these manifests. This workflow demonstrates how Flux can fetch and apply artifacts stored in an S3-compatible bucket (MinIO in this example).
You can use any S3-compatible provider (AWS S3, GCP, Azure, or third-party S3 providers). In-cluster MinIO is convenient for testing; the demo uses --provider=generic and --insecure to allow plain HTTP. For production, use TLS-secured endpoints and the proper provider configuration.
Further reading and references:

Watch Video

Practice Lab