mirror of
https://github.com/gyptazy/ProxLB.git
synced 2026-04-06 04:41:58 +02:00
Compare commits
270 Commits
fix/115-ig
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c39301ca96 | ||
|
|
b7a6fcec0c | ||
|
|
9966fbb13f | ||
|
|
e6ae357838 | ||
|
|
65b1bd5fee | ||
|
|
72283d8c19 | ||
|
|
4f85feacde | ||
|
|
34e340c25c | ||
|
|
da193f9d27 | ||
|
|
f11ca263b8 | ||
|
|
0af770c9df | ||
|
|
a9d11daf40 | ||
|
|
ab7ee0d687 | ||
|
|
e841481fdd | ||
|
|
5b7cc6727f | ||
|
|
15a05d320e | ||
|
|
e0331e83e1 | ||
|
|
ffd74d47e9 | ||
|
|
89ad425243 | ||
|
|
2ce3d73262 | ||
|
|
b8093454d7 | ||
|
|
d7631ef8f5 | ||
|
|
d546036a9a | ||
|
|
09b5b83c24 | ||
|
|
8d61ccfbb1 | ||
|
|
b39c13e2a5 | ||
|
|
8e759b778c | ||
|
|
22406e3628 | ||
|
|
e7f5d5142e | ||
|
|
48d621a06d | ||
|
|
c133ef1aee | ||
|
|
9ea04f904d | ||
|
|
5101202f72 | ||
|
|
929390b288 | ||
|
|
d4560c3af4 | ||
|
|
55c885194e | ||
|
|
3d9f0eb85e | ||
|
|
490fb55ee1 | ||
|
|
a70330d4c3 | ||
|
|
71d373eedb | ||
|
|
040eeb9f13 | ||
|
|
4ef1e92aad | ||
|
|
7e5fe13dfe | ||
|
|
66c2ab6570 | ||
|
|
ba63514896 | ||
|
|
571025a8a6 | ||
|
|
dd13181cf9 | ||
|
|
37d19a6a2d | ||
|
|
fe333749ce | ||
|
|
8f9bcfcdcf | ||
|
|
ff5fd2f7f1 | ||
|
|
1f6576ecd6 | ||
|
|
46bbe01141 | ||
|
|
07ed12fcb7 | ||
|
|
546fbc7d73 | ||
|
|
15436c431f | ||
|
|
33f6ff8db0 | ||
|
|
84628f232e | ||
|
|
6a91afd405 | ||
|
|
909643a09f | ||
|
|
7de1ba366b | ||
|
|
0cb19fab34 | ||
|
|
972b10b7e5 | ||
|
|
7fa110e465 | ||
|
|
948df0316b | ||
|
|
016378e37c | ||
|
|
8a193b9891 | ||
|
|
30e3b66be9 | ||
|
|
b9be405194 | ||
|
|
ac108f2abe | ||
|
|
02b43d3ef7 | ||
|
|
581d6d480b | ||
|
|
5b395b7f15 | ||
|
|
7d94c52883 | ||
|
|
7d19788be1 | ||
|
|
0bbc5992ca | ||
|
|
a4a5d9e68a | ||
|
|
af98ee8d5b | ||
|
|
afc93f7b21 | ||
|
|
bc6d8c8509 | ||
|
|
6d50f32486 | ||
|
|
5fe49a9dc1 | ||
|
|
fca1d1211c | ||
|
|
36388d9429 | ||
|
|
3f424e9e6d | ||
|
|
44a733aed3 | ||
|
|
2f44ff48a0 | ||
|
|
7b6db9cfdd | ||
|
|
8c473b416c | ||
|
|
51c8afe5c5 | ||
|
|
a8a154abde | ||
|
|
554a3eaf72 | ||
|
|
0b35987403 | ||
|
|
d93048db69 | ||
|
|
2aba7dbe23 | ||
|
|
ba388dfd7c | ||
|
|
5aa8257d40 | ||
|
|
99fefe20bf | ||
|
|
b9fb3a60e1 | ||
|
|
88b3288eb7 | ||
|
|
fa0113f112 | ||
|
|
0039ae9093 | ||
|
|
e3bbf31fdd | ||
|
|
bf393c6bbf | ||
|
|
7e5b72cfc7 | ||
|
|
0ba76f80f3 | ||
|
|
b48ff9d677 | ||
|
|
b5c11af474 | ||
|
|
af2992747d | ||
|
|
fb8dc40c16 | ||
|
|
34f1de8367 | ||
|
|
0e992e99de | ||
|
|
f5d073dc02 | ||
|
|
70ba1f2dfc | ||
|
|
c9855f1991 | ||
|
|
9bd29158b9 | ||
|
|
1ff0c5d96e | ||
|
|
3eb4038723 | ||
|
|
47e7dd3c56 | ||
|
|
bb8cf9033d | ||
|
|
756b4efcbd | ||
|
|
8630333e4b | ||
|
|
7bd9a9b038 | ||
|
|
16651351de | ||
|
|
63805f1f50 | ||
|
|
c0ff1b5273 | ||
|
|
07f8596fc5 | ||
|
|
affbe433f9 | ||
|
|
7bda22e754 | ||
|
|
253dcf8eb9 | ||
|
|
6212d23268 | ||
|
|
cf8c06393f | ||
|
|
5c23fd3433 | ||
|
|
0fb732fc8c | ||
|
|
f36d96c72a | ||
|
|
9cc03717ef | ||
|
|
4848887ccc | ||
|
|
04476feeaf | ||
|
|
b3765bf0ae | ||
|
|
806b728a14 | ||
|
|
2c34ec91b1 | ||
|
|
08b746a53b | ||
|
|
615e2f5608 | ||
|
|
fa1e1ad8a3 | ||
|
|
c78def3919 | ||
|
|
54c53b9860 | ||
|
|
1fe8f703cc | ||
|
|
7ba806abf7 | ||
|
|
6b2e120739 | ||
|
|
e4103df326 | ||
|
|
f2acd4efa6 | ||
|
|
f4ed8d9928 | ||
|
|
ba74254b93 | ||
|
|
792a0f3820 | ||
|
|
b766041c4c | ||
|
|
a31e41f839 | ||
|
|
7cb5a31b89 | ||
|
|
617d0a3ae3 | ||
|
|
db3a3b77fc | ||
|
|
5a9643275a | ||
|
|
60d1e333aa | ||
|
|
96dc435cf6 | ||
|
|
263b08b53a | ||
|
|
89102d517e | ||
|
|
845af4abc8 | ||
|
|
3e02403598 | ||
|
|
0b0d569877 | ||
|
|
1cbda2e2f9 | ||
|
|
b6febf1933 | ||
|
|
53a6d2a459 | ||
|
|
6c82ce010b | ||
|
|
4b8b73e468 | ||
|
|
a75729dd6a | ||
|
|
b8792a87af | ||
|
|
c1261a2d3c | ||
|
|
0035f57738 | ||
|
|
b372d361e7 | ||
|
|
1e096e1aae | ||
|
|
420d669236 | ||
|
|
24aa6aabc6 | ||
|
|
5a9a4af532 | ||
|
|
50f93e5f59 | ||
|
|
33784f60b4 | ||
|
|
9a261aa781 | ||
|
|
366d5bc264 | ||
|
|
96ffa086b1 | ||
|
|
db005c138e | ||
|
|
1168f545e5 | ||
|
|
cc663c0518 | ||
|
|
40de31bc3b | ||
|
|
5884d76ff4 | ||
|
|
7cc59eb6fc | ||
|
|
24b3b35640 | ||
|
|
f2b8829299 | ||
|
|
4b64a041cc | ||
|
|
bd1157127a | ||
|
|
be6e4bbfa0 | ||
|
|
25b631099c | ||
|
|
1d698c5688 | ||
|
|
40f848ad7f | ||
|
|
fd2725c878 | ||
|
|
34b1d72e40 | ||
|
|
ca7db26976 | ||
|
|
94552f9c9e | ||
|
|
32c67b9c96 | ||
|
|
89f337d8c3 | ||
|
|
8a724400b8 | ||
|
|
f96f1d0f64 | ||
|
|
15398712ee | ||
|
|
ddb9963062 | ||
|
|
f18a9f3d4c | ||
|
|
1402ba9732 | ||
|
|
af51f53221 | ||
|
|
bce2d640ef | ||
|
|
1bb1847e45 | ||
|
|
e9543db138 | ||
|
|
a8e8229787 | ||
|
|
d1c91c6f2a | ||
|
|
843691f8b4 | ||
|
|
c9f14946d1 | ||
|
|
77cd7b5388 | ||
|
|
55502f9bed | ||
|
|
f08b823cc4 | ||
|
|
f831d4044f | ||
|
|
e8d8d160a7 | ||
|
|
dbbd4c0ec8 | ||
|
|
fc9a0e2858 | ||
|
|
17eb43db94 | ||
|
|
06610e9b9d | ||
|
|
889b88fd6c | ||
|
|
c5ca3e13e0 | ||
|
|
c1c524f092 | ||
|
|
7ea7defa1f | ||
|
|
6147c0085b | ||
|
|
0b70a9c767 | ||
|
|
d6d22c4096 | ||
|
|
6da54c1255 | ||
|
|
b55b4ea7a0 | ||
|
|
51625fe09e | ||
|
|
f3b9d33c87 | ||
|
|
8e4326f77a | ||
|
|
3d642a7404 | ||
|
|
552364471d | ||
|
|
cf15866270 | ||
|
|
7d4def14b1 | ||
|
|
20ad9389d4 | ||
|
|
d73073a187 | ||
|
|
b307d556e5 | ||
|
|
17c4dc445e | ||
|
|
03ea29ae81 | ||
|
|
e22a27652c | ||
|
|
c3ae3e1f8c | ||
|
|
094a9b2ebb | ||
|
|
d8b1c74155 | ||
|
|
c8fad9605c | ||
|
|
e8d0c13f16 | ||
|
|
f781e74d3a | ||
|
|
3cbdb12741 | ||
|
|
a714ea8d64 | ||
|
|
d81d4380de | ||
|
|
31498da25a | ||
|
|
7f59f69eab | ||
|
|
200b7cd170 | ||
|
|
94df2fd1a6 | ||
|
|
8d8fd518fe | ||
|
|
37bb226cf0 | ||
|
|
48b8a07135 | ||
|
|
222beb360c | ||
|
|
f9b30d0af4 | ||
|
|
28f87e2907 |
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fix maintenance mode when using cli arg and config mode by using the merged list (by @CartCaved). [#119]
|
||||
@@ -1 +1 @@
|
||||
date: TBD
|
||||
date: 2024-12-24
|
||||
|
||||
11
.changelogs/1.1.0/114_refactor_code_base.yml
Normal file
11
.changelogs/1.1.0/114_refactor_code_base.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
fixed:
|
||||
- Refactored code base for ProxLB [#114]
|
||||
- Switched to `pycodestyle` for linting [#114]
|
||||
- Package building will be done within GitHub actions pipeline [#114]
|
||||
- ProxLB now only returns a warning when no guests for further balancing are not present (instead of quitting) [132#]
|
||||
- All nodes (according to the free resources) will be used now [#130]
|
||||
- Fixed logging outputs where highest/lowest were mixed-up [#129]
|
||||
- Stop balancing when movement would get worste (new force param to enfoce for affinity rules) [#128]
|
||||
- Added requested documentation regarding Proxmox HA groups [#127]
|
||||
- Rewrite of the whole affinity/anti-affinity rules evaluation and placement [#123]
|
||||
- Fixed the `ignore` parameter for nodes where the node and guests on the node will be untouched [#102]
|
||||
@@ -0,0 +1,2 @@
|
||||
feature:
|
||||
- Add Proxmox API authentication support. [#125]
|
||||
2
.changelogs/1.1.0/137_fix_systemd_unit_file.yml
Normal file
2
.changelogs/1.1.0/137_fix_systemd_unit_file.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fix the systemd unit file to start ProxLB after pveproxy (by @robertdahlem). [#137]
|
||||
1
.changelogs/1.1.0/release_meta.yml
Normal file
1
.changelogs/1.1.0/release_meta.yml
Normal file
@@ -0,0 +1 @@
|
||||
date: 2025-04-01
|
||||
2
.changelogs/1.1.1/163_fix_ignore_vm_tag.yml
Normal file
2
.changelogs/1.1.1/163_fix_ignore_vm_tag.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fix tag evluation for VMs for being ignored for further balancing [#163]
|
||||
2
.changelogs/1.1.1/165_improve_logging_servity.yml
Normal file
2
.changelogs/1.1.1/165_improve_logging_servity.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Improve logging verbosity of messages that had a wrong servity [#165]
|
||||
2
.changelogs/1.1.1/168_add_more_flexible_schedules.yml
Normal file
2
.changelogs/1.1.1/168_add_more_flexible_schedules.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
feature:
|
||||
- Add a more flexible way to define schedules in minutes or hours (by @gyptazy) [#168]
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fix Python path for Docker entrypoint (by @crandler) [#170]
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Honor the value when balancing should not be performed and stop balancing [#174]
|
||||
@@ -0,0 +1,2 @@
|
||||
changed:
|
||||
- Change the default behaviour of the daemon mode to active [#176]
|
||||
@@ -0,0 +1,2 @@
|
||||
changed:
|
||||
- Change the default banalcing mode to used instead of assigned [#180]
|
||||
@@ -0,0 +1,2 @@
|
||||
feature:
|
||||
- Add validation for the minimum required permissions of a user in Proxmox [#184]
|
||||
@@ -0,0 +1,2 @@
|
||||
fix:
|
||||
- add handler to log messages with severity less than info to the screen when there is no systemd integration, for instance, inside a docker container (by @glitchvern) [#185]
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- allow the use of minutes instead of hours and only accept hours or minutes in the format (by @glitchvern) [#187]
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Set cpu_used to the cpu usage, which is a percent, times the total number of cores to get a number where guest cpu_used can be added to nodes cpu_used and be meaningful (by @glitchvern) [#195]
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Remove hard coded memory usage from lowest usage node and use method and mode specified in configuration instead (by @glitchvern) [#197]
|
||||
2
.changelogs/1.1.1/200_requery_zero_guest_cpu_used.yml
Normal file
2
.changelogs/1.1.1/200_requery_zero_guest_cpu_used.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Requery a guest if that running guest reports 0 cpu usage (by @glitchvern) [#200]
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fix the guest type relationship in the logs when a migration job failed (by @gyptazy) [#204]
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Providing the API upstream error message when migration fails in debug mode (by @gyptazy) [#205]
|
||||
1
.changelogs/1.1.1/release_meta.yml
Normal file
1
.changelogs/1.1.1/release_meta.yml
Normal file
@@ -0,0 +1 @@
|
||||
date: 2025-04-20
|
||||
2
.changelogs/1.1.10/335-prevalidate-affinity-matrix.yml
Normal file
2
.changelogs/1.1.10/335-prevalidate-affinity-matrix.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Prevent redundant rebalancing by validating existing affinity enforcement before taking actions (@gyptazy). [#335]
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add safety-guard for PVE 8 users when activating conntrack-aware migrations mistakenly (@gyptazy). [#359]
|
||||
@@ -0,0 +1,3 @@
|
||||
fixed:
|
||||
- Fixed the Proxmox API connection validation which returned a false-positive logging message of timeouts (@gyptazy). [#361]
|
||||
- Refactored Proxmox API connection functions
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fixed a crash during PVE resource pool enumeration by skipping members not having a 'name' property (@stefanoettl). [#368]
|
||||
1
.changelogs/1.1.10/release_meta.yml
Normal file
1
.changelogs/1.1.10/release_meta.yml
Normal file
@@ -0,0 +1 @@
|
||||
date: 2025-11-25
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fixed missing overprovisioning safety guard to avoid node overprovisioning (@gyptazy). [#275]
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fixed affinity matrix pre-validation by inverting validations (@Thalagyrt). [#335]
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add resource reservation support for PVE nodes (@Chipmonk2). [#373]
|
||||
@@ -0,0 +1,3 @@
|
||||
changed:
|
||||
- Changed balancing and sorting behaviour (@gyptazy). [#378]
|
||||
- Balancing objects will be ordered by: count of objects in affinity-rules, followed by memory size
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add possibility to sort and select balancing workloads by smaller/larger guest objects (@gyptazy). [#387]
|
||||
@@ -0,0 +1,3 @@
|
||||
added:
|
||||
- Add support for Proxmox's native HA (affinity/anti-affinity) rules (@gyptazy). [#391]
|
||||
- Add support for Proxmox's native HA (node-affinity) rules for pinning guests to nodes (@gyptazy). [#391]
|
||||
2
.changelogs/1.1.11/395_fix_pool_based_node_pinning.yml
Normal file
2
.changelogs/1.1.11/395_fix_pool_based_node_pinning.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fixed pool based node pinning (@gyptazy). [#395]
|
||||
2
.changelogs/1.1.11/402_add_ha_job_validation.yml
Normal file
2
.changelogs/1.1.11/402_add_ha_job_validation.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add HA job validation for migration jobs (@gytazy). [#402]
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add support for configuring node-pinning strictness (default: true) within pools (@gyptazy). [#406]
|
||||
2
.changelogs/1.1.11/408_fix_moving_ignored_guests.yml
Normal file
2
.changelogs/1.1.11/408_fix_moving_ignored_guests.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fixed that ignored VMs/CTs got moved to another node when being ignored (@gyptazy). [#408]
|
||||
2
.changelogs/1.1.11/414_add_pinning_enforcement.yml
Normal file
2
.changelogs/1.1.11/414_add_pinning_enforcement.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add new option to enforce node/guest pinning even when cluster is balanced from a resource perspective (@gyptazy). [#414]
|
||||
1
.changelogs/1.1.11/release_meta.yml
Normal file
1
.changelogs/1.1.11/release_meta.yml
Normal file
@@ -0,0 +1 @@
|
||||
date: 2026-01-12
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fix PSI based balancing which resulted in a Python KeyError (@gyptazy). [#420]
|
||||
1
.changelogs/1.1.12/release_meta.yml
Normal file
1
.changelogs/1.1.12/release_meta.yml
Normal file
@@ -0,0 +1 @@
|
||||
date: TBD
|
||||
2
.changelogs/1.1.2/137_fix_systemd_unit_file.yml
Normal file
2
.changelogs/1.1.2/137_fix_systemd_unit_file.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fix systemd unit file to run after network on non PVE nodes (by @robertdahlem) [#137]
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add a configurable retry mechanism when connecting to the Proxmox API (by @gyptazy) [#157]
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add 1-to-1 relationships between guest and hypervisor node to ping a guest on a node (by @gyptazy) [#218]
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Force type cast cpu count of guests to int for some corner cases where a str got returned (by @gyptazy). [#222]
|
||||
1
.changelogs/1.1.2/release_meta.yml
Normal file
1
.changelogs/1.1.2/release_meta.yml
Normal file
@@ -0,0 +1 @@
|
||||
date: 2025-05-13
|
||||
2
.changelogs/1.1.3/189_add_reload_function.yml
Normal file
2
.changelogs/1.1.3/189_add_reload_function.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add relaod (SIGHUP) function to ProxLB to reload the configuration (by @gyptazy). [#189]
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Align maintenance mode with Proxmox HA maintenance mode (by @gyptazy). [#232]
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add optional wait time parameter to delay execution until the service takes action (by @gyptazy). #239
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Make the amount of parallel migrations configurable (by @gyptazy). [#241]
|
||||
@@ -0,0 +1,2 @@
|
||||
changed:
|
||||
- Use the average CPU consumption of a guest within the last 60 minutes instead of the current CPU usage (by @philslab-ninja & @gyptazy). [#94]
|
||||
1
.changelogs/1.1.3/release_meta.yml
Normal file
1
.changelogs/1.1.3/release_meta.yml
Normal file
@@ -0,0 +1 @@
|
||||
date: 2025-06-19
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Allow pinning of guests to a group of nodes (@gyptazy). [#245]
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fixed an issue where balancing was performed in combination of deactivated balancing and dry-run mode (@gyptazy). [#248]
|
||||
2
.changelogs/1.1.4/255_fix_loglevels.yml
Normal file
2
.changelogs/1.1.4/255_fix_loglevels.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Modified log levels to make output lighter at INFO level (@pmarasse) [#255]
|
||||
1
.changelogs/1.1.4/release_meta.yml
Normal file
1
.changelogs/1.1.4/release_meta.yml
Normal file
@@ -0,0 +1 @@
|
||||
date: 2025-06-27
|
||||
2
.changelogs/1.1.5/260_allow_custom_api_ports.yml
Normal file
2
.changelogs/1.1.5/260_allow_custom_api_ports.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Allow custom API ports instead of fixed tcp/8006 (@gyptazy). [#260]
|
||||
1
.changelogs/1.1.5/release_meta.yml
Normal file
1
.changelogs/1.1.5/release_meta.yml
Normal file
@@ -0,0 +1 @@
|
||||
date: 2025-07-14
|
||||
2
.changelogs/1.1.6/268_fix_balancing_type_eval.yml
Normal file
2
.changelogs/1.1.6/268_fix_balancing_type_eval.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fix balancing evaluation of guest types (e.g., VM or CT) (@gyptazy). [#268]
|
||||
2
.changelogs/1.1.6/290_validate_user_token_syntax.yml
Normal file
2
.changelogs/1.1.6/290_validate_user_token_syntax.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add validation for provided API user token id to avoid confusions (@gyptazy). [#291]
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fix stacktrace output when validating permissions on non existing users in Proxmox (@gyptazy). [#291]
|
||||
@@ -0,0 +1,3 @@
|
||||
fixed:
|
||||
- Fix Overprovisioning first node if anti_affinity_group has only one member (@MiBUl-eu). [#295]
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
fixed:
|
||||
- Validate for node presence when pinning guests to avoid crashing (@gyptazy). [#296]
|
||||
|
||||
1
.changelogs/1.1.6/release_meta.yml
Normal file
1
.changelogs/1.1.6/release_meta.yml
Normal file
@@ -0,0 +1 @@
|
||||
date: 2025-09-04
|
||||
2
.changelogs/1.1.7/304_add_graceful_shutdown_sigint.yml
Normal file
2
.changelogs/1.1.7/304_add_graceful_shutdown_sigint.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add graceful shutdown for SIGINT (e.g., CTRL + C abort). (@gyptazy). [#304]
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add conntrack state aware migrations of VMs (@gyptazy). [#305]
|
||||
2
.changelogs/1.1.7/308_fix_only_validate_valid_jobids.yml
Normal file
2
.changelogs/1.1.7/308_fix_only_validate_valid_jobids.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fix crash when validating absent migration job ids. (@gyptazy). [#308]
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fix guest object names are not being evaluated in debug log. (@gyptazy). [#310]
|
||||
1
.changelogs/1.1.7/release_meta.yml
Normal file
1
.changelogs/1.1.7/release_meta.yml
Normal file
@@ -0,0 +1 @@
|
||||
date: 2025-09-19
|
||||
3
.changelogs/1.1.8/317_container_image_non_root.yml
Normal file
3
.changelogs/1.1.8/317_container_image_non_root.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
changed:
|
||||
- Container image does not run as root anymore (@mikaelkrantz945). [#317]
|
||||
- Container image uses venv for running ProxLB (@mikaelkrantz945). [#317]
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fix API errors when using conntrack aware migration with older PVE versions (@gyptazy). [#318]
|
||||
2
.changelogs/1.1.8/329_add_log_prefix.yml
Normal file
2
.changelogs/1.1.8/329_add_log_prefix.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Add a static ProxLB prefix to the log output when used by journal handler (@gyptazy). [#329]
|
||||
1
.changelogs/1.1.8/release_meta.yml
Normal file
1
.changelogs/1.1.8/release_meta.yml
Normal file
@@ -0,0 +1 @@
|
||||
date: 2025-10-09
|
||||
5
.changelogs/1.1.9/337_add_pressure_based_balancing.yml
Normal file
5
.changelogs/1.1.9/337_add_pressure_based_balancing.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
added:
|
||||
- Add pressure (PSI) based balancing for memory, cpu, disk (req. PVE9 or greater) (@gyptazy). [#337]
|
||||
- Pressure (PSI) based balancing for nodes
|
||||
- Pressure (PSI) based balancing for guests
|
||||
- Add PVE version evaluation
|
||||
2
.changelogs/1.1.9/342_add_memory_balancing_threshold.yml
Normal file
2
.changelogs/1.1.9/342_add_memory_balancing_threshold.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add an optional memory balancing threshold (@gyptazy). [#342]
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add affinity/anti-affinity support by pools (@gyptazy). [#343]
|
||||
1
.changelogs/1.1.9/release_meta.yml
Normal file
1
.changelogs/1.1.9/release_meta.yml
Normal file
@@ -0,0 +1 @@
|
||||
date: 2025-10-30
|
||||
3
.flake8
3
.flake8
@@ -1,3 +0,0 @@
|
||||
[flake8]
|
||||
per-file-ignores =
|
||||
proxlb: E501,E221,E266,E231,E127,E222,E128
|
||||
26
.github/workflows/02-create-package.yml
vendored
26
.github/workflows/02-create-package.yml
vendored
@@ -1,26 +0,0 @@
|
||||
name: Run basic pipeline on push
|
||||
on: [push]
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: ["3.8"]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Python for ProxLB
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: Install dependencies for ProxLB
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install pytest proxmoxer flake8
|
||||
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
||||
- name: Run Python linting
|
||||
run: |
|
||||
python3 -m flake8 proxlb
|
||||
- name: Create distro packages
|
||||
run: |
|
||||
cd packaging
|
||||
./01_package.sh
|
||||
21
.github/workflows/10-code-liniting.yml
vendored
Normal file
21
.github/workflows/10-code-liniting.yml
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
name: Code linting
|
||||
on: [push]
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: ["3.8"]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Setup dependencies for code linting
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: Install additional dependencies for code linting
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get -y install python3-pycodestyle pycodestyle
|
||||
- name: Run code linting on ProxLB Python code
|
||||
run: |
|
||||
pycodestyle proxlb/*
|
||||
100
.github/workflows/20-pipeline-build-deb-package.yml
vendored
Normal file
100
.github/workflows/20-pipeline-build-deb-package.yml
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
name: "Build package: .deb"
|
||||
on: [push]
|
||||
jobs:
|
||||
lint-code-proxlb:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: ["3.8"]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Setup dependencies for code linting
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: Install additional dependencies for code linting
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get -y install python3-pycodestyle pycodestyle
|
||||
- name: Run code linting on ProxLB Python code
|
||||
run: |
|
||||
pycodestyle proxlb/* && \
|
||||
echo "OK: Code linting successfully performed on ProxLB code."
|
||||
|
||||
build-package-debian:
|
||||
needs: lint-code-proxlb
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ github.ref }}
|
||||
|
||||
- name: Set up Docker with Debian image
|
||||
run: |
|
||||
docker pull debian:latest
|
||||
|
||||
- name: Build DEB package in Docker container
|
||||
run: |
|
||||
docker run --rm -v $(pwd):/workspace -w /workspace debian:latest bash -c "
|
||||
# Install dependencies
|
||||
apt-get update && \
|
||||
apt-get install -y python3 python3-setuptools debhelper dh-python python3-pip python3-stdeb python3-proxmoxer python3-requests python3-urllib3 devscripts python3-all && \
|
||||
|
||||
# Get base version from source code
|
||||
BASE_VERSION=\$(grep __version__ proxlb/utils/version.py | awk '{print \$3}' | tr -d '\"')
|
||||
echo \"Base version: \$BASE_VERSION\"
|
||||
|
||||
# Build full version with timestamp
|
||||
FULL_VERSION=\"\${BASE_VERSION}+$(date +%Y%m%d%H%M)\"
|
||||
echo \"Full version: \$FULL_VERSION\"
|
||||
|
||||
# Update debian/changelog with new version
|
||||
dch --force-bad-version -v \"\$FULL_VERSION\" \
|
||||
\"Automated GitHub Actions build on $(date -u +'%Y-%m-%d %H:%M UTC').\" && \
|
||||
|
||||
# Build package using stdeb / setuptools
|
||||
# python3 setup.py --command-packages=stdeb.command bdist_deb && \
|
||||
# Build native package
|
||||
dpkg-buildpackage -us -uc && \
|
||||
mkdir package && \
|
||||
mv ../*.deb package/ && \
|
||||
echo 'OK: Debian package successfully created.'
|
||||
"
|
||||
|
||||
- name: Upload Debian package python3-proxlb as artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: debian-package
|
||||
path: package/*.deb
|
||||
|
||||
integration-test-debian:
|
||||
needs: build-package-debian
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
debian_version: [bookworm, trixie]
|
||||
name: Integration Test on Debian ${{ matrix.debian_version }}
|
||||
steps:
|
||||
- name: Download Debian package artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: debian-package
|
||||
path: package/
|
||||
|
||||
- name: Set up Docker with Debian image
|
||||
run: docker pull debian:${{ matrix.debian_version }}
|
||||
|
||||
- name: Install and test Debian package in Docker container
|
||||
run: |
|
||||
docker run --rm \
|
||||
-v "$(pwd)/package:/package" \
|
||||
-w /package \
|
||||
debian:${{ matrix.debian_version }} \
|
||||
bash -c "
|
||||
set -e
|
||||
apt-get update
|
||||
apt-get install -y python3 systemd
|
||||
apt-get install -y ./proxlb*.deb
|
||||
python3 -c 'import proxlb; print(\"OK: Debian package successfully installed on ${{ matrix.debian_version }}.\")'
|
||||
"
|
||||
96
.github/workflows/20-pipeline-build-rpm-package.yml
vendored
Normal file
96
.github/workflows/20-pipeline-build-rpm-package.yml
vendored
Normal file
@@ -0,0 +1,96 @@
|
||||
name: "Build package: .rpm"
|
||||
on: [push]
|
||||
jobs:
|
||||
lint-code-proxlb:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: ["3.8"]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Setup dependencies for code linting
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: Install additional dependencies for code linting
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get -y install python3-pycodestyle pycodestyle
|
||||
- name: Run code linting on ProxLB Python code
|
||||
run: |
|
||||
pycodestyle proxlb/* && \
|
||||
echo "OK: Code linting successfully performed on ProxLB code."
|
||||
|
||||
build-package-rpm:
|
||||
needs: lint-code-proxlb
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: 'development'
|
||||
|
||||
- name: Set up Docker with Debian image
|
||||
run: |
|
||||
docker pull debian:latest
|
||||
|
||||
- name: Build DEB package in Docker container
|
||||
run: |
|
||||
docker run --rm -v $(pwd):/workspace -w /workspace debian:latest bash -c "
|
||||
# Install dependencies
|
||||
apt-get update && \
|
||||
apt-get install -y python3 python3-setuptools rpm debhelper dh-python python3-pip python3-stdeb python3-proxmoxer python3-requests python3-urllib3 && \
|
||||
# Build package
|
||||
python3 setup.py --command-packages=stdeb.command bdist_rpm && \
|
||||
echo 'OK: RPM package successfully created.'
|
||||
"
|
||||
|
||||
- name: Upload RPM package python3-proxlb as artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: rpm-package
|
||||
path: dist/*.rpm
|
||||
|
||||
# integration-test-rpm-rockylinux-9:
|
||||
# needs: build-package-rpm
|
||||
# runs-on: ubuntu-latest
|
||||
# steps:
|
||||
# - name: Download RPM package artifact
|
||||
# uses: actions/download-artifact@v4
|
||||
# with:
|
||||
# name: rpm-package
|
||||
# path: dist/
|
||||
|
||||
# - name: Set up Docker with RockyLinux 9 image
|
||||
# run: docker pull rockylinux:9
|
||||
|
||||
# - name: Install and test RPM package in Rocky Linux Docker container
|
||||
# run: |
|
||||
# docker run --rm -v $(pwd)/dist:/dist -w /dist rockylinux:9 bash -c "
|
||||
# # DNF does not handle wildcards well
|
||||
# rpm_file=\$(ls proxlb*.noarch.rpm) && \
|
||||
# dnf install -y \$rpm_file && \
|
||||
# python3 -c 'import proxlb; print(\"OK: RPM package successfully installed.\")'
|
||||
# "
|
||||
|
||||
# integration-test-rpm-rockylinux-8:
|
||||
# needs: build-package-rpm
|
||||
# runs-on: ubuntu-latest
|
||||
# steps:
|
||||
# - name: Download RPM package artifact
|
||||
# uses: actions/download-artifact@v4
|
||||
# with:
|
||||
# name: rpm-package
|
||||
# path: dist/
|
||||
|
||||
# - name: Set up Docker with RockyLinux 8 image
|
||||
# run: docker pull rockylinux:8
|
||||
|
||||
# - name: Install and test RPM package in Rocky Linux Docker container
|
||||
# run: |
|
||||
# docker run --rm -v $(pwd)/dist:/dist -w /dist rockylinux:8 bash -c "
|
||||
# # DNF does not handle wildcards well
|
||||
# rpm_file=\$(ls proxlb*.noarch.rpm) && \
|
||||
# dnf install -y \$rpm_file && \
|
||||
# python3 -c 'import proxlb; print(\"OK: RPM package successfully installed.\")'
|
||||
# "
|
||||
26
.github/workflows/30-pipeline-build-container-amd64.yml
vendored
Normal file
26
.github/workflows/30-pipeline-build-container-amd64.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
name: "Build Container Image: AMD64"
|
||||
on: [push]
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Build amd64 image and save as tar
|
||||
run: |
|
||||
docker buildx build \
|
||||
--platform linux/amd64 \
|
||||
--load \
|
||||
-t proxlb-image:amd64 \
|
||||
.
|
||||
|
||||
docker save proxlb-image:amd64 -o proxlb_image_amd64.tar
|
||||
- name: Upload Docker image artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: proxlb-image-amd64
|
||||
path: proxlb_image_amd64.tar
|
||||
26
.github/workflows/30-pipeline-build-container-arm64.yml
vendored
Normal file
26
.github/workflows/30-pipeline-build-container-arm64.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
name: "Build Container Image: ARM64"
|
||||
on: [push]
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Build arm64 image and save as tar
|
||||
run: |
|
||||
docker buildx build \
|
||||
--platform linux/arm64 \
|
||||
--load \
|
||||
-t proxlb-image:arm64 \
|
||||
.
|
||||
|
||||
docker save proxlb-image:arm64 -o proxlb_image_arm64.tar
|
||||
- name: Upload Docker image artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: proxlb-image-arm64
|
||||
path: proxlb_image_arm64.tar
|
||||
23
.github/workflows/30-pipeline-build-container-multi-arch.yml
vendored
Normal file
23
.github/workflows/30-pipeline-build-container-multi-arch.yml
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
name: "Build Container Image: Multiarch"
|
||||
on: [push]
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Build multi-arch image and save as tar
|
||||
run: |
|
||||
docker buildx build \
|
||||
--platform linux/amd64,linux/arm64 \
|
||||
--output type=tar,dest=proxlb_image_multiarch.tar \
|
||||
.
|
||||
- name: Upload Docker image artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: proxlb-image-multiarch
|
||||
path: proxlb_image_multiarch.tar
|
||||
9
.gitignore
vendored
9
.gitignore
vendored
@@ -1,2 +1,7 @@
|
||||
packaging/changelog-fragments-creator/
|
||||
dev/
|
||||
__pycache__
|
||||
*.pyc
|
||||
.DS_Store
|
||||
build/
|
||||
dist/
|
||||
*.egg-info/
|
||||
proxlb_dev.yaml
|
||||
|
||||
228
CHANGELOG.md
228
CHANGELOG.md
@@ -5,27 +5,219 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [1.1.11] - 2026-01-12
|
||||
|
||||
### Added
|
||||
|
||||
- Add support for Proxmoxs native HA (affinity/anti-affinity) rules [beta] (@gyptazy). [#391]
|
||||
- Add support for Proxmox native HA (node-affinity) rules for pinning guests to nodes [beta] (@gyptazy). [#391]
|
||||
- Add resource reservation support for PVE nodes (@Chipmonk2). [#373]
|
||||
- Add possibility to sort and select balancing workloads by smaller/larger guest objects (@gyptazy). [#387]
|
||||
- Add HA job validation for migration jobs to fetch child jobs (@gytazy). [#402]
|
||||
- Add support for configuring node-pinning strictness (default: true) within pools to allow strict/prefer modes (@gyptazy). [#406]
|
||||
- Add new option to enforce node/guest pinning even when cluster is balanced from a resource perspective (@gyptazy). [#414]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix missing overprovisioning safety guard to avoid node overprovisioning (@gyptazy). [#275]
|
||||
- Fix affinity matrix pre-validation by inverting validations (@Thalagyrt). [#335]
|
||||
- Fix pool based node pinning which expects a list (@gyptazy). [#395]
|
||||
- Fix that ignored VMs/CTs got moved to another node when being ignored (@gyptazy). [#408]
|
||||
|
||||
### Changed
|
||||
|
||||
- Change balancing and sorting behaviour (@gyptazy). [#378]
|
||||
- Balancing objects will be ordered by count of objects in affinity-rules, followed by memory size (@gyptazy). [#378]
|
||||
|
||||
## [1.1.10] - 2025-11-25
|
||||
|
||||
### Added
|
||||
|
||||
- Prevent redundant rebalancing by validating existing affinity enforcement before taking actions (@gyptazy). [#335]
|
||||
- Add safety-guard for PVE 8 users when activating conntrack-aware migrations mistakenly (@gyptazy). [#359]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix the Proxmox API connection validation which returned a false-positive logging message of timeouts (@gyptazy). [#361]
|
||||
- Refactored Proxmox API connection functions (@gyptazy). [#361]
|
||||
- Fix a crash during PVE resource pool enumeration by skipping members not having a 'name' property (@stefanoettl). [#368]
|
||||
|
||||
## [1.1.9.1] - 2025-10-30
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix quoting in f-strings which may cause issues on PVE 8 / Debian Bookworm systems (@gyptazy). [#352]
|
||||
|
||||
## [1.1.9] - 2025-10-30
|
||||
|
||||
### Added
|
||||
|
||||
- Add an optional memory balancing threshold (@gyptazy). [#342]
|
||||
- Add affinity/anti-affinity support by pools (@gyptazy). [#343]
|
||||
- Add pressure (PSI) based balancing for memory, cpu, disk (req. PVE9 or greater) (@gyptazy). [#337]
|
||||
- Pressure (PSI) based balancing for nodes
|
||||
- Pressure (PSI) based balancing for guests
|
||||
- Add PVE version evaluation
|
||||
|
||||
## [1.1.8] - 2025-10-09
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix API errors when using conntrack aware migration with older PVE versions (@gyptazy). [#318]
|
||||
- Add a static ProxLB prefix to the log output when used by journal handler (@gyptazy). [#329]
|
||||
|
||||
### Changed
|
||||
- Container image does not run as root anymore (@mikaelkrantz945). [#317]
|
||||
- Container image uses venv for running ProxLB (@mikaelkrantz945). [#317]
|
||||
|
||||
## [1.1.7] - 2025-09-19
|
||||
|
||||
### Added
|
||||
|
||||
- Add conntrack state aware migrations of VMs (@gyptazy). [#305]
|
||||
- Add graceful shutdown for SIGINT (e.g., CTRL + C abort). (@gyptazy). [#304]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix crash when validating absent migration job ids. (@gyptazy). [#308]
|
||||
- Fix guest object names are not being evaluated in debug log. (@gyptazy). [#310]
|
||||
|
||||
## [1.1.6.1] - 2025-09-04
|
||||
|
||||
### Fixed
|
||||
|
||||
- Validate for node presence when pinning VMs to avoid crashing (@gyptazy). [#296]
|
||||
|
||||
## [1.1.6] - 2025-09-04
|
||||
|
||||
### Added
|
||||
|
||||
- Add validation for provided API user token id to avoid confusions (@gyptazy). [#291]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix stacktrace output when validating permissions on non existing users in Proxmox (@gyptazy). [#291]
|
||||
- Fix Overprovisioning first node if anti_affinity_group has only one member (@MiBUl-eu). [#295]
|
||||
- Validate for node presence when pinning guests to avoid crashing (@gyptazy). [#296]
|
||||
- Fix balancing evaluation of guest types (e.g., VM or CT) (@gyptazy). [#268]
|
||||
|
||||
## [1.1.5] - 2025-07-14
|
||||
|
||||
### Added
|
||||
|
||||
- Allow custom API ports instead of fixed tcp/8006 (@gyptazy). [#260]
|
||||
|
||||
|
||||
## [1.1.4] - 2025-06-27
|
||||
|
||||
### Added
|
||||
|
||||
- Allow pinning of guests to a group of nodes (@gyptazy). [#245]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Modified log levels to make output lighter at INFO level (@pmarasse) [#255]
|
||||
- Fixed an issue where balancing was performed in combination of deactivated balancing and dry-run mode (@gyptazy). [#248]
|
||||
|
||||
|
||||
## [1.1.3] - 2025-06-19
|
||||
|
||||
### Added
|
||||
|
||||
- Add relaod (SIGHUP) function to ProxLB to reload the configuration (by @gyptazy). [#189]
|
||||
- Add optional wait time parameter to delay execution until the service takes action (by @gyptazy). [#239]
|
||||
- Make the amount of parallel migrations configurable (by @gyptazy). [#241]
|
||||
|
||||
### Changed
|
||||
|
||||
- Use the average CPU consumption of a guest within the last 60 minutes instead of the current CPU usage (by @philslab-ninja & @gyptazy). [#94]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Align maintenance mode with Proxmox HA maintenance mode (by @gyptazy). [#232]
|
||||
|
||||
|
||||
## [1.1.2] - 2025-05-13
|
||||
|
||||
### Added
|
||||
|
||||
- Add a configurable retry mechanism when connecting to the Proxmox API (by @gyptazy) [#157]
|
||||
- Add 1-to-1 relationships between guest and hypervisor node to ping a guest on a node (by @gyptazy) [#218]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Force type cast cpu count of guests to int for some corner cases where a str got returned (by @gyptazy). [#222]
|
||||
- Fix systemd unit file to run after network on non PVE nodes (by @robertdahlem) [#137]
|
||||
|
||||
|
||||
## [1.1.1] - 2025-04-20
|
||||
|
||||
### Added
|
||||
|
||||
- Providing the API upstream error message when migration fails in debug mode (by @gyptazy) [#205]
|
||||
|
||||
### Changed
|
||||
|
||||
- Change the default behaviour of the daemon mode to active [#176]
|
||||
- Change the default banalcing mode to used instead of assigned [#180]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Set cpu_used to the cpu usage, which is a percent, times the total number of cores to get a number where guest cpu_used can be added to nodes cpu_used and be meaningful (by @glitchvern) [#195]
|
||||
- Fix tag evluation for VMs for being ignored for further balancing [#163]
|
||||
- Honor the value when balancing should not be performed and stop balancing [#174]
|
||||
- allow the use of minutes instead of hours and only accept hours or minutes in the format (by @glitchvern) [#187]
|
||||
- Remove hard coded memory usage from lowest usage node and use method and mode specified in configuration instead (by @glitchvern) [#197]
|
||||
- Fix the guest type relationship in the logs when a migration job failed (by @gyptazy) [#204]
|
||||
- Requery a guest if that running guest reports 0 cpu usage (by @glitchvern) [#200]
|
||||
- Fix Python path for Docker entrypoint (by @crandler) [#170]
|
||||
- Improve logging verbosity of messages that had a wrong servity [#165]
|
||||
|
||||
|
||||
## [1.1.0] - 2025-04-01
|
||||
|
||||
### Fixed
|
||||
|
||||
- Refactored code base for ProxLB [#114]
|
||||
- Switched to `pycodestyle` for linting [#114]
|
||||
- Package building will be done within GitHub actions pipeline [#114]
|
||||
- ProxLB now only returns a warning when no guests for further balancing are not present (instead of quitting) [132#]
|
||||
- All nodes (according to the free resources) will be used now [#130]
|
||||
- Fixed logging outputs where highest/lowest were mixed-up [#129]
|
||||
- Stop balancing when movement would get worste (new force param to enfoce for affinity rules) [#128]
|
||||
- Added requested documentation regarding Proxmox HA groups [#127]
|
||||
- Rewrite of the whole affinity/anti-affinity rules evaluation and placement [#123]
|
||||
- Fixed the `ignore` parameter for nodes where the node and guests on the node will be untouched [#102]
|
||||
|
||||
|
||||
## [1.0.6] - 2024-12-24
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix maintenance mode when using cli arg and config mode by using the merged list (by @CartCaved). [#119]
|
||||
- Fix that a scheduler time definition of 1 (int) gets wrongly interpreted as a bool (by @gyptazy). [#115]
|
||||
|
||||
|
||||
## [1.0.5] - 2024-10-30
|
||||
|
||||
### Changed
|
||||
|
||||
- Change docs to make bool usage in configs more clear. [#104]
|
||||
- Change docs to make bool usage in configs more clear (by @gyptazy). [#104]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix node (and its objects) evaluation when not reachable, e.g., maintenance (by @gyptazy). [#107]
|
||||
- Fix migration from local disks (by @greenlogles). [#113]
|
||||
- Fix allowed values (add DEBUG, WARNING) for log verbosity. [#98]
|
||||
- Fix node (and its objects) evaluation when not reachable (e.g., maintenance). [#107]
|
||||
- Fix evaluation of maintenance mode where comparing list & string resulted in a crash (by @glitchvern). [#106]
|
||||
- Fix allowed values (add DEBUG, WARNING) for log verbosity (by @gyptazy). [#98]
|
||||
|
||||
|
||||
## [1.0.4] - 2024-10-11
|
||||
|
||||
### Added
|
||||
|
||||
- Add feature to make API timeout configureable. [#91]
|
||||
- Add maintenance mode to evacuate a node and move workloads for other nodes in the cluster. [#58]
|
||||
- Add feature to make API timeout configureable. [#91]
|
||||
- Add version output cli arg. [#89]
|
||||
|
||||
### Changed
|
||||
@@ -43,27 +235,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Added
|
||||
|
||||
- Add storage balancing function. [#51]
|
||||
- Add cli arg `-b` to return the next best node for next VM/CT placement. [#8]
|
||||
- Add a convert function to cast all bool alike options from configparser to bools. [#53]
|
||||
- Add a config parser options for future features. [#53]
|
||||
- Add a config versio schema that must be supported by ProxLB. [#53]
|
||||
- Add doc how to add dedicated user for authentication. (by @Dulux-Oz)
|
||||
- Add feature to allow the API hosts being provided as a comma separated list. [#60]
|
||||
- Add cli arg `-b` to return the next best node for next VM/CT placement. [#8]
|
||||
- Add doc how to add dedicated user for authentication. (by @Dulux-Oz)
|
||||
- Add storage balancing function. [#51]
|
||||
|
||||
### Changed
|
||||
|
||||
- Improve the underlying code base for future implementations. [#53]
|
||||
- Provide a more reasonable output when HA services are not active in a Proxmox cluster. [#68]
|
||||
- Improve the underlying code base for future implementations. [#53]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed `master_only` function by inverting the condition.
|
||||
- Improved the overall validation and error handling. [#64]
|
||||
- Fix bug in the `proxlb.conf` in the vm_balancing section.
|
||||
- Fix anti-affinity rules not evaluating a new and different node. [#67]
|
||||
- Fixed `master_only` function by inverting the condition.
|
||||
- Fix documentation for the master_only parameter placed in the wrong config section. [#74]
|
||||
- Fix bug in the `proxlb.conf` in the vm_balancing section.
|
||||
- Fix handling of unset `ignore_nodes` and `ignore_vms` resulted in an attribute error. [#71]
|
||||
- Improved the overall validation and error handling. [#64]
|
||||
|
||||
|
||||
## [1.0.2] - 2024-08-13
|
||||
@@ -86,16 +278,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Added
|
||||
|
||||
- Add option_mode to rebalance by node's free resources in percent (instead of bytes). [#29]
|
||||
- Add LXC/Container integration. [#27]
|
||||
- Add exclude grouping feature to rebalance VMs from being located together to new nodes. [#4]
|
||||
- Add dry-run support to see what kind of rebalancing would be done. [#6]
|
||||
- Add Docker/Podman support. [#10 by @daanbosch]
|
||||
- Add feature to prevent VMs from being relocated by defining a wildcard pattern. [#7]
|
||||
- Add feature to prevent VMs from being relocated by defining the 'plb_ignore_vm' tag. [#7]
|
||||
- Add include grouping feature to rebalance VMs bundled to new nodes. [#3]
|
||||
- Add feature to prevent VMs from being relocated by defining a wildcard pattern. [#7]
|
||||
- Add Docker/Podman support. [#10 by @daanbosch]
|
||||
- Add option to rebalance by assigned VM resources to avoid overprovisioning. [#16]
|
||||
- Add feature to make log verbosity configurable [#17].
|
||||
- Add dry-run support to see what kind of rebalancing would be done. [#6]
|
||||
- Add LXC/Container integration. [#27]
|
||||
- Add exclude grouping feature to rebalance VMs from being located together to new nodes. [#4]
|
||||
- Add include grouping feature to rebalance VMs bundled to new nodes. [#3]
|
||||
- Add option_mode to rebalance by node's free resources in percent (instead of bytes). [#29]
|
||||
|
||||
### Changed
|
||||
|
||||
|
||||
@@ -116,6 +116,6 @@ By participating in this project, you agree to abide by our [Code of Conduct](CO
|
||||
|
||||
## Getting Help
|
||||
|
||||
If you need help or have any questions, feel free to reach out by creating an issue or by joining our [discussion forum](https://github.com/gyptazy/proxlb/discussions). You can also refer to our [documentation](https://github.com/gyptazy/ProxLB/tree/main/docs) for more information about the project or join our [chat room](https://matrix.to/#/#proxlb:gyptazy.ch) in Matrix.
|
||||
If you need help or have any questions, feel free to reach out by creating an issue or by joining our [discussion forum](https://github.com/gyptazy/proxlb/discussions). You can also refer to our [documentation](https://github.com/gyptazy/ProxLB/tree/main/docs) for more information about the project or join our [chat room](https://matrix.to/#/#proxlb:gyptazy.com) in Matrix.
|
||||
|
||||
Thank you for contributing to ProxLB! Together, we can enhance the efficiency and performance of Proxmox clusters.
|
||||
Thank you for contributing to ProxLB! Together, we can enhance the efficiency and performance of Proxmox clusters.
|
||||
56
Dockerfile
56
Dockerfile
@@ -1,35 +1,41 @@
|
||||
# Use the official Debian 12 base image
|
||||
FROM debian:12
|
||||
# Use the latest Alpine image
|
||||
FROM alpine:latest
|
||||
|
||||
# Labels
|
||||
LABEL maintainer="gyptazy@gyptazy.ch"
|
||||
LABEL org.label-schema.schema-version="0.9"
|
||||
LABEL org.label-schema.description="ProxLB - Rebalance VM workloads across nodes in a Proxmox cluster."
|
||||
LABEL org.label-schema.url="https://github.com/gyptazy/ProxLB"
|
||||
LABEL maintainer="gyptazy@gyptazy.com"
|
||||
LABEL org.label-schema.name="ProxLB"
|
||||
LABEL org.label-schema.description="ProxLB - An advanced load balancer for Proxmox clusters."
|
||||
LABEL org.label-schema.vendor="gyptazy"
|
||||
LABEL org.label-schema.url="https://proxlb.de"
|
||||
LABEL org.label-schema.vcs-url="https://github.com/gyptazy/ProxLB"
|
||||
|
||||
# Set environment variables
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
# --- Step 1 (root): system deps, user, dirs ---
|
||||
RUN apk add --no-cache python3 py3-pip \
|
||||
&& addgroup -S plb \
|
||||
&& adduser -S -G plb -h /home/plb plb \
|
||||
&& mkdir -p /app/conf /opt/venv \
|
||||
&& chown -R plb:plb /app /home/plb /opt/venv
|
||||
|
||||
# Install python3 and python3-venv
|
||||
RUN apt-get update && \
|
||||
apt-get install -y python3 python3-pip python3-venv && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Create a directory for the app
|
||||
WORKDIR /app
|
||||
|
||||
# Copy the python program from the current directory to /app
|
||||
COPY proxlb /app/proxlb
|
||||
# Copy only requirements first for better layer caching
|
||||
COPY --chown=plb:plb requirements.txt /app/requirements.txt
|
||||
|
||||
# Create a virtual environment
|
||||
RUN python3 -m venv venv
|
||||
# --- Step 2 (appuser): venv + deps + code ---
|
||||
USER plb
|
||||
|
||||
# Copy requirements to the container
|
||||
COPY requirements.txt /app/requirements.txt
|
||||
# Create venv owned by appuser and put it on PATH
|
||||
RUN python3 -m venv /opt/venv
|
||||
ENV PATH="/opt/venv/bin:${PATH}"
|
||||
|
||||
# Install dependencies in the virtual environment
|
||||
RUN . venv/bin/activate && pip install -r /app/requirements.txt
|
||||
# Install Python dependencies into the venv (no PEP 668 issues)
|
||||
RUN pip install --no-cache-dir -r /app/requirements.txt
|
||||
|
||||
# Set the entry point to use the virtual environment's python
|
||||
ENTRYPOINT ["/app/venv/bin/python3", "/app/proxlb"]
|
||||
# Copy application code (owned by appuser)
|
||||
COPY --chown=plb:plb proxlb /app/proxlb
|
||||
|
||||
# Optional: placeholder config so a bind-mount can override cleanly
|
||||
RUN touch /app/conf/proxlb.yaml
|
||||
|
||||
# Run as non-root using venv Python
|
||||
ENTRYPOINT ["/opt/venv/bin/python", "/app/proxlb/main.py"]
|
||||
|
||||
2
LICENSE
2
LICENSE
@@ -671,4 +671,4 @@ into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
401
README.md
401
README.md
@@ -1,398 +1,7 @@
|
||||
# ProxLB - (Re)Balance VM Workloads in Proxmox Clusters
|
||||
<img align="left" src="https://cdn.gyptazy.com/images/Prox-LB-logo.jpg"/>
|
||||
<br>
|
||||
# ProxLB Moved
|
||||
|
||||
<p float="center"><img src="https://img.shields.io/github/license/gyptazy/ProxLB"/><img src="https://img.shields.io/github/contributors/gyptazy/ProxLB"/><img src="https://img.shields.io/github/last-commit/gyptazy/ProxLB/main"/><img src="https://img.shields.io/github/issues-raw/gyptazy/ProxLB"/><img src="https://img.shields.io/github/issues-pr/gyptazy/ProxLB"/></p>
|
||||
You can find the new location of the `ProxLB` project at:
|
||||
[github.com/credativ/ProxLB](https://github.com/credativ/ProxLB)
|
||||
|
||||
|
||||
## Table of Contents
|
||||
- [ProxLB - (Re)Balance VM Workloads in Proxmox Clusters](#proxlb---rebalance-vm-workloads-in-proxmox-clusters)
|
||||
- [Table of Contents](#table-of-contents)
|
||||
- [Introduction](#introduction)
|
||||
- [Video of Migration](#video-of-migration)
|
||||
- [Features](#features)
|
||||
- [How does it work?](#how-does-it-work)
|
||||
- [Usage](#usage)
|
||||
- [Dependencies](#dependencies)
|
||||
- [Options](#options)
|
||||
- [Notes](#notes)
|
||||
- [Parameters](#parameters)
|
||||
- [Balancing](#balancing)
|
||||
- [General](#general)
|
||||
- [By Used Memory of VMs/CTs](#by-used-memory-of-vmscts)
|
||||
- [By Assigned Memory of VMs/CTs](#by-assigned-memory-of-vmscts)
|
||||
- [Storage Balancing](#storage-balancing)
|
||||
- [Affinity Rules / Grouping Relationships](#affinity-rules--grouping-relationships)
|
||||
- [Affinity (Stay Together)](#affinity-stay-together)
|
||||
- [Anti-Affinity (Keep Apart)](#anti-affinity-keep-apart)
|
||||
- [Ignore VMs (Tag Style)](#ignore-vms-tag-style)
|
||||
- [Systemd](#systemd)
|
||||
- [Manual](#manual)
|
||||
- [Proxmox GUI Integration](#proxmox-gui-integration)
|
||||
- [Quick Start](#quick-start)
|
||||
- [Container Quick Start (Docker/Podman)](#container-quick-start-dockerpodman)
|
||||
- [Logging](#logging)
|
||||
- [Motivation](#motivation)
|
||||
- [References](#references)
|
||||
- [Downloads](#downloads)
|
||||
- [Packages](#packages)
|
||||
- [Repository](#repository)
|
||||
- [Stable Releases](#stable-releases)
|
||||
- [Beta/Testing Releases](#betatesting-releases)
|
||||
- [Container Images (Docker/Podman)](#container-images-dockerpodman)
|
||||
- [Misc](#misc)
|
||||
- [Bugs](#bugs)
|
||||
- [Contributing](#contributing)
|
||||
- [Documentation](#documentation)
|
||||
- [Support](#support)
|
||||
- [Author(s)](#authors)
|
||||
|
||||
## Introduction
|
||||
`ProxLB` (PLB) is an advanced tool designed to enhance the efficiency and performance of Proxmox clusters by optimizing the distribution of virtual machines (VMs) or Containers (CTs) across the cluster nodes by using the Proxmox API. ProxLB meticulously gathers and analyzes a comprehensive set of resource metrics from both the cluster nodes and the running VMs. These metrics include CPU usage, memory consumption, and disk utilization, specifically focusing on local disk resources.
|
||||
|
||||
PLB collects resource usage data from each node in the Proxmox cluster, including CPU, (local) disk and memory utilization. Additionally, it gathers resource usage statistics from all running VMs, ensuring a granular understanding of the cluster's workload distribution.
|
||||
|
||||
Intelligent rebalancing is a key feature of ProxLB where it re-balances VMs based on their memory, disk or CPU usage, ensuring that no node is overburdened while others remain underutilized. The rebalancing capabilities of PLB significantly enhance cluster performance and reliability. By ensuring that resources are evenly distributed, PLB helps prevent any single node from becoming a performance bottleneck, improving the reliability and stability of the cluster. Efficient rebalancing leads to better utilization of available resources, potentially reducing the need for additional hardware investments and lowering operational costs.
|
||||
|
||||
Automated rebalancing reduces the need for manual actions, allowing operators to focus on other critical tasks, thereby increasing operational efficiency.
|
||||
|
||||
### Video of Migration
|
||||
<img src="https://cdn.gyptazy.com/images/proxlb-rebalancing-demo.gif"/>
|
||||
|
||||
## Features
|
||||
* Rebalance VMs/CTs in the cluster by:
|
||||
* Memory
|
||||
* Disk (only local storage)
|
||||
* CPU
|
||||
* Rebalance Storage in the cluster
|
||||
* Rebalance VMs/CTs disks to other storage pools
|
||||
* Rebalance by used storage
|
||||
* Get best Node for new VM/CT placement in cluster
|
||||
* Performing
|
||||
* Periodically
|
||||
* One-shot solution
|
||||
* Types
|
||||
* Rebalance only VMs
|
||||
* Rebalance only CTs
|
||||
* Rebalance all (VMs and CTs)
|
||||
* Rebalance VM/CT disks (Storage)
|
||||
* Filter
|
||||
* Exclude nodes
|
||||
* Exclude virtual machines
|
||||
* Grouping
|
||||
* Include groups (VMs that are rebalanced to nodes together)
|
||||
* Exclude groups (VMs that must run on different nodes)
|
||||
* Ignore groups (VMs that should be untouched)
|
||||
* Dry-run support
|
||||
* Human readable output in CLI
|
||||
* JSON output for further parsing
|
||||
* Migrate VM workloads away (e.g. maintenance preparation)
|
||||
* Fully based on Proxmox API
|
||||
* Usage
|
||||
* One-Shot (one-shot)
|
||||
* Periodically (daemon)
|
||||
* Proxmox Web GUI Integration (optional)
|
||||
|
||||
## How does it work?
|
||||
ProxLB is a load-balancing system designed to optimize the distribution of virtual machines (VMs) and containers (CTs) across a cluster. It works by first gathering resource usage metrics from all nodes in the cluster through the Proxmox API. This includes detailed resource metrics for each VM and CT on every node. ProxLB then evaluates the difference between the maximum and minimum resource usage of the nodes, referred to as "Balanciness." If this difference exceeds a predefined threshold (which is configurable), the system initiates the rebalancing process.
|
||||
|
||||
Before starting any migrations, ProxLB validates that rebalancing actions are necessary and beneficial. Depending on the selected balancing mode — such as CPU, memory, or disk — it creates a balancing matrix. This matrix sorts the VMs by their maximum used or assigned resources, identifying the VM with the highest usage. ProxLB then places this VM on the node with the most free resources in the selected balancing type. This process runs recursively until the operator-defined Balanciness is achieved. Balancing can be defined for the used or max. assigned resources of VMs/CTs.
|
||||
|
||||
## Usage
|
||||
Running PLB is easy and it runs almost everywhere since it just depends on `Python3` and the `proxmoxer` library. Therefore, it can directly run on a Proxmox node, dedicated systems like Debian, RedHat, or even FreeBSD, as long as the API is reachable by the client running PLB.
|
||||
|
||||
### Dependencies
|
||||
* Python3
|
||||
* proxmoxer (Python module)
|
||||
|
||||
### Options
|
||||
The following options can be set in the `proxlb.conf` file:
|
||||
|
||||
| Section | Option | Example | Description |
|
||||
|------|:------:|:------:|:------:|
|
||||
| `proxmox` | api_host | hypervisor01.gyptazy.com | Host or IP address (or comma separated list) of the remote Proxmox API. |
|
||||
| | api_user | root@pam | Username for the API. |
|
||||
| | api_pass | FooBar | Password for the API. |
|
||||
| | verify_ssl | 1 | Validate SSL certificates (1) or ignore (0). (default: 1, type: bool) |
|
||||
| | timeout | 10 | Timeout for the Proxmox API in sec. (default: 10) |
|
||||
| `vm_balancing` | enable | 1 | Enables VM/CT balancing. |
|
||||
| | method | memory | Defines the balancing method (default: memory) where you can use `memory`, `disk` or `cpu`. |
|
||||
| | mode | used | Rebalance by `used` resources (efficiency) or `assigned` (avoid overprovisioning) resources. (default: used)|
|
||||
| | mode_option | byte | Rebalance by node's resources in `bytes` or `percent`. (default: bytes) |
|
||||
| | type | vm | Rebalance only `vm` (virtual machines), `ct` (containers) or `all` (virtual machines & containers). (default: vm)|
|
||||
| | balanciness | 10 | Value of the percentage of lowest and highest resource consumption on nodes may differ before rebalancing. (default: 10) |
|
||||
| | parallel_migrations | 1 | Defines if migrations should be done parallely or sequentially. (default: 1, type: bool) |
|
||||
| | maintenance_nodes | dummynode03,dummynode04 | Defines a comma separated list of nodes to set them into maintenance mode and move VMs/CTs to other nodes. |
|
||||
| | ignore_nodes | dummynode01,dummynode02,test* | Defines a comma separated list of nodes to exclude. |
|
||||
| | ignore_vms | testvm01,testvm02 | Defines a comma separated list of VMs to exclude. (`*` as suffix wildcard or tags are also supported) |
|
||||
| `storage_balancing` | enable | 0 | Enables storage balancing. |
|
||||
| | balanciness | 10 | Value of the percentage of lowest and highest storage consumption may differ before rebalancing. (default: 10) |
|
||||
| | parallel_migrations | 1 | Defines if migrations should be done parallely or sequentially. (default: 1, type: bool) |
|
||||
| `update_service` | enable | 0 | Enables the automated update service (rolling updates). (default: 0, type: bool) |
|
||||
| `api` | enable | 0 | Enables the ProxLB API. |
|
||||
| `service`| daemon | 1 | Run as a daemon (1) or one-shot (0). (default: 1, type: bool) |
|
||||
| | schedule | 24 | Hours to rebalance in hours. (default: 24) |
|
||||
| | master_only | 0 | Defines is this should only be performed (1) on the cluster master node or not (0). (default: 0, type: bool) |
|
||||
| | log_verbosity | INFO | Defines the log level (default: CRITICAL) where you can use `DEBUG`, `INFO`, `WARNING` or `CRITICAL` |
|
||||
| | config_version | 3 | Defines the current config version schema for ProxLB |
|
||||
|
||||
An example of the configuration file looks like:
|
||||
```
|
||||
[proxmox]
|
||||
api_host: hypervisor01.gyptazy.com
|
||||
api_user: root@pam
|
||||
api_pass: FooBar
|
||||
verify_ssl: 1
|
||||
timeout: 10
|
||||
[vm_balancing]
|
||||
enable: 1
|
||||
method: memory
|
||||
mode: used
|
||||
type: vm
|
||||
# Balanciness defines how much difference may be
|
||||
# between the lowest & highest resource consumption
|
||||
# of nodes before rebalancing will be done.
|
||||
# Examples:
|
||||
# Rebalancing: node01: 41% memory consumption :: node02: 52% consumption
|
||||
# No rebalancing: node01: 43% memory consumption :: node02: 50% consumption
|
||||
balanciness: 10
|
||||
# Enable parallel migrations. If set to 0 it will wait for completed migrations
|
||||
# before starting next migration.
|
||||
parallel_migrations: 1
|
||||
maintenance_nodes: dummynode03,dummynode04
|
||||
ignore_nodes: dummynode01,dummynode02
|
||||
ignore_vms: testvm01,testvm02
|
||||
[storage_balancing]
|
||||
enable: 0
|
||||
[update_service]
|
||||
enable: 0
|
||||
[api]
|
||||
enable: 0
|
||||
[service]
|
||||
# The master_only option might be useful if running ProxLB on all nodes in a cluster
|
||||
# but only a single one should do the balancing. The master node is obtained from the Proxmox
|
||||
# HA status.
|
||||
master_only: 0
|
||||
daemon: 1
|
||||
config_version: 3
|
||||
```
|
||||
|
||||
#### Notes
|
||||
* If running ProxLB on more than one Proxmox node you can set `api_host` to a comma-separated list of each node's IP address or hostname. (Example: `api_host: node01.gyptazy.com,node02.gyptazy.com,node03.gyptazy.com`)
|
||||
* The `verify_ssl` parameter can switch between the mode to verify trusted remote certificates. Keep in mind, that even local ones are **not** trusted by default and need to be imported to the truststore.
|
||||
* Even when using only the `vm_balancing` mode, ensure to have the other sections listed in your config:
|
||||
```
|
||||
[storage_balancing]
|
||||
enable: 0
|
||||
[update_service]
|
||||
enable: 0
|
||||
[api]
|
||||
enable: 0
|
||||
```
|
||||
|
||||
### Parameters
|
||||
The following options and parameters are currently supported:
|
||||
|
||||
| Option | Long Option | Description | Default |
|
||||
|------|:------:|------:|------:|
|
||||
| -c | --config | Path to a config file. | /etc/proxlb/proxlb.conf (default) |
|
||||
| -d | --dry-run | Performs a dry-run without doing any actions. | Unset |
|
||||
| -j | --json | Returns a JSON of the VM movement. | Unset |
|
||||
| -b | --best-node | Returns the best next node for a VM/CT placement (useful for further usage with Terraform/Ansible). | Unset |
|
||||
| -m | --maintenance | Sets node(s) to maintenance mode & moves workloads away. | Unset |
|
||||
| -v | --version | Returns the ProxLB version on stdout. | Unset |
|
||||
|
||||
### Balancing
|
||||
#### General
|
||||
In general, virtual machines (VMs), containers (CTs) can be rebalanced and moved around nodes or shared storage (storage balancing) in the cluster. Often, this also works without downtime without any further downtimes. However, this does **not** work with containers. LXC based containers will be shutdown, copied and started on the new node. Also to note, live migrations can work fluently without any issues but there are still several things to be considered. This is out of scope for ProxLB and applies in general to Proxmox and your cluster setup. You can find more details about this here: https://pve.proxmox.com/wiki/Migrate_to_Proxmox_VE.
|
||||
|
||||
#### By Used Memory of VMs/CTs
|
||||
By continuously monitoring the current resource usage of VMs, ProxLB intelligently reallocates workloads to prevent any single node from becoming overloaded. This approach ensures that resources are balanced efficiently, providing consistent and optimal performance across the entire cluster at all times. To activate this balancing mode, simply activate the following option in your ProxLB configuration:
|
||||
```
|
||||
mode: used
|
||||
```
|
||||
|
||||
Afterwards, restart the service (if running in daemon mode) to activate this rebalancing mode.
|
||||
|
||||
#### By Assigned Memory of VMs/CTs
|
||||
By ensuring that resources are always available for each VM, ProxLB prevents over-provisioning and maintains a balanced load across all nodes. This guarantees that users have consistent access to the resources they need. However, if the total assigned resources exceed the combined capacity of the cluster, ProxLB will issue a warning, indicating potential over-provisioning despite its best efforts to balance the load. To activate this balancing mode, simply activate the following option in your ProxLB configuration:
|
||||
```
|
||||
mode: assigned
|
||||
```
|
||||
|
||||
Afterwards, restart the service (if running in daemon mode) to activate this rebalancing mode.
|
||||
|
||||
#### Storage Balancing
|
||||
Starting with ProxLB 1.0.3, ProxLB also supports the balancing of underlying shared storage. In this case, all attached disks (`rootfs` in a context of a CT) of a VM or CT are being fetched and evaluated. If a VM has multiple disks attached, the disks can also be distributed over different storages. As a result, only shared storage is supported. Non shared storage would require to move the whole VM including all attached disks to the parent's node local storage.
|
||||
|
||||
Limitations:
|
||||
* Only shared storage
|
||||
* Only supported for the following VM disk types:
|
||||
* ide (only disks, not CD)
|
||||
* nvme
|
||||
* scsi
|
||||
* virtio
|
||||
* sata
|
||||
* rootfs (Container)
|
||||
|
||||
*Note: Storage balancing is currently in beta and should be used carefully.*
|
||||
|
||||
### Affinity Rules / Grouping Relationships
|
||||
#### Affinity (Stay Together)
|
||||
<img align="left" src="https://cdn.gyptazy.com/images/plb-rebalancing-include-balance-group.jpg"/> Access the Proxmox Web UI by opening your web browser and navigating to your Proxmox VE web interface, then log in with your credentials. Navigate to the VM you want to tag by selecting it from the left-hand navigation panel. Click on the "Options" tab to view the VM's options, then select "Edit" or "Add" (depending on whether you are editing an existing tag or adding a new one). In the tag field, enter plb_include_ followed by your unique identifier, for example, plb_include_group1. Save the changes to apply the tag to the VM. Repeat these steps for each VM that should be included in the group.
|
||||
|
||||
#### Anti-Affinity (Keep Apart)
|
||||
<img align="left" src="https://cdn.gyptazy.com/images/plb-rebalancing-exclude-balance-group.jpg"/> Access the Proxmox Web UI by opening your web browser and navigating to your Proxmox VE web interface, then log in with your credentials. Navigate to the VM you want to tag by selecting it from the left-hand navigation panel. Click on the "Options" tab to view the VM's options, then select "Edit" or "Add" (depending on whether you are editing an existing tag or adding a new one). In the tag field, enter plb_exclude_ followed by your unique identifier, for example, plb_exclude_critical. Save the changes to apply the tag to the VM. Repeat these steps for each VM that should be excluded from being on the same node.
|
||||
|
||||
#### Ignore VMs (Tag Style)
|
||||
<img align="left" src="https://cdn.gyptazy.com/images/plb-rebalancing-ignore-vm.jpg"/> In Proxmox, you can ensure that certain VMs are ignored during the rebalancing process by setting a specific tag within the Proxmox Web UI, rather than solely relying on configurations in the ProxLB config file. This can be achieved by adding the tag 'plb_ignore_vm' to the VM. Once this tag is applied, the VM will be excluded from any further rebalancing operations, simplifying the management process.
|
||||
|
||||
### Systemd
|
||||
When installing a Linux distribution (such as .deb or .rpm) file, this will be shipped with a systemd unit file. The default configuration file will be sourced from `/etc/proxlb/proxlb.conf`.
|
||||
|
||||
| Unit Name | Options |
|
||||
|------|:------:|
|
||||
| proxlb | start, stop, status, restart |
|
||||
|
||||
### Manual
|
||||
A manual installation is possible and also supports BSD based systems. Proxmox Rebalancing Service relies on mainly two important files:
|
||||
* proxlb (Python Executable)
|
||||
* proxlb.conf (Config file)
|
||||
|
||||
The executable must be able to read the config file, if no dedicated config file is given by the `-c` argument, PLB tries to read it from `/etc/proxlb/proxlb.conf`.
|
||||
|
||||
### Proxmox GUI Integration
|
||||
<img align="left" src="https://cdn.gyptazy.com/images/proxlb-GUI-integration.jpg"/> PLB can also be directly be used from the Proxmox Web UI by installing the optional package `pve-proxmoxlb-service-ui` package which has a dependency on the `proxlb` package. For the Web UI integration, it requires to be installed (in addition) on the nodes on the cluster. Afterwards, a new menu item is present in the HA chapter called `Rebalancing`. This chapter provides two possibilities:
|
||||
* Rebalancing VM workloads
|
||||
* Migrate VM workloads away from a defined node (e.g. maintenance preparation)
|
||||
|
||||
### Quick Start
|
||||
The easiest way to get started is by using the ready-to-use packages that I provide on my CDN and to run it on a Linux Debian based system. This can also be one of the Proxmox nodes itself.
|
||||
|
||||
```
|
||||
wget https://cdn.gyptazy.com/files/os/debian/proxlb/proxlb_1.0.5_amd64.deb
|
||||
dpkg -i proxlb_1.0.5_amd64.deb
|
||||
# Adjust your config
|
||||
vi /etc/proxlb/proxlb.conf
|
||||
systemctl restart proxlb
|
||||
systemctl status proxlb
|
||||
```
|
||||
|
||||
### Container Quick Start (Docker/Podman)
|
||||
Creating a container image of ProxLB is straightforward using the provided Dockerfile. The Dockerfile simplifies the process by automating the setup and configuration required to get ProxLB running in a container. Simply follow the steps in the Dockerfile to build the image, ensuring all dependencies and configurations are correctly applied. For those looking for an even quicker setup, a ready-to-use ProxLB container image is also available, eliminating the need for manual building and allowing for immediate deployment.
|
||||
|
||||
```bash
|
||||
git clone https://github.com/gyptazy/ProxLB.git
|
||||
cd ProxLB
|
||||
docker build -t proxlb .
|
||||
```
|
||||
|
||||
Afterwards simply adjust the config file to your needs:
|
||||
```
|
||||
vi /etc/proxlb/proxlb.conf
|
||||
```
|
||||
|
||||
Finally, start the created container.
|
||||
```bash
|
||||
docker run -it --rm -v $(pwd)/proxlb.conf:/etc/proxlb/proxlb.conf proxlb
|
||||
```
|
||||
|
||||
### Logging
|
||||
ProxLB uses the `SystemdHandler` for logging. You can find all your logs in your systemd unit log or in the `journalctl`. In default, ProxLB only logs critical events. However, for further understanding of the balancing it might be useful to change this to `INFO` or `DEBUG` which can simply be done in the [proxlb.conf](https://github.com/gyptazy/ProxLB/blob/main/proxlb.conf#L14) file by changing the `log_verbosity` parameter.
|
||||
|
||||
Available logging values:
|
||||
| Verbosity | Description |
|
||||
|------|:------:|
|
||||
| DEBUG | This option logs everything and is needed for debugging the code. |
|
||||
| INFO | This option provides insides behind the scenes. What/why has been something done and with which values. |
|
||||
| WARNING | This option provides only warning messages, which might be a problem in general but not for the application itself. |
|
||||
| CRITICAL | This option logs all critical events that will avoid running ProxLB. |
|
||||
|
||||
## Motivation
|
||||
As a developer managing a cluster of virtual machines for my projects, I often encountered the challenge of resource imbalance. Nodes within the cluster would become unevenly loaded, with some nodes being overburdened while others remained underutilized. This imbalance led to inefficiencies, performance bottlenecks, and increased operational costs. Frustrated by the lack of an adequate solution to address this issue, I decided to develop the ProxLB (PLB) to ensure better resource distribution across my clusters.
|
||||
|
||||
My primary motivation for creating PLB stemmed from my work on my BoxyBSD project, where I consistently faced the difficulty of maintaining balanced nodes while running various VM workloads but also on my personal clusters. The absence of an efficient rebalancing mechanism made it challenging to achieve optimal performance and stability. Recognizing the necessity for a tool that could gather and analyze resource metrics from both the cluster nodes and the running VMs, I embarked on developing ProxLB.
|
||||
|
||||
PLB meticulously collects detailed resource usage data from each node in a Proxmox cluster, including CPU load, memory usage, and local disk space utilization. It also gathers comprehensive statistics from all running VMs, providing a granular understanding of the workload distribution. With this data, PLB intelligently redistributes VMs based on memory usage, local disk usage, and CPU usage. This ensures that no single node is overburdened, storage resources are evenly distributed, and the computational load is balanced, enhancing overall cluster performance.
|
||||
|
||||
As an advocate of the open-source philosophy, I believe in the power of community and collaboration. By sharing solutions like PLB, I aim to contribute to the collective knowledge and tools available to developers facing similar challenges. Open source fosters innovation, transparency, and mutual support, enabling developers to build on each other's work and create better solutions together.
|
||||
|
||||
Developing PLB was driven by a desire to solve a real problem I faced in my projects. However, the spirit behind this effort was to provide a valuable resource to the community. By open-sourcing PLB, I hope to help other developers manage their clusters more efficiently, optimize their resource usage, and reduce operational costs. Sharing this solution aligns with the core principles of open source, where the goal is not only to solve individual problems but also to contribute to the broader ecosystem.
|
||||
|
||||
## References
|
||||
Here you can find some overviews of references for and about the ProxLB (PLB):
|
||||
|
||||
| Description | Link |
|
||||
|------|:------:|
|
||||
| General introduction into ProxLB | https://gyptazy.com/blog/proxlb-rebalancing-vm-workloads-across-nodes-in-proxmox-clusters/ |
|
||||
| Howto install and use ProxLB on Debian to rebalance vm workloads in a Proxmox cluster | https://gyptazy.com/howtos/howto-install-and-use-proxlb-to-rebalance-vm-workloads-across-nodes-in-proxmox-clusters/ |
|
||||
|
||||
## Downloads
|
||||
ProxLB can be obtained in man different ways, depending on which use case you prefer. You can use simply copy the code from GitHub, use created packages for Debian or RedHat based systems, use a Repository to keep ProxLB always up to date or simply use a Container image for Docker/Podman.
|
||||
|
||||
### Packages
|
||||
Ready to use packages can be found at:
|
||||
* https://cdn.gyptazy.com/files/os/debian/proxlb/
|
||||
* https://cdn.gyptazy.com/files/os/ubuntu/proxlb/
|
||||
* https://cdn.gyptazy.com/files/os/redhat/proxlb/
|
||||
|
||||
### Repository
|
||||
Debian based systems can also use the repository by adding the following line to their apt sources:
|
||||
|
||||
#### Stable Releases
|
||||
```
|
||||
deb https://repo.gyptazy.com/stable /
|
||||
```
|
||||
|
||||
#### Beta/Testing Releases
|
||||
```
|
||||
deb https://repo.gyptazy.com/testing /
|
||||
```
|
||||
|
||||
The Repository's GPG key can be found at: `https://repo.gyptazy.com/repository.gpg`
|
||||
|
||||
You can also simply import it by running:
|
||||
|
||||
```
|
||||
# KeyID: 17169F23F9F71A14AD49EDADDB51D3EB01824F4C
|
||||
# UID: gyptazy Solutions Repository <contact@gyptazy.com>
|
||||
# SHA256: 52c267e6f4ec799d40cdbdb29fa518533ac7942dab557fa4c217a76f90d6b0f3 repository.gpg
|
||||
|
||||
wget -O /etc/apt/trusted.gpg.d/proxlb.asc https://repo.gyptazy.com/repository.gpg
|
||||
```
|
||||
|
||||
*Note: The defined repositories `repo.gyptazy.com` and `repo.proxlb.de` are the same!*
|
||||
|
||||
### Container Images (Docker/Podman)
|
||||
Container Images for Podman, Docker etc., can be found at:
|
||||
| Version | Image |
|
||||
|------|:------:|
|
||||
| latest | cr.gyptazy.com/proxlb/proxlb:latest |
|
||||
| v1.0.5 | cr.gyptazy.com/proxlb/proxlb:v1.0.5 |
|
||||
| v1.0.4 | cr.gyptazy.com/proxlb/proxlb:v1.0.4 |
|
||||
| v1.0.3 | cr.gyptazy.com/proxlb/proxlb:v1.0.3 |
|
||||
| v1.0.2 | cr.gyptazy.com/proxlb/proxlb:v1.0.2 |
|
||||
| v1.0.0 | cr.gyptazy.com/proxlb/proxlb:v1.0.0 |
|
||||
| v0.9.9 | cr.gyptazy.com/proxlb/proxlb:v0.9.9 |
|
||||
|
||||
## Misc
|
||||
### Bugs
|
||||
Bugs can be reported via the GitHub issue tracker [here](https://github.com/gyptazy/ProxLB/issues). You may also report bugs via email or deliver PRs to fix them on your own. Therefore, you might also see the contributing chapter.
|
||||
|
||||
### Contributing
|
||||
Feel free to add further documentation, to adjust already existing one or to contribute with code. Please take care about the style guide and naming conventions. You can find more in our [CONTRIBUTING.md](https://github.com/gyptazy/ProxLB/blob/main/CONTRIBUTING.md) file.
|
||||
|
||||
### Documentation
|
||||
You can also find additional and more detailed documentation within the [docs/](https://github.com/gyptazy/ProxLB/tree/main/docs) directory.
|
||||
|
||||
### Support
|
||||
If you need assistance or have any questions, we offer support through our dedicated [chat room](https://matrix.to/#/#proxlb:gyptazy.com) in Matrix and on Reddit. Join our community for real-time help, advice, and discussions. Connect with us in our dedicated chat room for immediate support and live interaction with other users and developers. You can also visit our [GitHub Community](https://github.com/gyptazy/ProxLB/discussions/) to post your queries, share your experiences, and get support from fellow community members and moderators. You may also just open directly an issue [here](https://github.com/gyptazy/ProxLB/issues) on GitHub. We are here to help and ensure you have the best experience possible.
|
||||
|
||||
| Support Channel | Link |
|
||||
|------|:------:|
|
||||
| Matrix | [#proxlb:gyptazy.com](https://matrix.to/#/#proxlb:gyptazy.com) |
|
||||
| GitHub Community | [GitHub Community](https://github.com/gyptazy/ProxLB/discussions/)
|
||||
| GitHub | [ProxLB GitHub](https://github.com/gyptazy/ProxLB/issues) |
|
||||
|
||||
### Author(s)
|
||||
* Florian Paul Azim Hoberg @gyptazy (https://gyptazy.com)
|
||||
## Reasons
|
||||
You can find more details about this in [my blog post](https://gyptazy.com/blog/proxlb-project-handover-to-credativ/).
|
||||
|
||||
89
config/proxlb_example.yaml
Normal file
89
config/proxlb_example.yaml
Normal file
@@ -0,0 +1,89 @@
|
||||
proxmox_api:
|
||||
hosts: ['virt01.example.com', '10.10.10.10', 'fe01:bad:code::cafe']
|
||||
user: root@pam
|
||||
pass: crazyPassw0rd!
|
||||
# API Token method
|
||||
# token_id: proxlb
|
||||
# token_secret: 430e308f-1337-1337-beef-1337beefcafe
|
||||
ssl_verification: True
|
||||
timeout: 10
|
||||
# API Connection retries
|
||||
# retries: 1
|
||||
# wait_time: 1
|
||||
|
||||
proxmox_cluster:
|
||||
maintenance_nodes: ['virt66.example.com']
|
||||
ignore_nodes: []
|
||||
overprovisioning: True
|
||||
|
||||
balancing:
|
||||
enable: True
|
||||
enforce_affinity: False
|
||||
enforce_pinning: False
|
||||
parallel: False
|
||||
# If running parallel job, you can define
|
||||
# the amount of prallel jobs (default: 5)
|
||||
parallel_jobs: 1
|
||||
live: True
|
||||
with_local_disks: True
|
||||
with_conntrack_state: True
|
||||
balance_types: ['vm', 'ct'] # 'vm' | 'ct'
|
||||
max_job_validation: 1800 # Maximum time (in seconds) a job validation may take
|
||||
memory_threshold: 75 # Optional: Maximum threshold (in percent) to trigger balancing actions
|
||||
balanciness: 5 # Maximum delta of resource usage between highest and lowest usage node
|
||||
method: memory # 'memory' | 'cpu' | 'disk'
|
||||
mode: used # 'assigned' | 'used' | 'psi'
|
||||
balance_larger_guests_first: False # Option to prioritize balancing of larger or smaller guests first
|
||||
node_resource_reserve: # Optional: Define resource reservations for nodes (in GB)
|
||||
defaults: # Default reservation values applying to all nodes (unless explicitly overridden)
|
||||
memory: 4 # Default: 4 GB memory reserved per node
|
||||
node01: # Specific node reservation override for node 'node01'
|
||||
memory: 6 # Specific: 6 GB memory reserved for node 'node01'
|
||||
# # PSI thresholds only apply when using mode 'psi'
|
||||
# psi:
|
||||
# nodes:
|
||||
# memory:
|
||||
# pressure_full: 0.20
|
||||
# pressure_some: 0.20
|
||||
# pressure_spikes: 1.00
|
||||
# cpu:
|
||||
# pressure_full: 0.20
|
||||
# pressure_some: 0.20
|
||||
# pressure_spikes: 1.00
|
||||
# disk:
|
||||
# pressure_full: 0.20
|
||||
# pressure_some: 0.20
|
||||
# pressure_spikes: 1.00
|
||||
# guests:
|
||||
# memory:
|
||||
# pressure_full: 0.20
|
||||
# pressure_some: 0.20
|
||||
# pressure_spikes: 1.00
|
||||
# cpu:
|
||||
# pressure_full: 0.20
|
||||
# pressure_some: 0.20
|
||||
# pressure_spikes: 1.00
|
||||
# disk:
|
||||
# pressure_full: 0.20
|
||||
# pressure_some: 0.20
|
||||
# pressure_spikes: 1.00
|
||||
pools: # Optional: Define affinity/anti-affinity rules per pool
|
||||
dev: # Pool name: dev
|
||||
type: affinity # Type: affinity (keeping VMs together)
|
||||
de-nbg01-db: # Pool name: de-nbg01-db
|
||||
type: anti-affinity # Type: anti-affinity (spreading VMs apart)
|
||||
pin: # Define a pinning og guests to specific node(s)
|
||||
- virt66
|
||||
- virt77
|
||||
strict: False # Disable strict mode of node pinning for this pool
|
||||
|
||||
service:
|
||||
daemon: True
|
||||
schedule:
|
||||
interval: 12
|
||||
format: hours
|
||||
delay:
|
||||
enable: False
|
||||
time: 1
|
||||
format: hours
|
||||
log_level: INFO
|
||||
127
debian/changelog
vendored
Normal file
127
debian/changelog
vendored
Normal file
@@ -0,0 +1,127 @@
|
||||
proxlb (1.1.11) stable; urgency=medium
|
||||
|
||||
* Add support for native Proxmox HA/Affinity rules. (Closes: #391)
|
||||
* Add safety guard to avoid node overprovisioning. (Closes: #275)
|
||||
* Fix affinity rules pre-validation (avoid rebalancing if already ensured). (Closes: #335)
|
||||
* Add resource reservation support for PVE nodes. (Closes: #373)
|
||||
* Change/Adjust balancing and sorting behaviour. (Closes: #378)
|
||||
* Add control over balancing workloads by prefering smaller/larger guest objects. (Closes: #387)
|
||||
* Fix pinning of guest and node relations when using pool based pinning. (Closes: #395)
|
||||
* Add validation of HA jobs by fetching the related child jobs. (Closes: #402)
|
||||
* Add support for configuring node-pinning strictness (mode: strict/prefer). (Closes: #406)
|
||||
* Fix that tag based ignored guests got still moved. (Closes: #408)
|
||||
* Add parameter to enforce guest node relationships when pinned even when the cluster is balanced. (Closes: #414)
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.com> Mon, 12 Jan 2026 11:11:04 +0001
|
||||
|
||||
proxlb (1.1.10) stable; urgency=medium
|
||||
|
||||
* Prevent redundant rebalancing by validating existing affinity enforcement before taking actions. (Closes: #335)
|
||||
* Add safety-guard for PVE 8 users when activating conntrack-aware migrations mistakenly. (Closes: #359)
|
||||
* Fix the Proxmox API connection validation which returned a false-positive logging message of timeouts. (Closes: #361)
|
||||
* Refactored the whole Proxmox API connection function. (Closes: #361)
|
||||
* Fix a crash during PVE resource pool enumeration by skipping members not having a 'name' property. (Closes: #368)
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.com> Tue, 25 Nov 2025 09:12:04 +0001
|
||||
|
||||
proxlb (1.1.9.1) stable; urgency=medium
|
||||
|
||||
* Fix quoting in f-strings which may cause issues on PVE 8 / Debian Bookworm systems. (Closes: #352)
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.com> Thu, 30 Oct 2025 17:41:02 +0001
|
||||
|
||||
proxlb (1.1.9) stable; urgency=medium
|
||||
|
||||
* Add pressure (PSI) based balancing for memory, cpu, disk (req. PVE9 or greater). (Closes: #339)
|
||||
* Add (memory) threshold for nodes before running balancing. (Closes: #342)
|
||||
* Add affinity/anti-affinity support by pools. (Closes: #343)
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.com> Thu, 30 Oct 2025 06:58:43 +0001
|
||||
|
||||
proxlb (1.1.8) stable; urgency=medium
|
||||
|
||||
* Fix API errors when using conntrack aware migration with older PVE version. (Closes: #318)
|
||||
* Add a static ProxLB prefix to the log output when used by journal handler. (Closes: #329)
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.com> Thu, 09 Oct 2025 09:04:13 +0002
|
||||
|
||||
proxlb (1.1.7) stable; urgency=medium
|
||||
|
||||
* Add conntrack state aware migrations of VMs. (Closes: #305)
|
||||
* Add graceful shutdown for SIGINT command. (Closes: #304)
|
||||
* Fix crash when validating absent migration job ids. (Closes: #308)
|
||||
* Fix guest object names are not being evaluated in debug log. (Closes: #310)
|
||||
* Note: Have a great Dutch Proxmox Day 2025!
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.com> Thu, 04 Sep 2025 19:23:51 +0000
|
||||
|
||||
proxlb (1.1.6.1) stable; urgency=medium
|
||||
|
||||
* Validate for node presence when pinning VMs to avoid crashing. (Closes: #296)
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.com> Thu, 04 Sep 2025 19:23:51 +0000
|
||||
|
||||
proxlb (1.1.6) stable; urgency=medium
|
||||
|
||||
* Add validation for provided API user token id to avoid confusions. (Closes: #291)
|
||||
* Fix stacktrace output when validating permissions on non existing users in Proxmox. (Closes: #291)
|
||||
* Fix Overprovisioning first node if anti_affinity_group has only one member. (Closes: #295)
|
||||
* Validate for node presence when pinning guests to avoid crashing. (Closes: #296)
|
||||
* Fix balancing evaluation of guest types (e.g., VM or CT). (Closes: #268)
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.com> Thu, 04 Sep 2025 05:12:19 +0000
|
||||
|
||||
proxlb (1.1.5) stable; urgency=medium
|
||||
|
||||
* Allow custom API ports instead of fixed tcp/8006. (Closes: #260)
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.com> Mon, 14 Jul 2025 11:07:34 +0000
|
||||
|
||||
proxlb (1.1.4) stable; urgency=medium
|
||||
|
||||
* Allow pinning of guests to a group of nodes. (Closes: #245)
|
||||
* Modified log levels to make output lighter at INFO level. (Closes: #255)
|
||||
* ixed an issue where balancing was performed in combination of deactivated balancing and dry-run mode. (Closes: #248)
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.com> Fri, 27 Jun 2025 16:22:58 +0000
|
||||
|
||||
proxlb (1.1.3) stable; urgency=medium
|
||||
|
||||
* Add relaod (SIGHUP) function to ProxLB to reload the configuration. (Closes: #189)
|
||||
* Add optional wait time parameter to delay execution until the service takes action. (Closes: #239)
|
||||
* Make the amount of parallel migrations configurable. (Closes: #241)
|
||||
* Use the average CPU consumption of a guest within the last 60 minutes instead of the current CPU usage. (Closes: #94)
|
||||
* Align maintenance mode with Proxmox HA maintenance mode. (Closes: #232)
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.com> Thu, 19 Jun 2025 09:10:43 +0000
|
||||
|
||||
proxlb (1.1.2) stable; urgency=medium
|
||||
|
||||
* Add a configurable retry mechanism when connecting to the Proxmox API. (Closed: #157)
|
||||
* Add 1-to-1 relationships between guest and hypervisor node to ping a guest on a node. (Closes #218)
|
||||
* Force type cast cpu count of guests to int for some corner cases where a str got returned. (Closed #222)
|
||||
* Fix systemd unit file to run after network on non PVE nodes. (Closes #137)
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.com> Mon, 13 May 2025 18:12:04 +0000
|
||||
|
||||
proxlb (1.1.1) stable; urgency=medium
|
||||
|
||||
* Fix tag evluation for VMs for being ignored for further balancing. (Closes: #163)
|
||||
* Improve logging verbosity of messages that had a wrong servity. (Closes: #165)
|
||||
* Providing the API upstream error message when migration fails in debug mode (Closes: #205)
|
||||
* Change the default behaviour of the daemon mode to active. (Closes: #176)
|
||||
* Change the default banalcing mode to used instead of assigned. (Closes: #180)
|
||||
* Set cpu_used to the cpu usage, which is a percent, times the total number of cores to get a number where guest cpu_used can be added to nodes cpu_used and be meaningful. (Closes: #195)
|
||||
* Honor the value when balancing should not be performed and stop balancing. (Closes: #174)
|
||||
* Allow the use of minutes instead of hours and only accept hours or minutes in the format. (Closes: #187)
|
||||
* Remove hard coded memory usage from lowest usage node and use method and mode specified in configuration instead. (Closes: #197)
|
||||
* Fix the guest type relationship in the logs when a migration job failed. (Closes: #204)
|
||||
* Requery a guest if that running guest reports 0 cpu usage. (Closes: #200)
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.com> Sat, 20 Apr 2025 20:55:02 +0000
|
||||
|
||||
proxlb (1.1.0) stable; urgency=medium
|
||||
|
||||
* Refactored code base of ProxLB. (Closes: #114)
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.com> Mon, 17 Mar 2025 18:55:02 +0000
|
||||
12
debian/control
vendored
Normal file
12
debian/control
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
Source: proxlb
|
||||
Maintainer: Florian Paul Azim Hoberg <gyptazy@gyptazy.com>
|
||||
Section: admin
|
||||
Priority: optional
|
||||
Standards-Version: 4.5.0
|
||||
Build-Depends: debhelper-compat (= 13), dh-python, python3-all, python3-setuptools
|
||||
|
||||
Package: proxlb
|
||||
Architecture: all
|
||||
Depends: ${python3:Depends}, ${misc:Depends}, python3-requests, python3-urllib3, python3-packaging, python3-proxmoxer, python3-yaml
|
||||
Description: An advanced resource scheduler and load balancer for Proxmox clusters
|
||||
An advanced resource scheduler and load balancer for Proxmox clusters that also supports maintenance mode and affinity/anti-affinity rules.
|
||||
2
debian/install
vendored
Normal file
2
debian/install
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
proxlb /usr/lib/python3/dist-packages/
|
||||
service/proxlb.service /lib/systemd/system/
|
||||
16
debian/postinst
vendored
Executable file
16
debian/postinst
vendored
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
#DEBHELPER#
|
||||
if [ "$1" = "configure" ]; then
|
||||
systemctl enable proxlb.service
|
||||
systemctl restart proxlb.service || true
|
||||
|
||||
# Create the 'plb' user if it does not exist
|
||||
if ! id "plb" &>/dev/null; then
|
||||
useradd --system --home /var/lib/proxlb --create-home --shell /usr/sbin/nologin --group nogroup plb
|
||||
echo "User 'plb' created."
|
||||
else
|
||||
echo "User 'plb' already exists, skipping creation."
|
||||
fi
|
||||
fi
|
||||
16
debian/prerm
vendored
Executable file
16
debian/prerm
vendored
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
#DEBHELPER#
|
||||
if [ "$1" = "remove" ]; then
|
||||
systemctl stop proxlb.service || true
|
||||
systemctl disable proxlb.service || true
|
||||
|
||||
# Remove the 'plb' user if it exists
|
||||
if id "plb" &>/dev/null; then
|
||||
userdel --remove plb
|
||||
echo "User 'plb' removed."
|
||||
else
|
||||
echo "User 'plb' does not exist, skipping removal."
|
||||
fi
|
||||
fi
|
||||
4
debian/rules
vendored
Normal file
4
debian/rules
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/make -f
|
||||
%:
|
||||
dh $@ --with python3 --buildsystem=pybuild
|
||||
|
||||
1
debian/source/format
vendored
Normal file
1
debian/source/format
vendored
Normal file
@@ -0,0 +1 @@
|
||||
3.0 (native)
|
||||
@@ -1,32 +0,0 @@
|
||||
# Installation
|
||||
|
||||
## Packages
|
||||
The easiest way to get started is by using the ready-to-use packages that I provide on my CDN and to run it on a Linux Debian based system. This can also be one of the Proxmox nodes itself.
|
||||
|
||||
```
|
||||
wget https://cdn.gyptazy.ch/files/amd64/debian/proxlb/proxlb_0.9.9_amd64.deb
|
||||
dpkg -i proxlb_0.9.9_amd64.deb
|
||||
# Adjust your config
|
||||
vi /etc/proxlb/proxlb.conf
|
||||
systemctl restart proxlb
|
||||
systemctl status proxlb
|
||||
```
|
||||
|
||||
## Container (Docker/Podman)
|
||||
Creating a container image of ProxLB is straightforward using the provided Dockerfile. The Dockerfile simplifies the process by automating the setup and configuration required to get ProxLB running in a container. Simply follow the steps in the Dockerfile to build the image, ensuring all dependencies and configurations are correctly applied. For those looking for an even quicker setup, a ready-to-use ProxLB container image is also available, eliminating the need for manual building and allowing for immediate deployment.
|
||||
|
||||
```bash
|
||||
git clone https://github.com/gyptazy/ProxLB.git
|
||||
cd ProxLB
|
||||
build -t proxlb .
|
||||
```
|
||||
|
||||
Afterwards simply adjust the config file to your needs:
|
||||
```
|
||||
vi /etc/proxlb/proxlb.conf
|
||||
```
|
||||
|
||||
Finally, start the created container.
|
||||
```bash
|
||||
docker run -it --rm -v $(pwd)/proxlb.conf:/etc/proxlb/proxlb.conf proxlb
|
||||
```
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user