Cloud Native 8 min read

How to Deploy MinIO Object Storage on Kubernetes for Production

This guide explains why MinIO is a high‑performance, S3‑compatible object storage solution and walks you through the prerequisites, Helm‑based installation steps on a Kubernetes cluster, verification procedures, and best‑practice tips for deploying a secure, scalable production‑grade MinIO service.

Linux Ops Smart Journey
Linux Ops Smart Journey
Linux Ops Smart Journey
How to Deploy MinIO Object Storage on Kubernetes for Production

Introduction

In the cloud‑computing era, object storage is a core component for enterprise data management. MinIO is a high‑performance, highly‑available object storage service compatible with Amazon S3 and open‑source, making it a popular choice for production deployments.

MinIO encryption diagram
MinIO encryption diagram

MinIO Overview

MinIO is designed for large‑scale unstructured data such as photos, videos, logs, backups, and container images. It is built for cloud‑native environments and fully compatible with the S3 API, allowing any S3‑compatible tool to work seamlessly.

Key Features

Open source : Apache License v2.0.

High availability : Erasure coding and multi‑site replication.

Excellent performance : Optimized for SSD/HDD, multi‑core CPUs, high‑speed networks.

Easy deployment : Runs on bare metal, VMs, or containers (Kubernetes) with CLI and web UI.

Strong security : TLS, fine‑grained authentication and authorization.

Rich API support : S3 API, additional RESTful API, and built‑in web console.

Scalability : Linear scaling by adding nodes.

Prerequisites

Kubernetes cluster (v1.19+).

Helm 3.2.0+ installed.

Ingress controller exposing MinIO web UI.

Available StorageClass for persistent volumes.

Deployment Steps

Add the Bitnami Helm repository:

<code>$ helm repo add bitnami https://charts.bitnami.com/bitnami --force-update</code>

Pull the MinIO chart:

<code>$ helm pull bitnami/minio --untar --untardir /etc/kubernetes/addons/</code>

Create a values file (minio-values.yaml) with custom image, distributed mode, secrets, ingress, and persistence settings. Example content includes image registry, mode=distributed, auth secret, ingress TLS, and a 32Gi persistent volume.

Create a Kubernetes secret for the admin credentials:

<code>$ kubectl -n kube-system create secret generic minio-password-secret --from-literal=root-user=admin --from-literal=root-password=xxxx</code>

Install MinIO with Helm:

<code>$ helm -n kube-system install minio -f /etc/kubernetes/addons/minio-values.yaml /etc/kubernetes/addons/minio</code>

Verification

Check that all MinIO pods are running:

<code>$ kubectl -n kube-system get pod -l app.kubernetes.io/instance=minio</code>

Access the MinIO web UI via the configured hostname (e.g., https://minio.jiaxzeng.com/minio/).

MinIO web UI screenshot
MinIO web UI screenshot

Conclusion

Following these steps you can deploy a stable, production‑grade MinIO object storage system that supports large files, scales easily, and integrates with cloud‑native workloads.

Cloud NativeDeploymentKubernetesMinIOObject StorageHelm
Linux Ops Smart Journey
Written by

Linux Ops Smart Journey

The operations journey never stops—pursuing excellence endlessly.

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.