Skip to main content
Version Next

General Configuration

What configuration is for

Configuration is the step where you adapt a TDP Kubernetes component to your environment and operating mode. It defines how the component will be deployed, what resources it will use, how it will be exposed, what dependencies it requires, and how it will integrate with the other services on the platform.

In practice, configuration allows you to adjust parameters such as namespace, CPU, memory, storage, secrets, external access, persistence, and shared integrations — such as database, object storage, and supporting services. This means the same component can be used in different contexts, such as lab, staging, and production, without changing its core function.

For example:

  • Connecting Airflow to the cluster's PostgreSQL instead of using the built-in database
  • Telling Kafka how many broker replicas and which minimum replication factor to use
  • Informing NiFi where the LDAP server is for authentication
  • Configuring the Ozone S3 Gateway with the right credentials so Spark can write data

Configuration parameters apply regardless of the installation method used. The goal of this page is to explain what can typically be configured in a TDP component and how those adjustments work in practice.

Throughout this section, you will see the most common configuration patterns across TDP components:

AreaWhat it definesExamples
Cluster executionWhere and with what resources the component will run.Namespace, CPU, memory, replicas, and limits.
PersistenceHow data will be stored.Volumes, disk, storage class, and retention.
Service exposureHow the component will be accessed.Service, port, ingress, hostname, and TLS.
Security and accessHow credentials and sensitive data will be provided.Secrets, users, passwords, tokens, and secret references.
IntegrationsHow the component connects to other services.PostgreSQL, S3/Ozone, endpoints, and shared services.
Application methodHow the configuration reaches the cluster.Helm, ArgoCD/GitOps, and tdpctl in the future.

For exact details per component and version, also refer to the component's specific page and the values supported by its chart.

How to find out which values a chart accepts

Run helm show values oci://registry.tecnisys.com.br/tdp/charts/<chart> to export all available parameters with their default values and explanatory comments.

Components are distributed as Helm charts and generally accept customization through values files (YAML) passed during installation or update (for example, with the -f option).

Generic examples

The YAML and command-line snippets on this page are illustrative.

The root prefix (tdp-airflow, tdp-trino, etc.) and the exact key structure vary by component.

Use the component's configuration page in this guide and, for your exact package version, export the predefined values with helm show values oci://registry.tecnisys.com.br/tdp/charts/<chart>.

How to apply the configuration

The steps below are the same regardless of the component. What changes is the environment context — the actual parameters come from the component's configuration page.

How it works

Helm uses YAML files called values to parameterize each chart's templates. You pass these values during the installation or update of the component.

There are three main ways to provide values:

Values file — the recommended approach. Create a YAML with only the keys you want to change and pass it with -f:

Terminal input
helm upgrade --install <release> oci://registry.tecnisys.com.br/tdp/charts/<chart> \
-n <namespace> --create-namespace \
-f my-values.yaml

--set flag — for one-off changes directly on the command line:

Terminal input
helm upgrade --install <release> oci://registry.tecnisys.com.br/tdp/charts/<chart> \
-n <namespace> --create-namespace \
--set parameter.key=value

Combining files — multiple files merged in order, with the last ones taking precedence:

Terminal input
helm upgrade --install <release> oci://registry.tecnisys.com.br/tdp/charts/<chart> \
-n <namespace> --create-namespace \
-f values-base.yaml \
-f values-production.yaml

Step by step

  1. Export the values accepted by the chart to understand the available parameters:
Terminal input
helm show values oci://registry.tecnisys.com.br/tdp/charts/<chart> > values-default.yaml
Figure 2 - Export chart values
Figure 2 - Export chart values
  1. Create a file (e.g. my-values.yaml) with the values to change:
PowerShell
code .\my-values.yaml
  1. Adjust the desired parameters, such as namespace, resources, or integrations:
my-values.yaml
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "1"
memory: "2Gi"
note

You do not need to copy the entire chart default file. Include only the values you want to override.

  1. Apply the configuration with the file you created:
Terminal input
helm upgrade --install <release> oci://registry.tecnisys.com.br/tdp/charts/<chart> \
-n <namespace> --create-namespace \
-f my-values.yaml
Figure 3 - Apply the configuration file
Figure 3 - Apply the configuration file
  1. Verify that the configured values were applied:
Terminal input
helm get values <release> -n <namespace>
Figure 4 - Verify configured values
Figure 4 - Verify configured values
  1. Check the pods:
Terminal input
kubectl get pods -n <namespace>
Figure 5 - Check pods
Figure 5 - Check pods
note

For stateful components such as PostgreSQL, also validate:

kubectl get statefulset -n <namespace>
Figure 6 - Validate stateful components
Figure 6 - Validate stateful components

For components using Deployment, also validate:

kubectl get deploy -n <namespace>
  1. Confirm the release has status deployed and an updated revision:
Terminal input
helm list -n <namespace>
Figure 7 - Helm list
Figure 7 - Helm list

Common patterns across TDP charts

TDP Kubernetes charts share some usage patterns, but the exact key structure may vary from component to component.
Confirm supported parameters in the component documentation here and, if needed, in the helm show values output for the version you are installing.

Namespace

Each component can be installed in a dedicated namespace or share a namespace with other components, according to the environment strategy:

Terminal input
# Dedicated namespace (illustrative example)
helm upgrade --install <release> oci://registry.tecnisys.com.br/tdp/charts/<chart> \
-n <namespace> --create-namespace

# Same chart in a shared namespace with other components
helm upgrade --install <release> oci://registry.tecnisys.com.br/tdp/charts/<chart> \
-n <namespace> --create-namespace

Resources (CPU and memory)

