Para implementar uma infraestrutura de armazenamento de objetos resiliente no Kubernetes, o MinIO em modo distribuído é uma das soluções mais eficientes. Este guia detalha o processo de instalação utilizando Helm charts da Bitnami, focando na configuração de alta disponibilidade.
Pré-requisitos Operacionais
Antes de iniciar a instalação, certifique-se de que o ambiente atende aos seguintes requisitos:
- Cluster Kubernetes funcional (v1.19+ recomendado).
- Gerenciador de pacotes Helm v3 instalado.
- Uma
StorageClassconfigurada (ex: NFS, Ceph, OpenEBS ou provedores de nuvem) para provisionamento dinâmico de volumes.
1. Configuração do Repositório Helm
O primeiro passo é adicionar o repositório oficial da Bitnami, que mantém versões atualizadas e seguras do MinIO.
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
Para verificar as versões disponíveis do chart e da aplicação, utilize:
helm search repo bitnami/minio
2. Preparação do Ambiente Local
É recomendável baixar o chart para customizar os parâmetros de implantação de forma organizada.
# Criação de um diretório de trabalho
mkdir -p ~/k8s-minio && cd ~/k8s-minio
# Download e extração do chart
helm pull bitnami/minio --untar
3. Customização do Arquivo de Configuração (values.yaml)
Crie um arquivo chamado minio-config.yaml. Este arquivo define o comportamento do cluster, incluindo o modo distribuído e as credenciais de acesso. No modo distribuído, o MinIO requer pelo menos 4 réplicas para garantir a paridade de dados.
# Definição do StorageClass Global
global:
storageClass: "nfs-client"
# Nome personalizado para os recursos
fullnameOverride: "minio-cluster"
# Configurações de imagem
image:
registry: docker.io
repository: bitnami/minio
tag: 2022.6.2-debian-10-r0
pullPolicy: IfNotPresent
# Modo de operação: 'distributed' para alta disponibilidade
mode: distributed
# Credenciais Administrativas
auth:
rootUser: storage-admin
rootPassword: "StrongPassword123"
# Nome do bucket inicial
defaultBuckets: "data-repository"
# Configuração de réplicas (mínimo de 4 para modo distribuído)
statefulset:
replicaCount: 4
# Definição de portas do container
containerPorts:
api: 9000
console: 9001
# Configuração do Serviço
service:
type: ClusterIP
ports:
api: 9000
console: 9001
# Exposição via Ingress para a API
apiIngress:
enabled: true
hostname: minio-api.local.com
ingressClassName: "nginx"
path: /
pathType: ImplementationSpecific
# Persistência de Dados
persistence:
enabled: true
mountPath: /storage
accessModes:
- ReadWriteOnce
size: 100Gi
4. Execução da Instalação
Com as configurações prontas, crie um namespace dedicado e proceda com a instalação do cluster.
# Criar namespace de destino
kubectl create ns storage-apps
# Instalar o cluster MinIO
helm install minio-distributed bitnami/minio -f minio-config.yaml -n storage-apps
5. Verificação da Implantação
Após o comando de instalação, monitore o status dos Pods e dos Persistent Volume Claims (PVCs) para garantir que o provisionamento ocorreu corretamente.
# Verificar status dos Pods
kubectl get pods -n storage-apps -w
# Validar o provisionamento dos volumes
kubectl get pvc -n storage-apps
Se todos os Pods estiverem no estado Running, o cluster está operacional. A interface de console pode ser acessada internamente via encaminhamento de porta, caso o Ingress não tenha sido configurado com um DNS externo:
kubectl port-forward --namespace storage-apps svc/minio-cluster 9001:9001
6. Gerenciamento via Cliente MC
Para interagir com o cluster via linha de comando, o utilitário mc (MinIO Client) é necessário. Você pode configurar um alias para o novo cluster:
mc alias set my-cluster http://minio-api.local.com storage-admin StrongPassword123
A partir deste ponto, comandos como mc ls my-cluster ou mc admin info my-cluster podem ser utilizados para administrar o ambiente.