From: David Riley <d.riley@proxmox.com>
To: Daniel Kral <d.kral@proxmox.com>, pve-devel@lists.proxmox.com
Subject: Re: [PATCH docs v2 12/12] ha-manager: rules: add negative node affinity rule descriptions
Date: Mon, 13 Jul 2026 14:44:18 +0200 [thread overview]
Message-ID: <c98322a5-74e8-4e5a-bb99-a1b930066bff@proxmox.com> (raw)
In-Reply-To: <20260602100226.180071-13-d.kral@proxmox.com>
On 6/2/26 12:03 PM, Daniel Kral wrote:
> Since the node affinity rules can be either 'positive' or 'negative'
> now, add some information about the new negative node affinity rules and
> why these are interesting to users in larger cluster setups.
>
> The following description about node priority classes is only slightly
> changed to make the reading flow a little smoother. Additionally, the HA
> resource identifiers are adapted as each can only be referenced by a
> single node affinity rule.
might be nicer to write:
"Additionally, HA resource identifiers were updated to reflect that each can only be
referenced by a single node affinity rule."
but no hard feelings.
> Signed-off-by: Daniel Kral<d.kral@proxmox.com>
> ---
> changes since v1:
> - new
>
> ha-manager.adoc | 42 +++++++++++++++++++++++++++++++++++-------
> 1 file changed, 35 insertions(+), 7 deletions(-)
>
> diff --git a/ha-manager.adoc b/ha-manager.adoc
> index 802e5b9..369f0ec 100644
> --- a/ha-manager.adoc
> +++ b/ha-manager.adoc
> @@ -709,6 +709,13 @@ include::generated/ha-rules-opts.adoc[]
> | HA Rule Type | Description
> | `node-affinity` | Places affinity from one or more HA resources to one or
> more nodes.
> +
> +The affinity `positive` specifies that HA resources should/must be kept on one
nit: should or must instead of /
but no hard feelings on that.
> +of the specified nodes, while the affinity `negative` specifes that the HA
typo: specifes/specifies
> +resources should/must avoid the specified nodes.
> +
> +The strictness attribute `strict` specifies whether this is a soft constraint
> +("should") or whether tis is a hard constraint ("must").
typo: tis should probably be it
> | `resource-affinity` | Places affinity between two or more HA resources.
>
> The affinity `positive` specifies that HA resources must be kept on the same
> @@ -741,11 +748,23 @@ resource `vm:100` to be only on `node1`:
> # ha-manager rules set node-affinity ha-rule-vm100 --strict 1
> ----
>
> -For bigger clusters or specific use cases, it makes sense to define a more
> -detailed failover behavior. For example, the resources `vm:200` and `ct:300`
> -should run on `node1`. If `node1` becomes unavailable, the resources should be
> -distributed on `node2` and `node3`. If `node2` and `node3` are also
> -unavailable, the resources should run on `node4`.
> +Furthermore, node affinity rules use positive affinity by default, meaning that
> +the preferred cluster nodes must be explicitly specified. However, in larger
> +clusters, it is often more practical to define node affinity using an opt-out
> +approach to avoid long and verbose lists of cluster nodes. For example, the
> +following command defines an HA node affinity rule that makes the HA resource
typo: plural resource/resources
as we have ct:200 and vm:300
> +`ct:200` and `vm:300` avoid the node `node3`:
> +
> +----
> +# ha-manager rules add node-affinity ha-rule-negative \
> + --affinity negative --resources ct:200,vm:300 --nodes node3
> +----
> +
> +Moreover, specific use cases might require to define a more detailed failover
might sound better:
specific use cases might require defining a more detailed failover behavior.
> +behavior. For example, the resources `vm:400` and `ct:500` should run on
> +`node1`. If `node1` becomes unavailable, the resources should be distributed on
> +`node2` and `node3`. If `node2` and `node3` are also unavailable, the resources
> +should run on `node4`.
>
> To implement this behavior in a node affinity rule, nodes can be paired with
> priorities to order the preference for nodes. If two or more nodes have the same
> @@ -755,7 +774,7 @@ last `node4` gets the lowest priority, which can be omitted to default to `0`:
>
> ----
> # ha-manager rules add node-affinity priority-cascade \
> - --resources vm:200,ct:300 --nodes "node1:2,node2:1,node3:1,node4"
> + --resources vm:400,ct:500 --nodes "node1:2,node2:1,node3:1,node4"
> ----
>
> The above commands create the following rules in the rules configuration file:
> @@ -767,9 +786,14 @@ node-affinity: ha-rule-vm100
> resources vm:100
> strict 1
>
> +node-affinity: ha-rule-negative
> + nodes node3
> + resources ct:200,vm:300
> + affinity negative
> +
> node-affinity: priority-cascade
> nodes node1:2,node2:1,node3:1,node4
> - resources vm:200,ct:300
> + resources vm:400,ct:500
> ----
>
> Node Affinity Rule Properties
> @@ -896,6 +920,10 @@ Currently, HA rules are checked for the following feasibility tests:
>
> * An HA resource can only be part of a single HA node affinity rule.
>
> +* Negative HA node affinity rules cannot specify node priorities.
> +
> +* Negative HA node affinity rules cannot specify all cluster nodes.
> +
> * An HA resource affinity rule must have at least two HA resources.
>
> * A negative HA resource affinity rule cannot specify more HA resources than
prev parent reply other threads:[~2026-07-13 12:45 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-02 10:01 [PATCH-SERIES docs/ha-manager/manager v2 00/12] Negative Node Affinity Rules Daniel Kral
2026-06-02 10:01 ` [PATCH ha-manager v2 01/12] rules: node affinity: add affinity property to node affinity rules Daniel Kral
2026-06-02 10:01 ` [PATCH ha-manager v2 02/12] rules: rename ambiguous argument nodes to cluster nodes Daniel Kral
2026-07-13 12:41 ` David Riley
2026-06-02 10:01 ` [PATCH ha-manager v2 03/12] rules: node affinity: implement negative node affinity rules Daniel Kral
2026-07-13 12:43 ` David Riley
2026-07-14 7:36 ` Daniel Kral
2026-06-02 10:01 ` [PATCH manager v2 04/12] ui: ha: node affinity: handle non-existent nodes Daniel Kral
2026-06-02 10:01 ` [PATCH manager v2 05/12] ui: ha: node affinity: do update node selection all at once Daniel Kral
2026-06-02 10:01 ` [PATCH manager v2 06/12] ui: ha: node affinity: move node priority selector into separate component Daniel Kral
2026-07-13 12:43 ` David Riley
2026-07-14 7:57 ` Daniel Kral
2026-07-14 8:51 ` David Riley
2026-06-02 10:01 ` [PATCH manager v2 07/12] ui: ha: node affinity: allow setting affinity for node affinity rules Daniel Kral
2026-07-13 12:43 ` David Riley
2026-07-14 8:39 ` Daniel Kral
2026-06-02 10:01 ` [PATCH manager v2 08/12] ui: ha: node affinity: do not send default node affinity rule values Daniel Kral
2026-07-13 12:43 ` David Riley
2026-06-02 10:01 ` [PATCH docs v2 09/12] ha-manager: rules: use the correct article for terms starting with HA Daniel Kral
2026-07-13 12:43 ` David Riley
2026-06-02 10:01 ` [PATCH docs v2 10/12] ha-manager: rules: improve resource affinity rule short description Daniel Kral
2026-07-13 12:44 ` David Riley
2026-06-02 10:01 ` [PATCH docs v2 11/12] ha-manager: rules: adapt rule configuration examples Daniel Kral
2026-07-13 12:44 ` David Riley
2026-06-02 10:01 ` [PATCH docs v2 12/12] ha-manager: rules: add negative node affinity rule descriptions Daniel Kral
2026-07-13 12:44 ` David Riley [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c98322a5-74e8-4e5a-bb99-a1b930066bff@proxmox.com \
--to=d.riley@proxmox.com \
--cc=d.kral@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox