Project overview
The Stackable Data Platform is made up of many different components, with code and tools spread across multiple repositories, and artifacts stored in multiple locations. This page gives you a high-level overview of all the technical bits in the Stackable organization.
Repositories
On GitHub you can find more than a 100 repositories in the stackabletech organization. Below you find an overview of the majority of these repositories and how they relate to each other.
Operator repositories, templating, operator-rs
At the core of the Stackable Platform are the Kubernetes operators used to install and manage various data products, like the nifi-operator for example. You can find all of the operators if you search the organization repositories.
All the operators are written in Rust and the source code is found in the rust
directory.
tests
contains the integration tests which use kuttl and our own test template beku.py.
Documentation is written in Antora and found in the docs
directory, see also Documentation further down the page.
deploy
and docker
contain files used to package the operator into a Docker image and Helm chart.
Some files in these repositories are actually templated:
The operator-templating repository contains a template for all operator repositories, where shared files are distributed from. You can read the README in that repository to find out more about the details. Whenever common files are changed, a GitHub action is used to distribute the changes to all operator repositories.
The operator-rs repository contains the common framework library for all operators. It is a Rust library that is used by all operators and contains shared structs and shared functionality.
docker-images
The docker-images repository contains Dockerfiles for all the products that are supported by the SDP. The actual product artifacts are pulled from the product artifacs store and packaged into images. The images are pushed into an image registry.
Management tooling: stackablectl, stackable-cockpit
The stackablectl
commandline tool and the Stackable Cockpit UI are both found in the stackable-cockpit repository, and they both share some code.
The structure of the repository is documented in its README.
Documentation
The documentation is built with Antora and the playbook file to build it is located in the documentation repository, among some common platform documentation. The UI for the documentation is found in the documentation-ui repository; it is included as a submodule in the documentation repository. The documentation pulls in operator documentation files from the operator repositories. The documentation is found at https://docs.stackable.tech/.
There is also https://crds.stackable.tech/ where you can find generated documentation for all the CustomResourceDefinitions on the platform. The code to generate this page is found in the crddocs repository.
Tooling repositories
On top of the mentioned repositories, there are various smaller tools or product extensions that Stackable developed, they are all linked to from relevant places. Two examples are the image-tools used to build Docker images and the druid-opa-authorizer which is a Druid extension that enables OPA support for Druid.
Infastructure: T2
T2 - Test & Troubleshoot Platform is used for integration testing across different versions and cloud providers, find more information in the README of the repository.
Issues
The issues repository exists solely for the purpose of tracking issues related to the Stackable Platform in general. Large topics that impact many or even all of the platform components are discussed here. There is no code in this repository.
Artifact storage
Where are binaries, Helm Charts and Docker images stored?
Product artifacts
A lot of artifacts are stored in the OCI registry. Currently, those artifacts can be browsed by calling the API.
The following command lists all the different projects the artifacts are distributed across:
$ curl -X GET --header 'Accept: application/json' 'https://oci.stackable.tech/api/v2.0/projects/' | jq --raw-output '.[] | .name'
library
sandbox
sdp
sdp-charts
stackable
stackable-charts
sdp
contains the product and operator Docker images. The Helm Charts for the operators are found under sdp-charts
. Some artifacts like the
product binaries are stored in the Nexus repo under packages
.
List the Helm Charts in sdp-charts
:
$ curl -X GET --header 'Accept: application/json' 'https://oci.stackable.tech/api/v2.0/projects/sdp-charts/repositories?page_size=20' | jq --raw-output '.[] | .name'
List all available versions of a specific Helm Chart, e.g. the zookeeper-operator:
$ curl -X GET --header 'Accept: application/json' 'https://oci.stackable.tech/api/v2.0/projects/sdp-charts/repositories/zookeeper-operator/artifacts' | jq --raw-output '.[] | .tags[].name'
0.0.0-dev
0.0.0-pr920
0.0.0-pr919
0.0.0-pr917
24.11.1
24.11.1-rc2
24.11.1-rc1
24.11.0
24.7.0
24.3.0
Docker images
Docker images are stored in https://oci.stackable.tech as mentioned above. To list all the available repositories in a project, for example in
the sdp
project, run this command:
$ curl -X GET --header 'Accept: application/json' 'https://oci.stackable.tech/api/v2.0/projects/sdp/repositories?page=1' | jq --raw-output '.[] | .name'
sdp/statsd_exporter
sdp/stackable-cockpit
sdp/product1
sdp/git-sync/git-sync
sdp/sig-storage/csi-provisioner
sdp/sig-storage/csi-node-driver-registrar
sdp/kcat
sdp/java-devel
sdp/vector
sdp/hello-world
Since the API is using pagination it might be necessary to increment the page
in the command to see additional results.
It is also possible to list all the available image tags for a repository of choice. The following command shows the tags of the trino
repository:
$ curl -X GET --header 'Accept: application/json' 'https://oci.stackable.tech/api/v2.0/projects/sdp/repositories/trino/artifacts?page=1&page_size=25' | jq --raw-output '.[] | select(.extra_attrs.config != {}) | .tags[]?.name'
455-stackable0.0.0-dev
451-stackable0.0.0-dev
470-stackable0.0.0-dev
470-stackable0.0.0-dev-arm64
455-stackable0.0.0-dev-arm64
451-stackable0.0.0-dev-arm64
470-stackable0.0.0-dev-amd64
455-stackable0.0.0-dev-amd64
451-stackable0.0.0-dev-amd64
469-stackable0.0.0-dev
469-stackable0.0.0-dev-arm64
469-stackable0.0.0-dev-amd64
451-stackable24.11.1
455-stackable24.11.1
Similar to the previous command, the API call uses pagination again. So the page
value in the command can be incremented to see more results. Here the page_size
parameter was also used to increase the results per page.
Another possibility, instead of using curl
, would be the crane tool, which can also be used
to browse the tags when given the path to a repository.
$ crane ls -O oci.stackable.tech/sdp/trino
414-stackable0.0.0-dev
414-stackable0.0.0-dev-amd64
414-stackable0.0.0-dev-arm64
414-stackable24.3.0
414-stackable24.7.0
414-stackable24.7.0-amd64
414-stackable24.7.0-arm64
428-stackable0.0.0-dev
428-stackable0.0.0-dev-amd64
428-stackable0.0.0-dev-arm64
...