Configuração e Implantação de um Cluster MinIO Distribuído via Helm no Kubernetes

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 StorageClass configurada (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.

Tags: kubernetes Helm MinIO object-storage cloud-native

Publicado em 7-29 04:56