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 ...