Skip to content

concepts reorganized and new overview page #325

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 16 commits into from
Jan 2, 2024
Merged
4 changes: 4 additions & 0 deletions modules/concepts/images/common_objects.drawio.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions modules/concepts/images/deployment.drawio.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions modules/concepts/images/discovery.drawio.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions modules/concepts/images/operator_overview.drawio.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions modules/concepts/images/overview.drawio.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
31 changes: 18 additions & 13 deletions modules/concepts/nav.adoc
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
* xref:concepts:index.adoc[]
** xref:roles-and-role-groups.adoc[]
** xref:service-exposition.adoc[]
** xref:service_discovery.adoc[]
** xref:logging.adoc[]
** xref:authentication.adoc[]
** xref:opa.adoc[]
** xref:product_image_selection.adoc[]
** xref:resources.adoc[]
** xref:s3.adoc[]
** xref:pvc.adoc[]
** xref:tls_server_verification.adoc[]
** xref:overrides.adoc[]
** xref:duration.adoc[]
** xref:overview.adoc[Overview]
** Common configuration mechanisms
*** xref:roles-and-role-groups.adoc[]
*** xref:product_image_selection.adoc[]
*** xref:overrides.adoc[Advanced: overrides]
** Resources
*** xref:resources.adoc[]
*** xref:s3.adoc[]
*** xref:pvc.adoc[]
** Connectivity
*** xref:service_discovery.adoc[]
*** xref:service-exposition.adoc[]
** Security
*** xref:authentication.adoc[]
*** xref:opa.adoc[]
*** xref:tls_server_verification.adoc[]
** xref:operations/index.adoc[]
*** xref:operations/cluster_operations.adoc[]
*** xref:operations/pod_disruptions.adoc[]
*** xref:operations/pod_placement.adoc[]
*** xref:operations/graceful_shutdown.adoc[]
** Observability
*** xref:logging.adoc[]
34 changes: 33 additions & 1 deletion modules/concepts/pages/index.adoc
Original file line number Diff line number Diff line change
@@ -1,3 +1,35 @@
= Concepts

This section of the documentation is intended to be read to gain a deeper understanding of the bigger picture and architectural design of the platform.
== Overview

The xref:overview.adoc[Platform overview] is a good starting point to understand the Stackable Data Platform covering the overall architecture, deployement and configuration.

== General configuration mechanisms

Learn about xref:roles-and-role-groups.adoc[], how product image selection works.
There is also the common xref:overrides.adoc[override] mechanism for configuration settings, although this tool should be used with care!

== Resources

Learn about how xref:resources.adoc[] are configured; this covers CPU, memory and storage.
Learn about how xref:s3.adoc[] are configured across the platform.

== Connectivity

Many Platform components depend on other components or expose functionality that you can connect to.
This connectivity is achived with xref:service-discovery.adoc[service discovery ConfigMaps].
To access your Stackable operated products from outside the Kuberenetes cluster learn more about xref:service-exposition.adoc[].

== Security

Security aspects include xref:authentication.adoc[authenticating] users when services are accessed and subsequently xref:opa.adoc[authorizing] access to operations and data inside of the services.
It also includes xref:tls-server-verification.adoc[].

== Operations

The xref:operations/index.adoc[operations] section is directed at platform maintainers.
It covers xref:operations/cluster_operations.adoc[starting, stopping and restarts] of products, xref:operations/graceful_shutdown.adoc[] and other topics related to maintenance and ensuring stability of the platform operation.

== Observability

Learn abouth xref:logging.adoc[].
69 changes: 69 additions & 0 deletions modules/concepts/pages/overview.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
= Stackable Data Platform explained

The Stackable Data Platform (SDP) is built on Kubernetes.
Its core is a collection of Kubernetes Operators and custom resources which are designed to work together.

image::overview.drawio.svg[]

The operators are deployed into a Kubernetes cluster, one operator per product (such as Apache ZooKeeper, Apache HDFS, Apache Druid). Every operator has at its core a custom resource (CR) which defines a product instance (shown in green above). The operator creates Kubernetes objects based on the CRs, such as ConfigMaps, StatefulSets and Services.

