Configuração Geral
Configuração de componentes TDP
A configuração é a etapa em que um componente TDP Kubernetes é adaptado ao ambiente e ao modo de operação adotado.
Ela define como o componente será implantado, quais recursos utilizará, como será exposto, de quais dependências precisa e como se integrará aos demais serviços da plataforma.
Na prática, a configuração permite ajustar parâmetros como namespace, CPU, memória, armazenamento, secrets, acesso externo, persistência e integrações compartilhadas — como banco de dados, object storage e serviços de apoio.
Com isso, o mesmo componente pode ser usado em contextos diferentes, como laboratório, homologação e produção, sem mudar sua função principal.
Por exemplo:
- Conectar o Airflow ao PostgreSQL do cluster em vez de usar o banco interno
- Dizer ao Kafka quantas réplicas de broker e qual fator de replicação mínimo usar
- Informar ao NiFi onde está o servidor LDAP para autenticação
- Configurar o S3 Gateway do Ozone com as credenciais certas para que o Spark possa gravar dados
Os parâmetros de configuração se aplicam independentemente do método de instalação utilizado.
O objetivo desta página é explicar o que normalmente pode ser configurado em um componente TDP e como esses ajustes funcionam na prática.
Ao longo desta seção, são apresentados os padrões de configuração mais comuns entre os componentes TDP:
| Área | O que define | Exemplos |
|---|---|---|
| Execução no cluster | Onde e com quais recursos o componente será executado. | Namespace, CPU, memória, réplicas e limites. |
| Persistência | Como os dados serão armazenados. | Volumes, disco, storage class e retenção. |
| Exposição do serviço | Como o componente será acessado. | Service, porta, ingress, hostname e TLS. |
| Segurança e acesso | Como credenciais e dados sensíveis serão fornecidos. | Secrets, usuários, senhas, tokens e referências a secrets. |
| Integrações | Como o componente se conecta a outros serviços. | PostgreSQL, S3/Ozone, endpoints e serviços compartilhados. |
| Forma de aplicação | Como a configuração chega ao cluster. | Helm, Argo CD/GitOps e futuramente tdpctl. |
Onde consultar os parâmetros disponíveis
Antes de personalizar a configuração de um componente, existem três fontes principais:
- A página do componente neste guia — cada componente tem uma página com os parâmetros suportados, exemplos e observações específicas.
- O
values.yamldo chart — contém todos os parâmetros aceitos com seus valores padrão e comentários explicativos; acesse comhelm show values. - O README do chart — disponível no registry, oferece uma visão geral das opções e casos de uso.
Execute helm show values oci://registry.tecnisys.com.br/tdp/charts/<CHART_NAME> para exportar todos os parâmetros disponíveis com seus valores padrão e comentários explicativos.

Este comando exporta os valores padrão do chart para um arquivo local values-padrao.yaml.
Esse arquivo pode ser usado como referência para identificar quais parâmetros ajustar para o ambiente.
Arquivo de valores customizado
A configuração de um componente é feita por meio de um arquivo YAML com apenas os parâmetros que precisam ser alterados em relação ao padrão do chart.
Não é necessário copiar o arquivo completo de valores do chart — inclua somente as chaves que deseja sobrescrever.
O arquivo de valores define o que será configurado. Helm ou Argo CD definem como essa configuração será aplicada ao cluster — em ambos os fluxos, o formato e os parâmetros são idênticos.
Exemplo mínimo de arquivo de valores:
# Inclua apenas o que precisa ser diferente do padrão
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "2"
memory: "2Gi"
persistence:
size: 20Gi
storageClassName: "nfs-fast"
- Como aplicar a configuração
- Padrões comuns entre os charts TDP
- Decisões de ambiente que afetam a configuração
Os procedimentos a seguir mostram como aplicar os valores ao cluster via Helm ou Argo CD.
- Via Helm
- Declaração via GitOps com Argo CD
- Comandos
- Vídeos
O Helm mescla automaticamente seus valores com os padrões do chart — inclua apenas as chaves que deseja customizar.
Formas de fornecer valores
Arquivo de valores (recomendado) — crie um YAML com as chaves a alterar e passe com -f:
helm upgrade --install <RELEASE_NAME> oci://registry.tecnisys.com.br/tdp/charts/<CHART_NAME> \
-n <NAMESPACE> --create-namespace \
-f meu-values.yaml
Flag --set — para alterações pontuais diretamente na linha de comando:
helm upgrade --install <RELEASE_NAME> oci://registry.tecnisys.com.br/tdp/charts/<CHART_NAME> \
-n <NAMESPACE> --create-namespace \
--set parametro.chave=valor
Combinação de arquivos — múltiplos arquivos mesclados em ordem, com os últimos tendo precedência:
helm upgrade --install <RELEASE_NAME> oci://registry.tecnisys.com.br/tdp/charts/<CHART_NAME> \
-n <NAMESPACE> --create-namespace \
-f values-base.yaml \
-f values-producao.yaml
Passo a passo
Antes de começar, exporte os valores aceitos pelo chart. Consulte Onde consultar os parâmetros disponíveis.
- Crie o arquivo de valores (exemplo:
meu-values.yaml):
code .\meu-values.yaml
- Ajuste os parâmetros desejados, como namespace, recursos ou integrações:
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "1"
memory: "2Gi"
- Aplique a configuração com o arquivo criado:
helm upgrade --install <RELEASE_NAME> oci://registry.tecnisys.com.br/tdp/charts/<CHART_NAME> \
-n <NAMESPACE> --create-namespace \
-f meu-values.yaml

