Configuração do Apache Ozone
O que é o Apache Ozone no TDP?
O Apache Ozone é o armazenamento de objetos compatível com S3 usado pelo TDP Kubernetes para disponibilizar um backend de dados dentro do cluster. Ele atende workloads que gravam ou leem objetos, como jobs Spark, catálogos Trino, tabelas Iceberg ou Delta Lake e clientes compatíveis com S3.
Estrutura de valores (Helm)
Os valores do Apache Ozone ficam sob a chave tdp-ozone: (alias da dependência no Chart.yaml); as configurações internas do subchart ficam aninhadas sob ozone:. Configurações de exposição HTTP/HTTPS ficam sob TDP-Settings: e ingress:.
TDP-Settings:
gateway:
ingress:
enabled: false
ozone:
datanode:
replicas: 3
persistence:
enabled: true
size: 50Gi
Arquitetura
O deploy do Ozone é composto por serviços com papéis distintos:
| Serviço | Papel | Porta padrão |
|---|---|---|
| S3 Gateway REST | Plano de dados compatível com API S3 para leitura e escrita de objetos | 9878 |
| S3 Gateway Web UI | Interface web do S3 Gateway para inspeção operacional | 19878 |
| Ozone Manager (OM) | Gerencia volumes, buckets, chaves e metadados de namespace | 9874 |
| Storage Container Manager (SCM) | Coordena containers, pipelines e localização dos blocos nos datanodes | 9876 |
| Datanodes | Armazenam os dados de objeto em volumes persistentes ou efêmeros | 9882 |
As aplicações normalmente usam apenas o S3 Gateway REST. OM, SCM e S3 Gateway Web UI são interfaces administrativas ou de observabilidade e devem ser expostos com mais restrição.
Visão geral
| Item | Valor |
|---|---|
| Chart | tdp-ozone |
| Versão da aplicação | Apache Ozone 2.0.0 |
| Registry OCI | oci://registry.tecnisys.com.br/tdp/charts/tdp-ozone |
| Endpoint interno S3 | http://<RELEASE_NAME>-s3g-rest.<NAMESPACE>.svc.cluster.local:9878 |
Páginas relacionadas
- Integrações - Apache Ozone explica como consumidores TDP usam o endpoint S3.
- Segurança - Apache Ozone detalha AWS Signature v4, Secrets, TLS e rotação de credenciais.
- Ingress - Apache Ozone mostra a exposição de OM, SCM, S3 Web UI e S3 REST.
Pré-requisitos
Antes de instalar, confirme:
- Kubernetes 1.32+, Red Hat OpenShift 4.19+ ou Rancher Manager 2.10.x+.
- Helm 3.2.0+.
- StorageClass disponível para os componentes que usarão persistência.
- Ingress Controller ou Gateway API apenas quando houver exposição HTTP/HTTPS fora do cluster.
- Secret de credenciais S3 quando
ozone.s3g.auth.enabledpermanecer habilitado.
- Instalação
- Parâmetros principais
- Detalhes de configuração
- Acesso & Segurança
- Solução de problemas
- Desinstalação
Instalação
Durante a instalação, o chart cria automaticamente o Secret padrão ozone-s3-credentials com as credenciais S3. A criação manual só é necessária quando você quiser usar credenciais personalizadas — nesse caso, crie o Secret antes do deploy:
kubectl -n <NAMESPACE> create secret generic ozone-s3-credentials --from-literal=aws_access_key_id="<AWS_ACCESS_KEY_ID>" --from-literal=aws_secret_access_key="<AWS_SECRET_ACCESS_KEY>"
Instale ou atualize o chart com um arquivo de valores versionado para o seu ambiente:
helm upgrade --install <RELEASE_NAME> oci://registry.tecnisys.com.br/tdp/charts/tdp-ozone -n <NAMESPACE> --create-namespace -f <VALUES_FILE>
OpenShift
No OpenShift, o chart requer permissões adicionais. Habilite o suporte à plataforma ao instalar:
helm upgrade --install <RELEASE_NAME> oci://registry.tecnisys.com.br/tdp/charts/tdp-ozone -n <NAMESPACE> --create-namespace --set openshift.enabled=true -f <VALUES_FILE>
Para validar a criação dos recursos principais:
kubectl -n <NAMESPACE> get pods,svc,ingress
Parâmetros principais
| Parâmetro | Descrição | Padrão |
|---|---|---|
ozone.enabled | Habilita o subchart do Ozone | true |
ozone.image.repository | Imagem usada pelos serviços Ozone | apache/ozone |
ozone.image.tag | Versão da imagem Ozone | 2.0.0 |
ozone.datanode.replicas | Quantidade de datanodes | 3 |
ozone.datanode.persistence.enabled | Habilita persistência dos Datanodes | false |
ozone.om.replicas | Réplicas do Ozone Manager | 1 |
ozone.om.service.type | Tipo de Service do Ozone Manager | ClusterIP |
ozone.scm.replicas | Réplicas do SCM | 1 |
ozone.scm.service.type | Tipo de Service do SCM | ClusterIP |
ozone.s3g.replicas | Réplicas do S3 Gateway | 1 |
ozone.s3g.auth.enabled | Habilita autenticação AWS Signature v4 no S3 Gateway | true |
ozone.s3g.auth.secretName | Secret Kubernetes com aws_access_key_id e aws_secret_access_key | ozone-s3-credentials |
ingress.om.enabled | Expõe a UI do Ozone Manager por Ingress | true |
ingress.om.hosts[0].host | Hostname do Ingress para UI do OM | ozone-om.tdp.local |
ingress.scm.enabled | Expõe a UI do SCM por Ingress | true |
ingress.scm.hosts[0].host | Hostname do Ingress para UI do SCM | ozone-scm.tdp.local |
ingress.s3g.web.enabled | Expõe a Web UI do S3 Gateway por Ingress | true |
ingress.s3g.web.hosts[0].host | Hostname do Ingress para Web UI do S3 Gateway | ozone-s3-ui.tdp.local |
ingress.s3g.rest.enabled | Expõe a API REST S3 por Ingress | true |
ingress.s3g.rest.hosts[0].host | Hostname do Ingress para API REST S3 | ozone-s3.tdp.local |
TDP-Settings.gateway.ingress.enabled | Habilita recursos Ingress do chart | false |
TDP-Settings.gateway.gatewayApi.enabled | Habilita recursos Gateway API do chart | false |
Persistência
Por padrão, todos os serviços iniciam sem volumes persistentes (persistence.enabled: false). Em produção, habilite PVCs ao menos nos componentes que mantêm estado: Datanodes, OM e SCM.
Para cada componente, o padrão de configuração é o mesmo — basta habilitar e informar o tamanho desejado. O campo storageClassName é opcional: se omitido, o cluster usa a StorageClass marcada como padrão.
ozone:
datanode:
persistence:
enabled: true
size: 100Gi
# storageClassName: "<STORAGE_CLASS>" # opcional
om:
persistence:
enabled: true
size: 10Gi
scm:
persistence:
enabled: true
size: 10Gi
Dimensione os datanodes conforme o crescimento esperado do lakehouse. OM e SCM precisam de bem menos espaço, mas devem ter disco estável para preservar metadados e histórico operacional.
Acesso
S3 Gateway REST
Dentro do cluster, use o Service do S3 Gateway REST:
http://<RELEASE_NAME>-s3g-rest.<NAMESPACE>.svc.cluster.local:9878
Para testes locais sem Ingress, use port-forward:
kubectl -n <NAMESPACE> port-forward svc/<RELEASE_NAME>-s3g-rest 9878:9878
Depois aponte clientes S3 para http://127.0.0.1:9878.
Interfaces administrativas
Quando o Ingress estiver habilitado, as interfaces web são acessíveis pelos hostnames configurados em ingress.*.hosts[0].host. Os valores padrão do chart são:
| Interface | Hostname padrão |
|---|---|
| S3 Gateway Web UI | ozone-s3-ui.tdp.local |
| Ozone Manager UI | ozone-om.tdp.local |
| SCM UI | ozone-scm.tdp.local |
Sem Ingress, use port-forward. Os nomes de service são baseados no nome do release (<RELEASE_NAME>):
| Interface | Service | Porta |
|---|---|---|
| S3 Gateway Web UI | <RELEASE_NAME>-s3g-web | 19878 |
| Ozone Manager UI | <RELEASE_NAME>-om | 9874 |
| SCM UI | <RELEASE_NAME>-scm | 9876 |
Ao expor o Ozone fora do cluster, trate o S3 Gateway REST como API de dados: exija TLS, autenticação S3, DNS correto e NetworkPolicy. Exponha apenas quando o acesso externo for estritamente necessário.
Solução de problemas
| Sintoma | Verificação | Ação |
|---|---|---|
| Pods não ficam prontos | kubectl -n <NAMESPACE> get pods | Verifique eventos, recursos e PVCs pendentes |
| Services ausentes | kubectl -n <NAMESPACE> get svc | Confirme o nome do release e se o chart foi instalado no namespace correto |
| Cliente S3 não conecta | kubectl -n <NAMESPACE> get endpoints <RELEASE_NAME>-s3g-rest | Valide DNS interno, porta 9878 e NetworkPolicy |
| Erro de autenticação S3 | kubectl -n <NAMESPACE> get secret ozone-s3-credentials | Confira o Secret e as credenciais usadas pelo cliente |
| Ingress não responde | kubectl -n <NAMESPACE> get ingress | Revise ingressClassName, DNS e TLS do hostname publicado |
Desinstalação
helm uninstall <RELEASE_NAME> -n <NAMESPACE>