The operators are deployed with xref:management:stackablectl:index.adoc[] (the Stackable CLI tool) and product instances are created by deploying manifests into Kubernetes.

Aspects like SQL database configuration, xref:resources.adoc[storage configuration] or xref:authentication.adoc[authentication] and xref:opa.adoc[authorization] work the same way across all operators.
Most operators support LDAP as a common way to authenticate with product instances and OPA as a common way to set up authorization.

[#operators]
== Operators

The Operators form the core of the Stackable platform. There is one operator for every supported product, as well as a few supporting operators. All Stackable Operators are built on top of a common framework, so they look and behave in a similar way.

Every Operator relies on a central custom resource (CR) which is specific to the product it operates (i.e. DruidCluster for Apache Druid).
It reads this resource and creates kubernetes resources in accordance with the product CR.

image::operator_overview.drawio.svg[]

The diagram above shows the custom resource in green. It contains all the configuration needed to create a product instance. This includes which services the product should connect to, with how many replicas it should operate and how meany resources it should use, among other things.

[#discovery]
=== Discovery

The operator also creates a xref:service-discovery.adoc[**discovery ConfigMap**] for every product instance which is used by other products to connect to it. The ConfigMap has the same name as the product instance and contains information about how to connect to the product. This ConfigMap can then be referenced in other product instance resources.

image::discovery.drawio.svg[]

For example, Apache ZooKeeper is a dependency of many other products, such as Apache HDFS and Apache Druid. The HDFS and Druid resources can simply reference the ZooKeeper cluster by name and the operators will use the discovery ConfigMap to configure the Druid and HDFS Pods to connect to the ZooKeeper Service.

You can also create these discovery ConfigMaps yourself to make products discoverable that are not operatored by a Stackable Operator. Learn more about product discovery at xref:service-discovery.adoc[].

[#roles]
=== Roles

Almost all products that Stackable supports need multiple different processes to run. Because they are often still the same software but running with different parameters, Stackable calls them _roles_. For example HDFS has three roles: DataNode, NameNode and JournalNode.

All roles are configured together in the custom resource for the product, but they each get their own StatefulSet, ConfigMaps and Service.

Learn more about roles: xref:roles-and-role-groups.adoc[]

[#deployment]
== Deployment

All operators and products run as containers in a xref:home::kubernetes.adoc[Kubernetes cluster]. The operators are deployed with stackablectl (the Stackable CLI) or Helm.

image::deployment.drawio.svg[]

To deploy a product instance, a product resource needs to be created in Kubernetes, this is usually done by passing a YAML manifest file to kubernetes with `kubectl apply -f <file.yaml>`. The manifest file contains the configuration of how the product should operate.
The operators read the product resources and create the according Kubernetes resources.

=== Stackable command line interface

The Stackable command line interface is called _stackablectl_. It knows about the Stackable platform releases and can install sets of operators from a specific release. It is also possible to deploy stacks of product instances that are already wired together.

== Common configuration of common objects

Besides the products themselves, there are also related objects, such as S3 buckets or LDAP configuration.

image::common_objects.drawio.svg[]

These objects can be reused by all operators that support this feature. The S3 bucket only needs to be described once, and then it can be referenced in all products that support reading and/or writing from/to S3. Learn more about S3 configuration: xref:s3.adoc[].

Similarly for the OpenPolicyAgent (OPA). Configuring it looks the same across all products. Learn more: xref:opa.adoc[].
4 changes: 3 additions & 1 deletion modules/reference/nav.adoc
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
- {crd-docs}[CRD Reference {external-link-icon}^]
* Reference
** {crd-docs}[CRD Reference {external-link-icon}^]
** xref:duration.adoc[]
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
= Duration format
:page-aliases: concepts:duration.adoc

:rust-duration-max: https://doc.rust-lang.org/std/time/struct.Duration.html#associatedconstant.MAX
:go-std-time: https://cs.opensource.google/go/go/+/refs/tags/go1.21.2:src/time/format.go;l=1589
Expand Down