From 1e9d75d37eba09bb7e8ef3345f36bd68a3106c5f Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Tue, 7 Oct 2025 10:22:04 +0200 Subject: [PATCH 01/10] feat!: Add new `ListenerClass.stickyNodePorts` field --- crates/stackable-operator/CHANGELOG.md | 8 +++++++- crates/stackable-operator/crds/ListenerClass.yaml | 15 +++++++++++++++ .../src/crd/listener/class/mod.rs | 14 ++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/crates/stackable-operator/CHANGELOG.md b/crates/stackable-operator/CHANGELOG.md index 05b18d722..56a2f8339 100644 --- a/crates/stackable-operator/CHANGELOG.md +++ b/crates/stackable-operator/CHANGELOG.md @@ -4,12 +4,18 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Added + +- BREAKING: Add new `ListenerClass.stickyNodePorts` field ([#1XXX]). + +[#1XXX]: https://github.com/stackabletech/operator-rs/pull/1XXX + ## [0.99.0] - 2025-10-06 ### Added - Add CLI argument and env var to disable the end-of-support checker: `EOS_DISABLED` (`--eos-disabled`) ([#1101]). -- Add end-of-support checker ([#1096]). +- Add end-of-support checker ([#1096], ([#1103]). - The EoS checker can be constructed using `EndOfSupportChecker::new()`. - Add new `MaintenanceOptions` and `EndOfSupportOptions` structs. - Add new CLI arguments and env vars: diff --git a/crates/stackable-operator/crds/ListenerClass.yaml b/crates/stackable-operator/crds/ListenerClass.yaml index 11710b1dc..f569913ea 100644 --- a/crates/stackable-operator/crds/ListenerClass.yaml +++ b/crates/stackable-operator/crds/ListenerClass.yaml @@ -80,6 +80,21 @@ spec: - LoadBalancer - ClusterIP type: string + stickyNodePorts: + default: false + description: |- + Wether a Pod exposed using a NodePort should be pinned to a specific Kubernetes node. + + By pinning the Pod to a specific (stable) Kubernetes node, stable addresses can be + provided using NodePorts. The stickiness is achieved by listener-operator by setting the + `volume.kubernetes.io/selected-node` annotation on the Listener PVC. + + However, this only works on setups with long-living nodes. If your nodes are rotated on + a regular basis, the Pods previously running on a removed node will be stuck in Pending + until you delete the PVC with the stickiness. + + Because of this we don't enable stickiness by default to support all environments. + type: boolean required: - serviceType type: object diff --git a/crates/stackable-operator/src/crd/listener/class/mod.rs b/crates/stackable-operator/src/crd/listener/class/mod.rs index 25054e26f..75e5cf191 100644 --- a/crates/stackable-operator/src/crd/listener/class/mod.rs +++ b/crates/stackable-operator/src/crd/listener/class/mod.rs @@ -66,5 +66,19 @@ pub mod versioned { /// Defaults to `HostnameConservative`. #[serde(default = "ListenerClassSpec::default_preferred_address_type")] pub preferred_address_type: core_v1alpha1::PreferredAddressType, + + /// Wether a Pod exposed using a NodePort should be pinned to a specific Kubernetes node. + /// + /// By pinning the Pod to a specific (stable) Kubernetes node, stable addresses can be + /// provided using NodePorts. The stickiness is achieved by listener-operator by setting the + /// `volume.kubernetes.io/selected-node` annotation on the Listener PVC. + /// + /// However, this only works on setups with long-living nodes. If your nodes are rotated on + /// a regular basis, the Pods previously running on a removed node will be stuck in Pending + /// until you delete the PVC with the stickiness. + /// + /// Because of this we don't enable stickiness by default to support all environments. + #[serde(default)] + pub sticky_node_ports: bool, } } From 16a07e19197f1ba2bb129dae8de724cc149caae0 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Tue, 7 Oct 2025 10:23:46 +0200 Subject: [PATCH 02/10] changelog --- crates/stackable-operator/CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/stackable-operator/CHANGELOG.md b/crates/stackable-operator/CHANGELOG.md index 56a2f8339..705a00873 100644 --- a/crates/stackable-operator/CHANGELOG.md +++ b/crates/stackable-operator/CHANGELOG.md @@ -6,16 +6,16 @@ All notable changes to this project will be documented in this file. ### Added -- BREAKING: Add new `ListenerClass.stickyNodePorts` field ([#1XXX]). +- BREAKING: Add new `ListenerClass.stickyNodePorts` field ([#1105]). -[#1XXX]: https://github.com/stackabletech/operator-rs/pull/1XXX +[#1105]: https://github.com/stackabletech/operator-rs/pull/1105 ## [0.99.0] - 2025-10-06 ### Added - Add CLI argument and env var to disable the end-of-support checker: `EOS_DISABLED` (`--eos-disabled`) ([#1101]). -- Add end-of-support checker ([#1096], ([#1103]). +- Add end-of-support checker ([#1096], [#1103]). - The EoS checker can be constructed using `EndOfSupportChecker::new()`. - Add new `MaintenanceOptions` and `EndOfSupportOptions` structs. - Add new CLI arguments and env vars: From 0b5e63c9ba8542f6ccb5f6bb27df85f2cfb410ca Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Thu, 9 Oct 2025 12:51:50 +0200 Subject: [PATCH 03/10] Update crates/stackable-operator/src/crd/listener/class/mod.rs Co-authored-by: Techassi --- crates/stackable-operator/src/crd/listener/class/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/stackable-operator/src/crd/listener/class/mod.rs b/crates/stackable-operator/src/crd/listener/class/mod.rs index 75e5cf191..3150adeda 100644 --- a/crates/stackable-operator/src/crd/listener/class/mod.rs +++ b/crates/stackable-operator/src/crd/listener/class/mod.rs @@ -70,7 +70,7 @@ pub mod versioned { /// Wether a Pod exposed using a NodePort should be pinned to a specific Kubernetes node. /// /// By pinning the Pod to a specific (stable) Kubernetes node, stable addresses can be - /// provided using NodePorts. The stickiness is achieved by listener-operator by setting the + /// provided using NodePorts. The stickiness is achieved by listener-operator setting the /// `volume.kubernetes.io/selected-node` annotation on the Listener PVC. /// /// However, this only works on setups with long-living nodes. If your nodes are rotated on From 23a9028fdd52686144a7a3e7a65a7d76afe43a66 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Mon, 13 Oct 2025 10:06:17 +0200 Subject: [PATCH 04/10] Update crates/stackable-operator/src/crd/listener/class/mod.rs --- crates/stackable-operator/src/crd/listener/class/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/stackable-operator/src/crd/listener/class/mod.rs b/crates/stackable-operator/src/crd/listener/class/mod.rs index 3150adeda..1a0ba96b2 100644 --- a/crates/stackable-operator/src/crd/listener/class/mod.rs +++ b/crates/stackable-operator/src/crd/listener/class/mod.rs @@ -67,7 +67,7 @@ pub mod versioned { #[serde(default = "ListenerClassSpec::default_preferred_address_type")] pub preferred_address_type: core_v1alpha1::PreferredAddressType, - /// Wether a Pod exposed using a NodePort should be pinned to a specific Kubernetes node. + /// Wether or not a Pod exposed using a NodePort should be pinned to a specific Kubernetes node. /// /// By pinning the Pod to a specific (stable) Kubernetes node, stable addresses can be /// provided using NodePorts. The stickiness is achieved by listener-operator setting the From 7d82c52c2a5f9e5c28a7ab168529a16ad2cd46d2 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Mon, 13 Oct 2025 11:10:04 +0200 Subject: [PATCH 05/10] sticky -> pinning --- crates/stackable-operator/CHANGELOG.md | 2 +- .../crds/ListenerClass.yaml | 30 +++++++++---------- .../src/crd/listener/class/mod.rs | 8 ++--- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/crates/stackable-operator/CHANGELOG.md b/crates/stackable-operator/CHANGELOG.md index 705a00873..f256f1365 100644 --- a/crates/stackable-operator/CHANGELOG.md +++ b/crates/stackable-operator/CHANGELOG.md @@ -6,7 +6,7 @@ All notable changes to this project will be documented in this file. ### Added -- BREAKING: Add new `ListenerClass.stickyNodePorts` field ([#1105]). +- BREAKING: Add new `ListenerClass.pinningNodePorts` field ([#1105]). [#1105]: https://github.com/stackabletech/operator-rs/pull/1105 diff --git a/crates/stackable-operator/crds/ListenerClass.yaml b/crates/stackable-operator/crds/ListenerClass.yaml index f569913ea..bed27058f 100644 --- a/crates/stackable-operator/crds/ListenerClass.yaml +++ b/crates/stackable-operator/crds/ListenerClass.yaml @@ -41,6 +41,21 @@ spec: Ignored unless serviceType is LoadBalancer. nullable: true type: string + pinningNodePorts: + default: false + description: |- + Wether or not a Pod exposed using a NodePort should be pinned to a specific Kubernetes node. + + By pinning the Pod to a specific (stable) Kubernetes node, stable addresses can be + provided using NodePorts. The pinning is achieved by listener-operator setting the + `volume.kubernetes.io/selected-node` annotation on the Listener PVC. + + However, this only works on setups with long-living nodes. If your nodes are rotated on + a regular basis, the Pods previously running on a removed node will be stuck in Pending + until you delete the PVC with the pinning. + + Because of this we don't enable pinning by default to support all environments. + type: boolean preferredAddressType: default: HostnameConservative description: |- @@ -80,21 +95,6 @@ spec: - LoadBalancer - ClusterIP type: string - stickyNodePorts: - default: false - description: |- - Wether a Pod exposed using a NodePort should be pinned to a specific Kubernetes node. - - By pinning the Pod to a specific (stable) Kubernetes node, stable addresses can be - provided using NodePorts. The stickiness is achieved by listener-operator by setting the - `volume.kubernetes.io/selected-node` annotation on the Listener PVC. - - However, this only works on setups with long-living nodes. If your nodes are rotated on - a regular basis, the Pods previously running on a removed node will be stuck in Pending - until you delete the PVC with the stickiness. - - Because of this we don't enable stickiness by default to support all environments. - type: boolean required: - serviceType type: object diff --git a/crates/stackable-operator/src/crd/listener/class/mod.rs b/crates/stackable-operator/src/crd/listener/class/mod.rs index 1a0ba96b2..f17a3d13b 100644 --- a/crates/stackable-operator/src/crd/listener/class/mod.rs +++ b/crates/stackable-operator/src/crd/listener/class/mod.rs @@ -70,15 +70,15 @@ pub mod versioned { /// Wether or not a Pod exposed using a NodePort should be pinned to a specific Kubernetes node. /// /// By pinning the Pod to a specific (stable) Kubernetes node, stable addresses can be - /// provided using NodePorts. The stickiness is achieved by listener-operator setting the + /// provided using NodePorts. The pinning is achieved by listener-operator setting the /// `volume.kubernetes.io/selected-node` annotation on the Listener PVC. /// /// However, this only works on setups with long-living nodes. If your nodes are rotated on /// a regular basis, the Pods previously running on a removed node will be stuck in Pending - /// until you delete the PVC with the stickiness. + /// until you delete the PVC with the pinning. /// - /// Because of this we don't enable stickiness by default to support all environments. + /// Because of this we don't enable pinning by default to support all environments. #[serde(default)] - pub sticky_node_ports: bool, + pub pinning_node_ports: bool, } } From fa8aa89479ec884a4e5f7fdeb6c6181eda0cdc4c Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Mon, 13 Oct 2025 11:28:50 +0200 Subject: [PATCH 06/10] pinning -> pinned --- crates/stackable-operator/CHANGELOG.md | 2 +- crates/stackable-operator/crds/ListenerClass.yaml | 2 +- crates/stackable-operator/src/crd/listener/class/mod.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/stackable-operator/CHANGELOG.md b/crates/stackable-operator/CHANGELOG.md index f256f1365..8429d3db6 100644 --- a/crates/stackable-operator/CHANGELOG.md +++ b/crates/stackable-operator/CHANGELOG.md @@ -6,7 +6,7 @@ All notable changes to this project will be documented in this file. ### Added -- BREAKING: Add new `ListenerClass.pinningNodePorts` field ([#1105]). +- BREAKING: Add new `ListenerClass.pinnedNodePorts` field ([#1105]). [#1105]: https://github.com/stackabletech/operator-rs/pull/1105 diff --git a/crates/stackable-operator/crds/ListenerClass.yaml b/crates/stackable-operator/crds/ListenerClass.yaml index bed27058f..cd428f08e 100644 --- a/crates/stackable-operator/crds/ListenerClass.yaml +++ b/crates/stackable-operator/crds/ListenerClass.yaml @@ -41,7 +41,7 @@ spec: Ignored unless serviceType is LoadBalancer. nullable: true type: string - pinningNodePorts: + pinnedNodePorts: default: false description: |- Wether or not a Pod exposed using a NodePort should be pinned to a specific Kubernetes node. diff --git a/crates/stackable-operator/src/crd/listener/class/mod.rs b/crates/stackable-operator/src/crd/listener/class/mod.rs index f17a3d13b..929140ce1 100644 --- a/crates/stackable-operator/src/crd/listener/class/mod.rs +++ b/crates/stackable-operator/src/crd/listener/class/mod.rs @@ -79,6 +79,6 @@ pub mod versioned { /// /// Because of this we don't enable pinning by default to support all environments. #[serde(default)] - pub pinning_node_ports: bool, + pub pinned_node_ports: bool, } } From 6e2a6da558f17f0f8ebe5b1edd5f3b5ac4463442 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Mon, 13 Oct 2025 11:29:48 +0200 Subject: [PATCH 07/10] changelog --- crates/stackable-operator/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/stackable-operator/CHANGELOG.md b/crates/stackable-operator/CHANGELOG.md index 8429d3db6..e5c2937b2 100644 --- a/crates/stackable-operator/CHANGELOG.md +++ b/crates/stackable-operator/CHANGELOG.md @@ -6,7 +6,7 @@ All notable changes to this project will be documented in this file. ### Added -- BREAKING: Add new `ListenerClass.pinnedNodePorts` field ([#1105]). +- BREAKING: Add new ListenerClass `.spec..pinnedNodePorts` field ([#1105]). [#1105]: https://github.com/stackabletech/operator-rs/pull/1105 From eab4bfa3c381249b6b6408356f14305f55d695ea Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Mon, 13 Oct 2025 11:30:08 +0200 Subject: [PATCH 08/10] changelog --- crates/stackable-operator/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/stackable-operator/CHANGELOG.md b/crates/stackable-operator/CHANGELOG.md index e5c2937b2..e7f85f85a 100644 --- a/crates/stackable-operator/CHANGELOG.md +++ b/crates/stackable-operator/CHANGELOG.md @@ -6,7 +6,7 @@ All notable changes to this project will be documented in this file. ### Added -- BREAKING: Add new ListenerClass `.spec..pinnedNodePorts` field ([#1105]). +- BREAKING: Add new ListenerClass `.spec.pinnedNodePorts` field ([#1105]). [#1105]: https://github.com/stackabletech/operator-rs/pull/1105 From 247a9516324894a7fa35b0082e00a1c7a7430b12 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Mon, 13 Oct 2025 11:35:42 +0200 Subject: [PATCH 09/10] Update crates/stackable-operator/src/crd/listener/class/mod.rs Co-authored-by: Nick <10092581+NickLarsenNZ@users.noreply.github.com> --- crates/stackable-operator/src/crd/listener/class/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/stackable-operator/src/crd/listener/class/mod.rs b/crates/stackable-operator/src/crd/listener/class/mod.rs index 929140ce1..fb80787c8 100644 --- a/crates/stackable-operator/src/crd/listener/class/mod.rs +++ b/crates/stackable-operator/src/crd/listener/class/mod.rs @@ -67,7 +67,7 @@ pub mod versioned { #[serde(default = "ListenerClassSpec::default_preferred_address_type")] pub preferred_address_type: core_v1alpha1::PreferredAddressType, - /// Wether or not a Pod exposed using a NodePort should be pinned to a specific Kubernetes node. + /// Whether or not a Pod exposed using a NodePort should be pinned to a specific Kubernetes node. /// /// By pinning the Pod to a specific (stable) Kubernetes node, stable addresses can be /// provided using NodePorts. The pinning is achieved by listener-operator setting the From d966158f81c6446d9964b7ecd3b02f97d999ae96 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Mon, 13 Oct 2025 12:31:31 +0200 Subject: [PATCH 10/10] charts --- crates/stackable-operator/crds/ListenerClass.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/stackable-operator/crds/ListenerClass.yaml b/crates/stackable-operator/crds/ListenerClass.yaml index cd428f08e..e3625da67 100644 --- a/crates/stackable-operator/crds/ListenerClass.yaml +++ b/crates/stackable-operator/crds/ListenerClass.yaml @@ -44,7 +44,7 @@ spec: pinnedNodePorts: default: false description: |- - Wether or not a Pod exposed using a NodePort should be pinned to a specific Kubernetes node. + Whether or not a Pod exposed using a NodePort should be pinned to a specific Kubernetes node. By pinning the Pod to a specific (stable) Kubernetes node, stable addresses can be provided using NodePorts. The pinning is achieved by listener-operator setting the