- Verifique se os valores configurados foram aplicados:
helm get values <RELEASE_NAME> -n <NAMESPACE>

- Verifique os pods:
kubectl get pods -n <NAMESPACE>

Para componentes stateful, como PostgreSQL, valide também:
kubectl get statefulset -n <NAMESPACE>

Para componentes que utilizam Deployment, valide também:
kubectl get deploy -n <NAMESPACE>
- Confirme que o release está com status
deployede com a revisão atualizada:
helm list -n <NAMESPACE>

- helm show values
- helm upgrade --install
- helm get values
- kubectl get pods
- kubectl get statefulset
- helm list
- Comandos
- Vídeos
Como funciona
No fluxo GitOps, a configuração do componente é declarada em arquivos values.yaml versionados no repositório Git — exatamente os mesmos parâmetros usados no fluxo Helm.
Não há um conjunto separado de parâmetros "do Argo CD": o que muda é que o Argo CD monitora o repositório continuamente, compara o estado declarado no Git com o estado atual do cluster e aplica as diferenças — sem necessidade de rodar comandos de instalação diretamente.
Três conceitos centrais orientam esse fluxo:
Application — recurso Kubernetes gerenciado pelo Argo CD que aponta para um chart Helm e um arquivo de valores no repositório.
Cada componente TDP tem sua própria Application.
Sincronização (Sync) — processo pelo qual o Argo CD compara o estado declarado no Git com o estado atual do cluster e aplica as diferenças.
Pode ser automática (quando automated está habilitado na Application) ou manual (argocd app sync).
Reconciliação contínua — quando selfHeal: true está configurado, o Argo CD corrige automaticamente qualquer desvio entre o cluster e o Git, mesmo que alguém tenha alterado algo diretamente no cluster.
Para alterar a configuração de um componente, o arquivo de valores é editado no repositório e a alteração é enviada ao Git.
O Argo CD detecta a mudança e aplica — sem necessidade de rodar comandos de instalação.
Passo a passo
- Acesse o repositório GitOps:
cd ./tdp-GitOps
- Abra o arquivo de valores do componente indicado na página específica do componente:
code .\caminho\do\arquivo.yaml
Ou, alternativamente:
notepad .\caminho\do\arquivo.yaml

- Ajuste os parâmetros desejados no arquivo:
primary:
resources:
requests:
cpu: "500m"
memory: "512Mi"
persistence:
size: 10Gi
primary:
resources:
requests:
cpu: "1200m"
memory: "1Gi"
limits:
cpu: "1"
memory: "2Gi"
persistence:
size: 25Gi


- Salve e envie a alteração:
git add .
git commit -m "config: ajustar parâmetros do componente"
git push origin main

O Argo CD detectará automaticamente a alteração e iniciará a sincronização.
- Verifique se a Application evolui para
SyncedeHealthy:
argocd app list

- Para inspecionar a Application do componente em detalhe:
argocd app get <APPLICATION_NAME>

- Se a sincronização automática não estiver habilitada, ou se quiser aplicar a mudança imediatamente:
argocd app sync <APPLICATION_NAME>

- Verifique os pods:
kubectl get pods -n <NAMESPACE>

Para componentes stateful, como PostgreSQL, valide também:
kubectl get statefulset -n <NAMESPACE>