Many charts allow configuring CPU and memory requests and limits for the main pods. The position of these keys may vary in the component's values file:

<chart-prefix>:
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "2"
memory: "4Gi"
Recommendation

Always define requests and limits to ensure Kubernetes schedules pods properly and to avoid resource shortage issues.

Data persistence

Charts that require persistent storage usually expose PVC (Persistent Volume Claim) options.
The path may vary by component:

<chart-prefix>:
persistence:
enabled: true
size: 10Gi
storageClassName: "<storage-class>"
accessMode: ReadWriteOnce
Attention

For components running on multiple nodes that need concurrent access to the same volume, use ReadWriteMany (RWX) for accessMode.
Make sure your StorageClass supports this mode.

Ingress

Some charts support external exposure via Ingress.
When this option is available, the parameters are usually grouped under a component-specific block:

<chart-prefix>:
ingress:
enabled: true
ingressClassName: "nginx"
hostname: "<component-host>"
path: /
pathType: Prefix
tls: true

Services (NodePort vs ClusterIP)

When the chart exposes Service options, the most common types are ClusterIP, NodePort, and LoadBalancer:

<chart-prefix>:
service:
type: ClusterIP

Custom values file

The recommended approach is to create a values file specific to your environment:

  1. Export the chart's default values:
Terminal input
helm show values oci://registry.tecnisys.com.br/tdp/charts/<chart> > values-default.yaml
  1. Create a copy with only the values you want to modify:
Terminal input
cp values-default.yaml my-values.yaml
  1. Edit the my-values.yaml file with the desired configuration.

  2. Apply during installation or update:

Terminal input
helm upgrade --install <release> oci://registry.tecnisys.com.br/tdp/charts/<chart> \
-n <namespace> --create-namespace \
-f my-values.yaml

Environment-based configuration

Development environment

For development environments, use reduced resources and disable high-availability options where appropriate for the component:

<chart-prefix>:
resources:
requests:
cpu: "250m"
memory: "512Mi"
limits:
cpu: "500m"
memory: "1Gi"
replicaCount: 1

Production environment

For production environments, configure adequate resources, enable persistence when necessary, and adjust replication, authentication, and external integration as needed for the component:

<chart-prefix>:
resources:
requests:
cpu: "1"
memory: "2Gi"
limits:
cpu: "4"
memory: "8Gi"
replicaCount: 3

Secrets management

TDP charts follow security best practices for credentials and sensitive data.

Kubernetes Secrets

Credentials must be stored in Kubernetes Secrets, never as plain text in values files:

Terminal input
kubectl -n <namespace> create secret generic my-secret \
--from-literal=password='<password>'

Referencing Secrets in the values file

In the values file, reference existing Secrets instead of placing passwords as plain text:

passwordSecret:
name: "my-secret"
key: "password"
Important

Never store credentials in values files that will be versioned in Git.
Use Kubernetes Secrets, Sealed Secrets, or tools like HashiCorp Vault.

TDPConfigurations

Several TDP charts use the TDPConfigurations section for configuring shared services, such as external databases and S3 connections:

TDPConfigurations:
externalDatabase:
enabled: true
recreate: false
externalSecret:
releaseName: "<tdp-postgresql-release>"
area: "<area>"

s3Connection:
enabled: true
secretName: "<secret-or-connection-name>"
uri: "https://<s3-endpoint>"
recreate field

The recreate field controls whether the component's database should be recreated during a reinstallation:

  • false (default): keeps existing data. Use in production environments.
  • true: drops and recreates the database. Use only when you are certain the database can be removed.

Helm Charts Registry

TDP charts are distributed via Tecnisys's OCI registry:

RegistryUsage
oci://registry.tecnisys.com.br/tdp/Stable and validated releases
Registry authentication

To access the registry, you must log in with the credentials provided by Tecnisys before installing or updating any chart:

Terminal input
helm registry login registry.tecnisys.com.br \
--username <username> \
--password <password>

Internal vs. external PostgreSQL

Several TDP components require a relational database to store their own metadata.

Each component's chart supports two modes:

ModeDescriptionWhen to use
Embedded PostgreSQL (postgres.enabled: true)Subchart installed alongside the component, self-containedDevelopment, isolated tests, temporary environments
External PostgreSQL (postgres.enabled: false)Uses the tdp-postgresql already installed in the clusterProduction, shared environments
Why use external PostgreSQL in production?

With a shared external PostgreSQL (tdp-postgresql), you centralize:

  • Backups: a single backup point for all platform metadata databases
  • Monitoring: metrics and alerts in one place
  • Sizing: adjust max_connections and resources once for the entire platform

Embedded PostgreSQL is convenient but isolated — each component manages its own database, which increases operational cost in production.

S3-compatible storage (Ozone)

Some TDP components need to access S3-compatible object storage to read or write files (input data, pipeline outputs, logs, DAGs).

In TDP Kubernetes, the S3 service is Apache Ozone (tdp-ozone).

When a component has TDPConfigurations.s3Connection.enabled: true, the chart automatically creates a Kubernetes Secret with the connection parameters (endpoint, access key, secret key).

This Secret is then referenced by the component's operators and connectors to access Ozone as if it were Amazon S3.

When will you need this?

Configure the S3 connection when the component needs to:

  • Read input data stored in Ozone (e.g., Spark reading Parquet)
  • Write outputs to Ozone (e.g., results from Airflow pipelines)
  • Persist files between runs (e.g., Airflow DAGs stored in Ozone)

If the component is used only with in-memory data or local PVCs, the S3 connection is not needed.

Next step

To access the configuration of a specific component, go back to the configuration index.