Skip to main content
Version 3.0

Installation via Helm

CompatibilityKubernetes1.32+OpenShift4.19+Rancher2.10.x+Helm3.2.0+

This section describes the process of installing TDP Kubernetes components using the Helm CLI.

In this approach, components are installed by directly executing helm install commands, which deploy the resources defined in each Helm Chart available in the Tecnisys private OCI registry to the Kubernetes cluster.

When installing via Helm, the charts are applied manually or through external automation, command by command, with direct control over the implementation sequence of each component.

tip

Before starting the installation, make sure that all prerequisites have been met, including authentication to the Tecnisys OCI registry.

Installation Order

Component installation must follow a specific order to ensure that dependencies are met. The table below presents the recommended order:

OrderChartComponentVersionDependencies
1tdp-crdsPlatform CRDs3.0.1None
2tdp-argoArgo CD3.2.5tdp-crds
3tdp-postgresqlPostgreSQL17.5.0None
4tdp-kafkaKafka (Strimzi)4.1.0tdp-crds (Strimzi CRDs)
5tdp-hive-metastoreHive Metastore4.0.0tdp-postgresql
6tdp-deltalakeDelta Lake4.0.1None
7tdp-icebergIceberg1.10.0None
8tdp-ozoneApache Ozone2.0.0None
9tdp-rangerRanger2.7.0tdp-postgresql
10tdp-nifiNiFi1.28.0None
11tdp-sparkSpark4.0.2None
12tdp-trinoTrino478None
13tdp-airflowAirflow3.0.2tdp-postgresql
14tdp-jupyterJupyterHub5.3.0tdp-postgresql
15tdp-clickhouseClickHouse25.8.11.66tdp-crds (Altinity CRDs)
16tdp-cloudbeaverCloudBeaver25.3.0tdp-postgresql
17tdp-openmetadataOpenMetadata1.12.4tdp-postgresql
18tdp-supersetSuperset5.0.0tdp-postgresql

The Version column refers to the component version (appVersion of the chart, e.g.: Kafka 4.1.0, Argo CD 3.2.5). The Helm chart version (version in Chart.yaml) is a separate number — for tdp-kafka, for example, the chart version is 3.0.1 while the appVersion is 4.1.0. By omitting --version in helm install, Helm installs the latest version available in the registry.

warning

tdp-postgresql is a dependency for components configured to use the stack PostgreSQL and must be operational before them. Installing a dependent component without active PostgreSQL will fail.

As recommended for production environments, components that depend on a database should use an external database. However, if no external database is provided, the component will use a dedicated internal instance when that option exists in the chart. To better understand this difference, see Internal versus external PostgreSQL.

Installation

The installation pattern is the same for all components. For each chart, run:

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/<chart> \
--version <CHART_VERSION> \
-n <NAMESPACE> \
--create-namespace \
-f <VALUES_FILE>
Figure 1 - Installation via Helm
Figure 1 - Installation via Helm
note

The --create-namespace parameter creates the <NAMESPACE> namespace automatically on first installation. On subsequent installations, the namespace will already exist and the parameter will be ignored.

If the --version flag is omitted, Helm will install the latest chart version available in the registry. To pin a specific chart version, use --version <CHART_VERSION>.
The installed component version (Kafka, Airflow, etc.) is defined by the chart's appVersion and can be checked in the chart before installation or in the deployed resources after installation.

Check after each installation

After installing each component, wait for the pods to be ready before proceeding:

Terminal input
kubectl get pods -n <NAMESPACE> --watch
Figure 2 - Check Pods
Figure 2 - Check Pods

Press Ctrl+C when all component pods are in Running and READY status.

1. Platform CRDs (tdp-crds)

What are CRDs?

Custom Resource Definitions (CRDs) teach Kubernetes new resource types that it doesn't know about natively. Platform operators (NiFiKop, Strimzi, ArgoCD, ClickHouse, etc.) need these types to be registered with the cluster before they can be installed — without them, Kubernetes cannot create objects like NifiCluster, Kafka or Application.

CRDs are global scope resources (do not belong to a namespace) and are managed in a dedicated chart (tdp-crds) to avoid conflicts during Helm upgrades.

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-crds \
--version <CHART_VERSION> \
-n <NAMESPACE> \
--create-namespace \
-f <VALUES_FILE>
Release name (<RELEASE_NAME>)

In the installation commands below, <RELEASE_NAME> is the Helm release name of the component. Many teams use the tdp- prefix in line with the chart name (e.g. chart tdp-kafka with release tdp-kafka). Adjust to the convention of your environment.

CRDs included in tdp-crds

This chart installs the CRDs needed to:

  • Argo CDApplication, ApplicationSet, AppProject
  • Strimzi Kafka OperatorKafka, KafkaConnect, KafkaTopic, KafkaUser, KafkaNodePool, among others
  • NiFiKop OperatorNifiCluster, NifiDataflow, NifiUser, among others
  • Altinity ClickHouse OperatorClickHouseInstallation, ClickHouseKeeperInstallation, among others
  • OpenMetadata OMJob OperatorOMJob, CronOMJob
  • cert-managerCertificate, ClusterIssuer, Issuer, among others