Para componentes que utilizam Deployment, valide também:
kubectl get deploy -n <NAMESPACE>
Confirme que os pods estão em Running e que os workloads mostram todas as réplicas prontas.
- Ajustar parâmetros
- git push
- argocd app list
- argocd app get
- argocd app sync
- kubectl get pods
- kubectl get statefulset
Os charts do TDP Kubernetes compartilham padrões de configuração descritos a seguir.
Consulte o values.yaml do chart e a página do componente neste guia para os parâmetros exatos.
Padrão do componente e revisão da configuração
Em geral, a primeira instalação de um componente parte do comportamento padrão definido pelo chart.
Esse padrão existe para permitir que o serviço seja implantado com o conjunto mínimo de dependências externas, facilitando validação inicial, testes controlados e primeiros acessos.
Na passagem para ambientes mais estáveis ou compartilhados, a configuração costuma ser revista em pontos como banco de dados, persistência, autenticação, exposição externa, observabilidade e integração com serviços comuns da plataforma.
Essa revisão não altera a função principal do componente, mas ajusta a forma como ele se encaixa nas exigências operacionais do ambiente.
Por esse motivo, as páginas específicas dos componentes descrevem primeiro o comportamento inicial e depois os blocos de configuração que normalmente exigem atenção em laboratório, homologação ou produção.
Namespace
Cada componente pode ser instalado em um namespace dedicado ou compartilhar um namespace com outros componentes, de acordo com a estratégia do ambiente:
# Namespace dedicado (exemplo ilustrativo)
helm upgrade --install <RELEASE_NAME> oci://registry.tecnisys.com.br/tdp/charts/<CHART_NAME> \
-n <DEDICATED_NAMESPACE> --create-namespace
# Mesmo chart em namespace compartilhado com outros componentes
helm upgrade --install <RELEASE_NAME> oci://registry.tecnisys.com.br/tdp/charts/<CHART_NAME> \
-n <SHARED_NAMESPACE> --create-namespace
Recursos (CPU e memória)
Muitos charts permitem configurar requests e limits de CPU e memória para os principais pods.
Exemplo de estrutura:
<CHART_VALUES_KEY>:
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "2"
memory: "4Gi"
Sempre defina requests e limits para garantir que o Kubernetes faça agendamento adequado dos pods e evite problemas de falta de recursos.
Persistência de dados
Os charts que requerem armazenamento persistente costumam expor opções de PVC (Persistent Volume Claim).
Exemplo de estrutura:
<CHART_VALUES_KEY>:
persistence:
enabled: true
size: 10Gi
storageClassName: "<STORAGE_CLASS>"
accessMode: ReadWriteOnce
Para componentes que executam em múltiplos nós e precisam de acesso concorrente ao mesmo volume, utilize ReadWriteMany (RWX) no accessMode.
Certifique-se de que seu StorageClass suporta este modo.
Exposição HTTP externa
O TDP suporta dois mecanismos alternativos para expor componentes via HTTP/HTTPS:
| Mecanismo | Chave de ativação | Quando usar |
|---|---|---|
| Ingress | TDP-Settings.gateway.ingress.enabled: true | Clusters com Ingress Controller instalado (nginx, traefik, HAProxy…) |
| Gateway API | TDP-Settings.gateway.gatewayApi.enabled: true | Clusters com suporte a Gateway API v1 (Envoy Gateway, Istio…) |
Ative apenas um mecanismo por vez. Após ativar, configure os parâmetros específicos do componente no chart correspondente (hostname, TLS, ingressClassName ou gatewayClassName).
Para pré-requisitos completos, exemplos por componente, TLS e validação, consulte Exposição externa: Ingress e Gateway API.
Serviços (ClusterIP, NodePort e LoadBalancer)
Um Service do Kubernetes cria um ponto de acesso estável para os Pods de um componente. Mesmo que os Pods sejam recriados ou mudem de IP, o Service mantém um endereço lógico para que outros componentes consigam se conectar.
Quando o chart expõe opções de Service, o campo service.type define como esse acesso será disponibilizado:
| Tipo | Para que serve | Quando usar |
|---|---|---|
ClusterIP | Expõe o serviço apenas dentro do cluster Kubernetes. | Padrão recomendado para comunicação interna entre componentes. |
NodePort | Abre uma porta em cada nó do cluster, permitindo acesso externo pelo IP do nó. | Útil para testes ou ambientes sem Ingress/Gateway, mas menos indicado para produção. |
LoadBalancer | Solicita um balanceador externo à infraestrutura do cluster. | Usado quando o ambiente Kubernetes oferece integração com load balancer externo. |
<CHART_VALUES_KEY>:
service:
type: ClusterIP
Na maioria dos componentes TDP, ClusterIP é suficiente, porque a exposição externa deve ser tratada preferencialmente por Ingress ou Gateway API quando houver acesso HTTP/HTTPS pelo navegador ou por clientes externos.
Gerenciamento de secrets
Os charts do TDP seguem boas práticas de segurança para credenciais e dados sensíveis.
Kubernetes Secrets
Credenciais devem ser armazenadas em Kubernetes Secrets, nunca em texto plano nos arquivos de values:
kubectl -n <NAMESPACE> create secret generic meu-secret \
--from-literal=password='<PASSWORD>'
Referência a Secrets no arquivo de valores
No arquivo de valores, referencie Secrets existentes em vez de colocar senhas em texto plano:
passwordSecret:
name: "meu-secret"
key: "password"
Nunca armazene credenciais em arquivos de valores que serão versionados no Git.
Utilize Kubernetes Secrets, Sealed Secrets ou ferramentas como HashiCorp Vault.
TDP-Settings
Diversos charts do TDP utilizam a seção TDP-Settings para configuração de serviços compartilhados, como banco de dados externo e conexões S3:
TDP-Settings:
externalDatabase:
enabled: true
recreate: false
externalSecret:
releaseName: "<POSTGRESQL_RELEASE>"
area: "<SERVICE_KEY>"
s3Connection:
enabled: true
secretName: "<S3_SECRET_NAME>"
uri: "https://<S3_ENDPOINT>"
recreateO campo recreate controla se o banco de dados do componente deve ser recriado durante uma reinstalação:
false(padrão): mantém os dados existentes. Use em ambientes produtivos.true: apaga e recria o banco. Use quando houver certeza de que o banco de dados pode ser removido.
Antes de configurar os componentes TDP, identifique as características do ambiente que influenciam os valores dos charts, como armazenamento persistente, orquestrador, política de segurança, banco de dados compartilhado e serviços externos.
Registry de Helm Charts
Os charts TDP são distribuídos via registry OCI da Tecnisys.
| Registry | Uso |
|---|---|
oci://registry.tecnisys.com.br/tdp/charts/ | Caminho OCI dos charts TDP estáveis e homologados (cada chart no subcaminho, por exemplo .../charts/tdp-cloudbeaver) |
A autenticação no registry é um pré-requisito de instalação, não uma configuração do componente.
Para o procedimento completo de login e validação de acesso, consulte Pré-requisitos.
Decisões de armazenamento
Os componentes TDP que usam persistência (bancos de dados, logs, DAGs, cache) requerem que o cluster Kubernetes tenha pelo menos uma StorageClass disponível.
A StorageClass define como o cluster provisiona volumes persistentes (PVCs).
Exemplos comuns:
| Tipo | Descrição | Quando usar |
|---|---|---|
| Local | Armazenamento direto no nó (ex.: local-path-provisioner) | Desenvolvimento, testes, ambientes não-críticos |
| NFS | Network File System compartilhado | Ambientes onde múltiplos nós precisam acessar o mesmo volume |
| Cloud | Managed storage (ex.: EBS na AWS, AKS, GKE) | Produção em cloud |
| SAN/Storage dedicado | Storage externo (ex.: NFS enterprise, Ceph) | Produção on-premises com SLA de disponibilidade |
No seu cluster, liste as StorageClasses e identifique qual usar:
kubectl get storageclass
Exemplo de saída:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE
local-path rancher.io/local-path Delete WaitForFirstConsumer
nfs-fast nfs.provisioner.io Delete Immediate
Se nenhuma StorageClass estiver marcada com * (padrão), identifique qual usar e configure-a nos valores do chart:
tdp-componente:
persistence:
storageClassName: "nfs-fast" # Use o nome da StorageClass do seu cluster
Alguns componentes (ex.: Airflow com KubernetesExecutor, NiFi) executam múltiplas réplicas ou pods concorrentes que precisam compartilhar o mesmo volume.
Nesses casos, verifique se a StorageClass suporta ReadWriteMany (RWX):
kubectl describe storageclass <STORAGE_CLASS>
Se a StorageClass suporta apenas ReadWriteOnce (RWO), consulte a página de configuração do componente para saber se RWO é suficiente ou se você precisa de uma StorageClass diferente.
Compatibilidade do orquestrador e ajustes de segurança
Desde a release 3.0.1, os componentes TDP suportam:
- Red Hat OpenShift 4.19+
- Rancher Manager 2.10.x+
Além do Kubernetes 1.32+.
OpenShift: Considerações gerais
O OpenShift é uma distribuição enterprise do Kubernetes que adiciona camadas de segurança acima do padrão Kubernetes.
Uma delas são as Security Context Constraints (SCC), que restringem:
- Quais UIDs/GIDs os containers podem usar
- Se containers podem rodar como root
- Quais capabilities do Linux são permitidas
Padrão: deixar UID/GID vazios
Para compatibilidade com o SCC restricted do OpenShift, deixe os campos uid e gid sem valor (~ em YAML):
# No values.yaml, deixe:
uid: ~
gid: ~
Isso permite que o SCC do OpenShift atribua automaticamente um UID dentro do intervalo reservado do namespace, sem conflitos.
Padrão: global.compatibility.openshift.adaptSecurityContext: force
Vários charts TDP (e charts Bitnami empacotados) usam este parâmetro para se adaptar ao modelo de segurança do OpenShift:
tdp-componente:
global:
compatibility:
openshift:
adaptSecurityContext: force
Isso força o chart a remover restrições de segurança incompatíveis com o SCC restrito.
Role Binding automático para SCC
Se o componente precisar de privilégios acima do restricted padrão (ex.: root para instalar pacotes), o chart pode criar um RoleBinding que adiciona as ServiceAccounts ao SCC anyuid:
rbac:
createSCCRoleBinding: true
Cada componente pode ter requisitos específicos de OpenShift.
Consulte a página de configuração do componente (ex.: OpenMetadata) para ver se há seções dedicadas a "Instalação no OpenShift".
Rancher: nota sobre compatibilidade
O Rancher Manager é uma plataforma que gerencia múltiplos clusters Kubernetes (e OpenShift).
A compatibilidade com Rancher 2.10.x+ significa que os componentes TDP:
- Podem ser implantados em clusters gerenciados pelo Rancher
- Seguem as mesmas práticas de segurança e configuração que no Kubernetes padrão
- Herdam as políticas de rede e segurança do Rancher quando aplicáveis
Nenhuma configuração adicional específica do Rancher é necessária além das configurações usuais de Kubernetes.
PostgreSQL interno versus externo
Vários componentes TDP precisam de um banco relacional para armazenar seus próprios metadados.
O chart de cada componente suporta dois modos:
| Modo | Descrição | Quando usar |
|---|---|---|
PostgreSQL embutido (postgres.enabled: true) | Subchart instalado junto com o componente, autocontido | Desenvolvimento, testes isolados, ambientes temporários |
PostgreSQL externo (postgres.enabled: false) | Usa o tdp-postgresql já instalado no cluster | Produção, ambientes compartilhados |
Com PostgreSQL externo e compartilhado (tdp-postgresql), centralizam-se:
- Backups: um único ponto de backup para todos os bancos de metadados da plataforma
- Monitoramento: métricas e alertas em um único lugar
- Dimensionamento: ajusta
max_connectionse recursos uma única vez para toda a plataforma
O PostgreSQL embutido é conveniente mas isolado — cada componente gerencia seu próprio banco, o que aumenta o custo operacional em produção.
O chart CloudBeaver pode guardar metadados da aplicação (configurações da UI, usuários locais, etc.) em um PostgreSQL externo além do volume de workspace (database.enabled: true), alinhado ao modo «PostgreSQL externo» desta seção.
Passos e exemplos: Configuração — CloudBeaver.
Armazenamento S3-compatível (Ozone, MinIO ou outro endpoint)
Alguns componentes TDP precisam acessar armazenamento de objetos S3-compatível para ler ou gravar arquivos (dados de entrada, outputs de pipelines, logs, DAGs).
No TDP Kubernetes, o backend S3 nativo da stack é o Apache Ozone (tdp-ozone), via seu S3 Gateway — mas qualquer endpoint compatível com S3 (MinIO ou um serviço de nuvem) pode ser usado no lugar; o mecanismo de conexão é o mesmo.
Quando um componente tem TDP-Settings.s3Connection.enabled: true, o chart cria automaticamente um Kubernetes Secret com os parâmetros de conexão (endpoint, chave de acesso, chave secreta).
Esse Secret é então referenciado pelos operadores e conectores do componente para acessar o endpoint S3 configurado — Ozone, MinIO ou outro.
Configure a conexão S3 quando o componente precisar:
- Ler dados de entrada armazenados no S3 (ex.: Spark lendo Parquet)
- Gravar outputs no S3 (ex.: resultados de pipelines Airflow)
- Manter arquivos entre execuções (ex.: DAGs do Airflow armazenados no S3)
Se o componente for usado apenas com dados em memória ou em PVCs locais, a conexão S3 não é necessária.
Para acessar a configuração de um componente específico, volte ao índice de configuração.