Configuração do Apache Ozone
O que é o Apache Ozone no TDP?
O Apache Ozone é o armazenamento de objectos compatível com S3 usado pelo TDP Kubernetes para disponibilizar um backend de dados dentro do cluster. Serve workloads que gravam ou leem objectos, 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 predefinida |
|---|---|---|
| S3 Gateway REST | Plano de dados compatível com API S3 para leitura e escrita de objectos | 9878 |
| S3 Gateway Web UI | Interface web do S3 Gateway para inspecção operacional | 19878 |
| Ozone Manager (OM) | Gere 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 objecto 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 expostas com maior 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 activo.
- Instalação
- Parâmetros principais
- Detalhes de configuração
- Acesso & Segurança
- Resolução de problemas
- Desinstalação
Instalação
Durante a instalação, o chart cria automaticamente o Secret predefinido 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 actualize o chart com um ficheiro 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 | Predefinição |
|---|---|---|
ozone.enabled | Activa 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 | Activa a 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 | Activa 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 | Activa recursos Ingress do chart | false |
TDP-Settings.gateway.gatewayApi.enabled | Activa recursos Gateway API do chart | false |
Persistência
Por predefinição, todos os serviços iniciam sem volumes persistentes (persistence.enabled: false). Em produção, active 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 activar e indicar o tamanho pretendido. O campo storageClassName é opcional: se omitido, o cluster utiliza a StorageClass definida como predefiniçã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 activado, as interfaces web são acessíveis pelos hostnames configurados em ingress.*.hosts[0].host. Os valores predefinidos do chart são:
| Interface | Hostname predefinido |
|---|---|
| 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 serviço são baseados no nome do release (<RELEASE_NAME>):
| Interface | Serviço | 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 correcto e NetworkPolicy. Exponha apenas quando o acesso externo for estritamente necessário.
Resolução de problemas
| Sintoma | Verificação | Acçã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 correcto |
| 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 | Reveja ingressClassName, DNS e TLS do hostname publicado |
Desinstalação
helm uninstall <RELEASE_NAME> -n <NAMESPACE>