2. ArgoCD

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-argo \
--version <CHART_VERSION> \
-n <NAMESPACE> \
--create-namespace \
-f <VALUES_FILE>

3. PostgreSQL

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-postgresql \
--version <CHART_VERSION> \
-n <NAMESPACE> \
-f <VALUES_FILE>
important

Wait for PostgreSQL to become fully operational before proceeding with the installation of components that depend on it. Check status:

Terminal input
kubectl get pods -n <NAMESPACE> | grep <RELEASE_NAME>

The pod must have the status Running and have all replicas ready (READY 1/1).

Example

If the PostgreSQL release is tdp-postgresql, the filter can be grep tdp-postgresql on the output of kubectl get pods.

4. Kafka (Strimzi)

Prerequisite: Strimzi CRDs

tdp-kafka depends on Strimzi CRDs (e.g.: Kafka, KafkaNodePool, KafkaConnect, KafkaConnector) installed by tdp-crds (step 1).
Ensure tdp-crds is applied before installing tdp-kafka.
Without the CRDs, Helm cannot create Strimzi resources and the installation will fail.

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-kafka \
--version <CHART_VERSION> \
-n <NAMESPACE> \
--create-namespace \
-f <VALUES_FILE>
Post-installation validation for Kafka

After installation, verify the Kafka cluster was created successfully:

Terminal input
kubectl get kafka -n <NAMESPACE>
kubectl get kafkanodepools -n <NAMESPACE>
kubectl get pods -n <NAMESPACE> -l strimzi.io/cluster=<KAFKA_CLUSTER_NAME>
kubectl get svc -n <NAMESPACE> | grep kafka
kubectl get kafkaconnect -n <NAMESPACE>
kubectl get kafkaconnector -n <NAMESPACE>

Replace <KAFKA_CLUSTER_NAME> with the value of name in values.yaml (default: tdp-kafka).

chart version vs. appVersion

For tdp-kafka, the chart version (e.g.: 3.0.1) is separate from the appVersion (e.g.: 4.1.0 — Apache Kafka version).
Use helm show chart oci://registry.tecnisys.com.br/tdp/charts/tdp-kafka to check both.

5. Hive Metastore

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-hive-metastore \
--version <CHART_VERSION> \
-n <NAMESPACE> \
-f <VALUES_FILE>

6. Delta Lake

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-deltalake \
--version <CHART_VERSION> \
-n <NAMESPACE> \
-f <VALUES_FILE>

7. Iceberg

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-iceberg \
--version <CHART_VERSION> \
-n <NAMESPACE> \
-f <VALUES_FILE>

8. Apache Ozone

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-ozone \
--version <CHART_VERSION> \
-n <NAMESPACE> \
-f <VALUES_FILE>

9. Ranger

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-ranger \
--version <CHART_VERSION> \
-n <NAMESPACE> \
-f <VALUES_FILE>

10. NiFi

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-nifi \
--version <CHART_VERSION> \
-n <NAMESPACE> \
-f <VALUES_FILE>

11. Spark

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-spark \
--version <CHART_VERSION> \
-n <NAMESPACE> \
-f <VALUES_FILE>

12. Trino

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-trino \
--version <CHART_VERSION> \
-n <NAMESPACE> \
-f <VALUES_FILE>

13. Airflow

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-airflow \
--version <CHART_VERSION> \
-n <NAMESPACE> \
-f <VALUES_FILE>
note

Airflow requires PostgreSQL to be operational. Additionally, if you use the CeleryExecutor or KubernetesExecutor executor with sharing DAGs via volume, make sure that a Storage Class with ReadWriteMany (RWX) support is available.

14. JupyterHub

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-jupyter \
--version <CHART_VERSION> \
-n <NAMESPACE> \
-f <VALUES_FILE>

15. ClickHouse

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-clickhouse \
--version <CHART_VERSION> \
-n <NAMESPACE> \
-f <VALUES_FILE>

16. CloudBeaver

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-cloudbeaver \
--version <CHART_VERSION> \
-n <NAMESPACE> \
-f <VALUES_FILE>

17. OpenMetadata

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-openmetadata \
--version <CHART_VERSION> \
-n <NAMESPACE> \
-f <VALUES_FILE> \
--wait --wait-for-jobs --timeout 10m
OpenMetadata — initialization jobs

OpenMetadata runs Kubernetes Jobs during installation and upgrade.
The --wait-for-jobs flag instructs Helm to wait for those jobs to complete before considering the installation successful.
Use --wait --wait-for-jobs --timeout 10m to ensure post-installation jobs complete.
In Argo CD, the Application should only be considered healthy after post-installation/upgrade jobs complete.

18. Superset

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-superset \
--version <CHART_VERSION> \
-n <NAMESPACE> \
-f <VALUES_FILE>