Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ All notable changes to this project will be documented in this file.
- Use `--file-log-rotation-period` (or `FILE_LOG_ROTATION_PERIOD`) to configure the frequency of rotation.
- Use `--console-log-format` (or `CONSOLE_LOG_FORMAT`) to set the format to `plain` (default) or `json`.
- Add support for `33.0.0` ([#722]).
- Add Listener support for Druid ([#731]).

### Changed

Expand Down Expand Up @@ -52,6 +53,7 @@ All notable changes to this project will be documented in this file.
[#721]: https://github.com/stackabletech/druid-operator/pull/721
[#722]: https://github.com/stackabletech/druid-operator/pull/722
[#725]: https://github.com/stackabletech/druid-operator/pull/725
[#731]: https://github.com/stackabletech/druid-operator/pull/731

## [25.3.0] - 2025-03-21

Expand Down
25 changes: 12 additions & 13 deletions deploy/helm/druid-operator/crds/crds.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -245,11 +245,15 @@ spec:
x-kubernetes-preserve-unknown-fields: true
roleConfig:
default:
listenerClass: cluster-internal
podDisruptionBudget:
enabled: true
maxUnavailable: null
description: This is a product-agnostic RoleConfig, which is sufficient for most of the products.
properties:
listenerClass:
default: cluster-internal
type: string
podDisruptionBudget:
default:
enabled: true
Expand Down Expand Up @@ -879,19 +883,6 @@ spec:
type: string
type: object
type: object
listenerClass:
default: cluster-internal
description: |-
This field controls which type of Service the Operator creates for this DruidCluster:

* `cluster-internal`: Use a ClusterIP service * `external-unstable`: Use a NodePort service * `external-stable`: Use a LoadBalancer service

This is a temporary solution with the goal to keep yaml manifests forward compatible. In the future, this setting will control which [ListenerClass](https://docs.stackable.tech/home/nightly/listener-operator/listenerclass.html) will be used to expose the service, and ListenerClass names will stay the same, allowing for a non-breaking change.
enum:
- cluster-internal
- external-unstable
- external-stable
type: string
metadataStorageDatabase:
description: Druid requires an SQL database to store metadata into. Specify connection information here.
properties:
Expand Down Expand Up @@ -1182,11 +1173,15 @@ spec:
x-kubernetes-preserve-unknown-fields: true
roleConfig:
default:
listenerClass: cluster-internal
podDisruptionBudget:
enabled: true
maxUnavailable: null
description: This is a product-agnostic RoleConfig, which is sufficient for most of the products.
properties:
listenerClass:
default: cluster-internal
type: string
podDisruptionBudget:
default:
enabled: true
Expand Down Expand Up @@ -2720,11 +2715,15 @@ spec:
x-kubernetes-preserve-unknown-fields: true
roleConfig:
default:
listenerClass: cluster-internal
podDisruptionBudget:
enabled: true
maxUnavailable: null
description: This is a product-agnostic RoleConfig, which is sufficient for most of the products.
properties:
listenerClass:
default: cluster-internal
type: string
podDisruptionBudget:
default:
enabled: true
Expand Down
11 changes: 11 additions & 0 deletions deploy/helm/druid-operator/templates/roles.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,17 @@ rules:
- customresourcedefinitions
verbs:
- get
- apiGroups:
- listeners.stackable.tech
resources:
- listeners
verbs:
- create
- delete
- get
- list
- patch
- watch
- apiGroups:
- events.k8s.io
resources:
Expand Down
7 changes: 6 additions & 1 deletion docs/modules/druid/examples/getting_started/druid.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ spec:
image:
productVersion: 33.0.0
clusterConfig:
listenerClass: external-stable # This exposes your Stacklet outside of Kubernetes. Remove this configuration if this is not desired
zookeeperConfigMapName: simple-druid-znode
deepStorage:
hdfs:
Expand All @@ -23,10 +22,14 @@ spec:
roleGroups:
default:
replicas: 1
roleConfig:
listenerClass: external-stable # This exposes this role outside of Kubernetes. Remove this configuration if this is not desired
coordinators:
roleGroups:
default:
replicas: 1
roleConfig:
listenerClass: external-stable # This exposes this role outside of Kubernetes. Remove this configuration if this is not desired
historicals:
roleGroups:
default:
Expand All @@ -39,6 +42,8 @@ spec:
roleGroups:
default:
replicas: 1
roleConfig:
listenerClass: external-stable # This exposes this role outside of Kubernetes. Remove this configuration if this is not desired
---
apiVersion: v1
kind: Secret
Expand Down
7 changes: 6 additions & 1 deletion docs/modules/druid/examples/getting_started/druid.yaml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ spec:
image:
productVersion: 33.0.0
clusterConfig:
listenerClass: external-stable # This exposes your Stacklet outside of Kubernetes. Remove this configuration if this is not desired
zookeeperConfigMapName: simple-druid-znode
deepStorage:
hdfs:
Expand All @@ -23,10 +22,14 @@ spec:
roleGroups:
default:
replicas: 1
roleConfig:
listenerClass: external-stable # This exposes your Stacklet outside of Kubernetes. Remove this configuration if this is not desired
coordinators:
roleGroups:
default:
replicas: 1
roleConfig:
listenerClass: external-stable # This exposes your Stacklet outside of Kubernetes. Remove this configuration if this is not desired
historicals:
roleGroups:
default:
Expand All @@ -39,6 +42,8 @@ spec:
roleGroups:
default:
replicas: 1
roleConfig:
listenerClass: external-stable # This exposes your Stacklet outside of Kubernetes. Remove this configuration if this is not desired
---
apiVersion: v1
kind: Secret
Expand Down
25 changes: 14 additions & 11 deletions docs/modules/druid/pages/usage-guide/listenerclass.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,23 @@
:description: Configure Apache Druid service exposure using ListenerClass to control service types: cluster-internal, external-unstable, or external-stable.

Apache Druid offers a web UI and an API, both are exposed by the `router` role.
Other roles also expose API endpoints such as the `broker` and `coordinator`.
The Operator deploys services called `<name>-<role>` (where `<name>` is the name of the DruidCluster and `<role>` is the role for the Service) through which Druid can be reached.
The `broker` and `coordinator` roles expose additional API endpoints.

These services can have three different types: `cluster-internal`, `external-unstable` and `external-stable`.
Read more about the types in the xref:concepts:service-exposition.adoc[service exposition] documentation at platform level.

This is how the listener class is configured:
The operator deploys a xref:listener-operator:listener.adoc[Listener] for the `router`, `broker` and `coordinator` roles.
The Listener defaults to only being accessible from within the Kubernetes cluster, but this can be changed by configuring a ListenerClass
for specific roles:

[source,yaml]
----
spec:
clusterConfig:
listenerClass: cluster-internal # <1>
brokers:
roleConfig:
listenerClass: cluster-internal # <1>
coordinators:
roleConfig:
listenerClass: cluster-internal # <1>
routers:
roleConfig:
listenerClass: external-unstable # <1>
----
<1> The default `cluster-internal` setting.

This setting affects all role Services at once.
<1> Specify one of `external-stable`, `external-unstable`, `cluster-internal` or a custom ListenerClass (the default setting is `cluster-internal`).
Loading