mirror of
https://github.com/gyptazy/ProxLB.git
synced 2026-04-06 04:41:58 +02:00
Compare commits
62 Commits
v0.9.9-dev
...
feature/ad
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
17c9c98bbc | ||
|
|
486acad44f | ||
|
|
f73261e68c | ||
|
|
464644def8 | ||
|
|
93b7894a6f | ||
|
|
d53a6f695f | ||
|
|
029ec31ad9 | ||
|
|
045159eb8d | ||
|
|
3415e0ccec | ||
|
|
ab44d97c7c | ||
|
|
139bcf04f1 | ||
|
|
1420183be7 | ||
|
|
31572830e7 | ||
|
|
5c96fc49eb | ||
|
|
7ddb7ca205 | ||
|
|
8cc2d7188a | ||
|
|
4620bde999 | ||
|
|
45b35d88c4 | ||
|
|
200244bce1 | ||
|
|
fe715f203e | ||
|
|
959c3b5f8d | ||
|
|
ef8b97efc2 | ||
|
|
e4d40b460b | ||
|
|
39142780d5 | ||
|
|
143135f1d8 | ||
|
|
c865829a2e | ||
|
|
101855b404 | ||
|
|
37e7a601be | ||
|
|
8791007e77 | ||
|
|
3a2c16b137 | ||
|
|
adc476e848 | ||
|
|
28be8b8146 | ||
|
|
cbaeba2046 | ||
|
|
61de9cb01d | ||
|
|
2e36d59f84 | ||
|
|
3f1444a19f | ||
|
|
86fe2487b5 | ||
|
|
46832ba6b2 | ||
|
|
4671b414b8 | ||
|
|
4efa9df965 | ||
|
|
5c6cf04ed2 | ||
|
|
62f82e389a | ||
|
|
1c7a630e39 | ||
|
|
f2209ce1b0 | ||
|
|
1908c2e8d8 | ||
|
|
0e1774ee84 | ||
|
|
8bf4b1f107 | ||
|
|
86009ff3c2 | ||
|
|
3d634ef824 | ||
|
|
e204bba54f | ||
|
|
0cd5bb0b3f | ||
|
|
2278a91cb9 | ||
|
|
d26efea831 | ||
|
|
bf5ba5f8a6 | ||
|
|
5b40b2ffdb | ||
|
|
3fd8618c35 | ||
|
|
a242f0ebce | ||
|
|
a5576db109 | ||
|
|
6feb7b6488 | ||
|
|
511d0a3c24 | ||
|
|
fdb385e3a5 | ||
|
|
25953eb9b9 |
2
.changelogs/1.0.0/10_add_container_support.yml
Normal file
2
.changelogs/1.0.0/10_add_container_support.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add Docker/Podman support. [#10 by @daanbosch]
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add option to rebalance by assigned VM resources to avoid overprovisioning. [#16]
|
||||
4
.changelogs/1.0.0/17-add-configurable-log-verbosity.yml
Normal file
4
.changelogs/1.0.0/17-add-configurable-log-verbosity.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
added:
|
||||
- Add feature to make log verbosity configurable [#17].
|
||||
changed:
|
||||
- Adjusted general logging and log more details.
|
||||
2
.changelogs/1.0.0/27_add_container_lxc_support.yml
Normal file
2
.changelogs/1.0.0/27_add_container_lxc_support.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add LXC/Container integration. [#27]
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add option_mode to rebalance by node's free resources in percent (instead of bytes). [#29]
|
||||
2
.changelogs/1.0.0/3_create_grouping_include_feature.yml
Normal file
2
.changelogs/1.0.0/3_create_grouping_include_feature.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add include grouping feature to rebalance VMs bundled to new nodes. [#3]
|
||||
2
.changelogs/1.0.0/4_create_grouping_exclude_feature.yml
Normal file
2
.changelogs/1.0.0/4_create_grouping_exclude_feature.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add exclude grouping feature to rebalance VMs from being located together to new nodes. [#4]
|
||||
2
.changelogs/1.0.0/6_add_dry_run_support.yml
Normal file
2
.changelogs/1.0.0/6_add_dry_run_support.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add dry-run support to see what kind of rebalancing would be done. [#6]
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add feature to prevent VMs from being relocated by defining the 'plb_ignore_vm' tag. [#7]
|
||||
2
.changelogs/1.0.0/7_ignore_vms_by_wildcard.yml
Normal file
2
.changelogs/1.0.0/7_ignore_vms_by_wildcard.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add feature to prevent VMs from being relocated by defining a wildcard pattern. [#7]
|
||||
1
.changelogs/1.0.0/release_meta.yml
Normal file
1
.changelogs/1.0.0/release_meta.yml
Normal file
@@ -0,0 +1 @@
|
||||
date: 2024-08-01
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add option to run ProxLB only on the Proxmox's master node in the cluster (reg. HA feature). [#40]
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add option to run migrations in parallel or sequentially. [#41]
|
||||
2
.changelogs/1.0.2/45_fix_daemon_timer.yml
Normal file
2
.changelogs/1.0.2/45_fix_daemon_timer.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
changed:
|
||||
- Fix daemon timer to use hours instead of minutes. [#45]
|
||||
2
.changelogs/1.0.2/49_fix_cmake_debian_packaging.yml
Normal file
2
.changelogs/1.0.2/49_fix_cmake_debian_packaging.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fix CMake packaging for Debian package to avoid overwriting the config file. [#49]
|
||||
1
.changelogs/1.0.2/release_meta.yml
Normal file
1
.changelogs/1.0.2/release_meta.yml
Normal file
@@ -0,0 +1 @@
|
||||
date: 2024-08-13
|
||||
2
.changelogs/1.0.3/51_add_storage_balancing.yml
Normal file
2
.changelogs/1.0.3/51_add_storage_balancing.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add storage balancing function. [#51]
|
||||
6
.changelogs/1.0.3/53_code_improvements.yml
Normal file
6
.changelogs/1.0.3/53_code_improvements.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
added:
|
||||
- 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]
|
||||
changed:
|
||||
- Improve the underlying code base for future implementations. [#53]
|
||||
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add feature to allow the API hosts being provided as a comma separated list. [#60]
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Improved the overall validation and error handling. [#64]
|
||||
2
.changelogs/1.0.3/67_fix_anti_affinity_rules.yml
Normal file
2
.changelogs/1.0.3/67_fix_anti_affinity_rules.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fix anti-affinity rules not evaluating a new and different node. [#67]
|
||||
2
.changelogs/1.0.3/68_adjust_logging_ha_services.yml
Normal file
2
.changelogs/1.0.3/68_adjust_logging_ha_services.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
changed:
|
||||
- Provide a more reasonable output when HA services are not active in a Proxmox cluster. [#68]
|
||||
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fix handling of unset `ignore_nodes` and `ignore_vms` resulted in an attribute error. [#71]
|
||||
2
.changelogs/1.0.3/74_fix_documentation_master_only.yml
Normal file
2
.changelogs/1.0.3/74_fix_documentation_master_only.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fix documentation for the master_only parameter placed in the wrong config section. [#74]
|
||||
2
.changelogs/1.0.3/8_add_best_next_node_for_placement.yml
Normal file
2
.changelogs/1.0.3/8_add_best_next_node_for_placement.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add cli arg `-b` to return the next best node for next VM/CT placement. [#8]
|
||||
2
.changelogs/1.0.3/bug_fix_cluster_master_only.yml
Normal file
2
.changelogs/1.0.3/bug_fix_cluster_master_only.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fixed `master_only` function by inverting the condition.
|
||||
@@ -0,0 +1,4 @@
|
||||
fixed:
|
||||
- Fix bug in the `proxlb.conf` in the vm_balancing section.
|
||||
added:
|
||||
- Add doc how to add dedicated user for authentication. (by @Dulux-Oz)
|
||||
1
.changelogs/1.0.3/release_meta.yml
Normal file
1
.changelogs/1.0.3/release_meta.yml
Normal file
@@ -0,0 +1 @@
|
||||
date: 2024-09-12
|
||||
2
.changelogs/1.0.4/58_add_maintenance_mode.yml
Normal file
2
.changelogs/1.0.4/58_add_maintenance_mode.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add maintenance mode to evacuate a node and move workloads for other nodes in the cluster. [#58]
|
||||
3
.changelogs/1.0.4/79_storage_balancing_whitelist.yml
Normal file
3
.changelogs/1.0.4/79_storage_balancing_whitelist.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
changed:
|
||||
- Run storage balancing only on supported shared storages. [#79]
|
||||
- Run storage balancing only when needed to save time. [#79]
|
||||
2
.changelogs/1.0.4/81_documentation_infrastrucutre.yml
Normal file
2
.changelogs/1.0.4/81_documentation_infrastrucutre.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
fixed:
|
||||
- Fix documentation for the underlying infrastructure. [#81]
|
||||
2
.changelogs/1.0.4/89_add_version_output.yml
Normal file
2
.changelogs/1.0.4/89_add_version_output.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
added:
|
||||
- Add version output cli arg. [#89]
|
||||
1
.changelogs/1.0.4/release_meta.yml
Normal file
1
.changelogs/1.0.4/release_meta.yml
Normal file
@@ -0,0 +1 @@
|
||||
date: TBD
|
||||
3
.flake8
Normal file
3
.flake8
Normal file
@@ -0,0 +1,3 @@
|
||||
[flake8]
|
||||
per-file-ignores =
|
||||
proxlb: E501,E221,E266,E231,E127,E222,E128
|
||||
26
.github/workflows/02-create-package.yml
vendored
Normal file
26
.github/workflows/02-create-package.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
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
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,2 +1,2 @@
|
||||
packaging/changelog-fragments-creator/
|
||||
dev/
|
||||
dev/
|
||||
61
CHANGELOG.md
61
CHANGELOG.md
@@ -6,6 +6,67 @@ 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.0.3] - 2024-09-12
|
||||
|
||||
### Added
|
||||
|
||||
- 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 feature to allow the API hosts being provided as a comma separated list. [#60]
|
||||
- Add storage balancing function. [#51]
|
||||
- Add doc how to add dedicated user for authentication. (by @Dulux-Oz)
|
||||
- Add cli arg `-b` to return the next best node for next VM/CT placement. [#8]
|
||||
|
||||
### Changed
|
||||
|
||||
- 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
|
||||
|
||||
- Fix documentation for the master_only parameter placed in the wrong config section. [#74]
|
||||
- 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 handling of unset `ignore_nodes` and `ignore_vms` resulted in an attribute error. [#71]
|
||||
- Fix anti-affinity rules not evaluating a new and different node. [#67]
|
||||
|
||||
|
||||
## [1.0.2] - 2024-08-13
|
||||
|
||||
### Added
|
||||
|
||||
- Add option to run migration in parallel or sequentially. [#41]
|
||||
- Add option to run ProxLB only on the Proxmox's master node in the cluster (reg. HA feature). [#40]
|
||||
|
||||
### Changed
|
||||
|
||||
- Fix daemon timer to use hours instead of minutes. [#45]
|
||||
- Fix CMake packaging for Debian package to avoid overwriting the config file. [#49]
|
||||
- Fix wonkey code style.
|
||||
|
||||
|
||||
## [1.0.0] - 2024-08-01
|
||||
|
||||
### Added
|
||||
|
||||
- Add feature to prevent VMs from being relocated by defining a wildcard pattern. [#7]
|
||||
- Add feature to make log verbosity configurable [#17].
|
||||
- Add option_mode to rebalance by node's free resources in percent (instead of bytes). [#29]
|
||||
- Add option to rebalance by assigned VM resources to avoid over provisioning. [#16]
|
||||
- Add Docker/Podman support. [#10 by @daanbosch]
|
||||
- Add exclude grouping feature to rebalance VMs from being located together to new nodes. [#4]
|
||||
- Add feature to prevent VMs from being relocated by defining the 'plb_ignore_vm' tag. [#7]
|
||||
- Add dry-run support to see what kind of rebalancing would be done. [#6]
|
||||
- Add LXC/Container integration. [#27]
|
||||
- Add include grouping feature to rebalance VMs bundled to new nodes. [#3]
|
||||
|
||||
### Changed
|
||||
|
||||
- Adjusted general logging and log more details.
|
||||
|
||||
|
||||
## [0.9.9] - 2024-07-06
|
||||
|
||||
### Added
|
||||
|
||||
121
CONTRIBUTING.md
Normal file
121
CONTRIBUTING.md
Normal file
@@ -0,0 +1,121 @@
|
||||
# Contributing to ProxLB (PLB)
|
||||
|
||||
Thank you for considering contributing to ProxLB! We appreciate your help in improving the efficiency and performance of Proxmox clusters. Below are guidelines for contributing to the project.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Contributing to ProxLB (PLB)](#contributing-to-proxlb-plb)
|
||||
- [Table of Contents](#table-of-contents)
|
||||
- [Creating an Issue](#creating-an-issue)
|
||||
- [Running Linting](#running-linting)
|
||||
- [Running Tests](#running-tests)
|
||||
- [Add Changelogs](#add-changelogs)
|
||||
- [Submitting a Pull Request](#submitting-a-pull-request)
|
||||
- [Code of Conduct](#code-of-conduct)
|
||||
- [Getting Help](#getting-help)
|
||||
|
||||
## Creating an Issue
|
||||
|
||||
If you encounter a bug, have a feature request, or have any suggestions, please create an issue in our GitHub repository. To create an issue:
|
||||
|
||||
1. **Go to the [Issues](https://github.com/gyptazy/proxlb/issues) section of the repository.**
|
||||
2. **Click on the "New issue" button.**
|
||||
3. **Select the appropriate issue template (Bug Report, Feature Request, or Custom Issue).**
|
||||
4. **Provide a clear and descriptive title.**
|
||||
5. **Fill out the necessary details in the issue template.** Provide as much detail as possible to help us understand and reproduce the issue or evaluate the feature request.
|
||||
|
||||
## Running Linting
|
||||
Before submitting a pull request, ensure that your changes sucessfully perform the lintin. ProxLB uses [flake8] for running tests. Follow these steps to run tests locally:
|
||||
|
||||
1. **Install pytest if you haven't already:**
|
||||
```sh
|
||||
pip install fake8
|
||||
```
|
||||
|
||||
2. **Run the lintin:**
|
||||
```sh
|
||||
python3 -m flake8 proxlb
|
||||
```
|
||||
|
||||
Linting will also be performed for each PR. Therefore, it might make sense to test this before pushing locally.
|
||||
|
||||
## Running Tests
|
||||
|
||||
Before submitting a pull request, ensure that your changes do not break existing functionality. ProxLB uses [pytest](https://docs.pytest.org/en/stable/) for running tests. Follow these steps to run tests locally:
|
||||
|
||||
1. **Install pytest if you haven't already:**
|
||||
```sh
|
||||
pip install pytest
|
||||
```
|
||||
|
||||
2. **Run the tests:**
|
||||
```sh
|
||||
pytest
|
||||
```
|
||||
|
||||
Ensure all tests pass before submitting your changes.
|
||||
|
||||
## Add Changelogs
|
||||
ProxLB uses the [Changelog Fragments Creator](https://github.com/gyptazy/changelog-fragments-creator) for creating the overall `CHANGELOG.md` file. This changelog file is being generated from the files placed in the https://github.com/gyptazy/ProxLB/tree/main/.changelogs/ directory. Each release is represented by its version number where additional yaml files are being placed and parsed by the CFC tool. Such files look like:
|
||||
|
||||
```
|
||||
added:
|
||||
- Add option to rebalance by assigned VM resources to avoid overprovisioning. [#16]
|
||||
```
|
||||
|
||||
Every PR should contain such a file describing the change to ensure this is also stated in the changelog file.
|
||||
|
||||
## Submitting a Pull Request
|
||||
|
||||
We welcome your contributions! Follow these steps to submit a pull request:
|
||||
|
||||
1. **Fork the repository to your GitHub account.**
|
||||
2. **Clone your forked repository to your local machine:**
|
||||
```sh
|
||||
git clone https://github.com/gyptazy/proxlb.git
|
||||
cd proxlb
|
||||
```
|
||||
|
||||
Please prefix your PR regarding its type. It might be:
|
||||
* doc
|
||||
* feature
|
||||
* fix
|
||||
|
||||
It should also provide the issue id to which it is related.
|
||||
|
||||
1. **Create a new branch for your changes:**
|
||||
```sh
|
||||
git checkout -b feature/10-add-new-cool-stuff
|
||||
```
|
||||
|
||||
2. **Make your changes and commit them with a descriptive commit message:**
|
||||
```sh
|
||||
git add .
|
||||
git commit -m "feature: Adding new cool stuff"
|
||||
```
|
||||
|
||||
3. **Push your changes to your forked repository:**
|
||||
```sh
|
||||
git push origin feature/10-add-new-cool-stuff
|
||||
```
|
||||
|
||||
4. **Create a pull request from your forked repository:**
|
||||
- Go to the original repository on GitHub.
|
||||
- Click on the "New pull request" button.
|
||||
- Select the branch you pushed your changes to and create the pull request.
|
||||
|
||||
Please ensure that your pull request:
|
||||
|
||||
- Follows the project's coding style and guidelines.
|
||||
- Includes tests for any new functionality.
|
||||
- Updates the documentation as necessary.
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
By participating in this project, you agree to abide by our [Code of Conduct](CODE_OF_CONDUCT.md). Please read it to understand the expected behavior and responsibilities when interacting with the community.
|
||||
|
||||
## 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.
|
||||
|
||||
Thank you for contributing to ProxLB! Together, we can enhance the efficiency and performance of Proxmox clusters.
|
||||
35
Dockerfile
Normal file
35
Dockerfile
Normal file
@@ -0,0 +1,35 @@
|
||||
# Use the official Debian 12 base image
|
||||
FROM debian:12
|
||||
|
||||
# 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"
|
||||
|
||||
# Set environment variables
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# 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
|
||||
|
||||
# Create a virtual environment
|
||||
RUN python3 -m venv venv
|
||||
|
||||
# Copy requirements to the container
|
||||
COPY requirements.txt /app/requirements.txt
|
||||
|
||||
# Install dependencies in the virtual environment
|
||||
RUN . venv/bin/activate && pip install -r /app/requirements.txt
|
||||
|
||||
# Set the entry point to use the virtual environment's python
|
||||
ENTRYPOINT ["/app/venv/bin/python3", "/app/proxlb"]
|
||||
324
README.md
324
README.md
@@ -1,53 +1,91 @@
|
||||
# ProxLB - (Re)Balance VM Workloads in Proxmox Clusters
|
||||
<img align="left" src="https://cdn.gyptazy.ch/images/Prox-LB-logo.jpg"/>
|
||||
<img align="left" src="https://cdn.gyptazy.com/images/Prox-LB-logo.jpg"/>
|
||||
<br>
|
||||
|
||||
<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>
|
||||
|
||||
|
||||
## Table of Content
|
||||
* Introduction
|
||||
* Video of Migration
|
||||
* Features
|
||||
* Usage
|
||||
* Dependencies
|
||||
* Options
|
||||
* Parameters
|
||||
* Systemd
|
||||
* Manuel
|
||||
* Proxmox GUI Integration
|
||||
* Quick Start
|
||||
* Motivation
|
||||
* References
|
||||
* Packages
|
||||
* Misc
|
||||
* Bugs
|
||||
* Contributing
|
||||
* Author(s)
|
||||
## 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) 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.
|
||||
`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.
|
||||
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.ch/images/proxlb-rebalancing-demo.gif"/>
|
||||
<img src="https://cdn.gyptazy.com/images/proxlb-rebalancing-demo.gif"/>
|
||||
|
||||
## Features
|
||||
* Rebalance the cluster by:
|
||||
* 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
|
||||
@@ -55,6 +93,11 @@ Automated rebalancing reduces the need for manual actions, allowing operators to
|
||||
* 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.
|
||||
|
||||
@@ -65,31 +108,84 @@ Running PLB is easy and it runs almost everywhere since it just depends on `Pyth
|
||||
### Options
|
||||
The following options can be set in the `proxlb.conf` file:
|
||||
|
||||
| Option | Example | Description |
|
||||
|------|:------:|:------:|
|
||||
| api_host | hypervisor01.gyptazy.ch | Host or IP address 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) |
|
||||
| method | memory | Defines the balancing method (default: memory) where you can use `memory`, `disk` or `cpu`. |
|
||||
| ignore_nodes | dummynode01,dummynode02 | Defines a comma separated list of nodes to exclude. |
|
||||
| ignore_vms | testvm01,testvm02 | Defines a comma separated list of VMs to exclude. |
|
||||
| daemon | 1 | Run as a daemon (1) or one-shot (0). (default: 1) |
|
||||
| schedule | 24 | Hours to rebalance in hours. (default: 24) |
|
||||
| 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) |
|
||||
| `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) |
|
||||
| | 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) |
|
||||
| `update_service` | enable | 0 | Enables the automated update service (rolling updates). |
|
||||
| `api` | enable | 0 | Enables the ProxLB API. |
|
||||
| `service`| daemon | 1 | Run as a daemon (1) or one-shot (0). (default: 1) |
|
||||
| | 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) |
|
||||
| | log_verbosity | INFO | Defines the log level (default: CRITICAL) where you can use `INFO`, `WARN` 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.ch
|
||||
api_host: hypervisor01.gyptazy.com
|
||||
api_user: root@pam
|
||||
api_pass: FooBar
|
||||
verify_ssl: 1
|
||||
[balancing]
|
||||
[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
|
||||
@@ -98,6 +194,56 @@ 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`.
|
||||
@@ -114,7 +260,7 @@ A manual installation is possible and also supports BSD based systems. Proxmox R
|
||||
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.ch/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:
|
||||
<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)
|
||||
|
||||
@@ -122,16 +268,43 @@ The executable must be able to read the config file, if no dedicated config file
|
||||
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
|
||||
wget https://cdn.gyptazy.com/files/os/debian/proxlb/proxlb_1.0.3_amd64.deb
|
||||
dpkg -i proxlb_1.0.3_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.
|
||||
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.
|
||||
@@ -149,22 +322,73 @@ Here you can find some overviews of references for and about the ProxLB (PLB):
|
||||
|
||||
| Description | Link |
|
||||
|------|:------:|
|
||||
| General introduction into ProxLB | https://gyptazy.ch/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.ch/howtos/howto-install-and-use-proxlb-to-rebalance-vm-workloads-across-nodes-in-proxmox-clusters/ |
|
||||
| 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/ |
|
||||
|
||||
## Packages
|
||||
## 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.ch/files/amd64/debian/proxlb/
|
||||
* https://cdn.gyptazy.ch/files/amd64/ubuntu/proxlb/
|
||||
* https://cdn.gyptazy.ch/files/amd64/redhat/proxlb/
|
||||
* https://cdn.gyptazy.ch/files/amd64/freebsd/proxlb/
|
||||
* 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.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.
|
||||
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.ch)
|
||||
* Florian Paul Azim Hoberg @gyptazy (https://gyptazy.com)
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
# 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
|
||||
```
|
||||
@@ -0,0 +1,48 @@
|
||||
# Configuration
|
||||
|
||||
## Balancing
|
||||
### By Used Memmory of VMs
|
||||
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
|
||||
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.
|
||||
|
||||
## Grouping
|
||||
### Include (Stay Together)
|
||||
<img align="left" src="https://cdn.gyptazy.ch/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.
|
||||
|
||||
### Exclude (Stay Separate)
|
||||
<img align="left" src="https://cdn.gyptazy.ch/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.ch/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.
|
||||
|
||||
## Authentication / User Account / User / Permissions
|
||||
### Authentication
|
||||
ProxLB also supports different accounts in ProxLB. Therefore, you can simply create a new user and group and add the required roles permissions.
|
||||
|
||||
### Creating Dedicated User for Balanciung
|
||||
It is recommended to not use the `root@pam` user for balancing. Therefore, creating a new user might be suitable and is very easy to create.
|
||||
A new user can be created by the gui, api and cli. The required roles are stated in the next chapter, but you can also use the following lines
|
||||
to create a user on the cli with the required roles to balance VMs & CTs.
|
||||
|
||||
```
|
||||
pveum role add ProxLBAdmin --privs Datastore.Audit,Sys.Audit,VM.Audit,VM.Migrate
|
||||
pveum user add proxlb_admin@pve --password <password>
|
||||
pveum acl modify / --roles ProxLBAdmin --users proxlb_admin@pve
|
||||
```
|
||||
|
||||
### Required Roles
|
||||
When using ProxLB with a dedicated account, you might also keep the assigned roles low. Therefore, you need to ensure that the newly created user is at least assigned to the following roles:
|
||||
* Datastore.Audit (Required for storage evaluation)
|
||||
* Sys.Audit (Required to get resource metrics of the nodes)
|
||||
* VM.Audit (Requited to get resource metrics of VMs/CTs)
|
||||
* VM.Migrate (Required for migration of VMs/CTs)
|
||||
@@ -21,3 +21,67 @@ Jul 06 10:25:16 build01 proxlb[7285]: proxlb: Error: [python-imports]: Could no
|
||||
|
||||
Debian/Ubuntu: apt-get install python3-proxmoxer
|
||||
If the package is not provided by your systems repository, you can also install it by running `pip3 install proxmoxer`.
|
||||
|
||||
### 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.
|
||||
|
||||
### ProxLB config version is too low
|
||||
ProxLB may run into an error when the used config schema version is too low. This might happen after major changes that require new config options. Please make sure, to use a supported config version in addition to your running ProxLB config.
|
||||
|
||||
Example Error:
|
||||
```
|
||||
Error: [config-version-validator]: ProxLB config version 2 is too low. Required: 3.
|
||||
```
|
||||
|
||||
The easiest way to solve this, is by taking the minimum required config schema version from a git tag, representing the ProxLB version.
|
||||
|
||||
### 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.
|
||||
|
||||
### Packages / Container Images
|
||||
Ready to use packages can be found at:
|
||||
* https://cdn.gyptazy.ch/files/amd64/debian/proxlb/
|
||||
* https://cdn.gyptazy.ch/files/amd64/ubuntu/proxlb/
|
||||
* https://cdn.gyptazy.ch/files/amd64/redhat/proxlb/
|
||||
* https://cdn.gyptazy.ch/files/amd64/freebsd/proxlb/
|
||||
|
||||
Container Images for Podman, Docker etc., can be found at:
|
||||
| Version | Image |
|
||||
|------|:------:|
|
||||
| latest | cr.gyptazy.ch/proxlb/proxlb:latest |
|
||||
|
||||
### 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.
|
||||
|
||||
### Support
|
||||
If you need assistance or have any questions, we offer support through our dedicated [chat room](https://matrix.to/#/#proxlb:gyptazy.ch) 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 [Reddit community](https://www.reddit.com/r/Proxmox/comments/1e78ap3/introducing_proxlb_rebalance_your_vm_workloads/) 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.ch](https://matrix.to/#/#proxlb:gyptazy.ch) |
|
||||
| Reddit | [Reddit community](https://www.reddit.com/r/Proxmox/comments/1e78ap3/introducing_proxlb_rebalance_your_vm_workloads/) |
|
||||
| GitHub | [ProxLB GitHub](https://github.com/gyptazy/ProxLB/issues) |
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/bin/bash
|
||||
apt-get install rpm cmake git make
|
||||
sudo apt-get install rpm cmake git make python3-yaml
|
||||
|
||||
git clone https://github.com/gyptazy/changelog-fragments-creator.git
|
||||
./changelog-fragments-creator/changelog-creator -f ../.changelogs/ -o ../CHANGELOG.md
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
project(proxmox-rebalancing-service VERSION 0.9.9)
|
||||
project(proxmox-rebalancing-service VERSION 1.0.3)
|
||||
|
||||
install(PROGRAMS ../proxlb DESTINATION /bin)
|
||||
install(FILES ../proxlb.conf DESTINATION /etc/proxlb)
|
||||
@@ -17,8 +17,8 @@ set(CPACK_PACKAGE_VENDOR "gyptazy")
|
||||
set(CPACK_PACKAGE_VERSION ${CMAKE_PROJECT_VERSION})
|
||||
set(CPACK_GENERATOR "RPM")
|
||||
set(CPACK_RPM_PACKAGE_ARCHITECTURE "amd64")
|
||||
set(CPACK_RPM_PACKAGE_SUMMARY "ProxLB Rebalancing VM workloads within Proxmox clusters.")
|
||||
set(CPACK_RPM_PACKAGE_DESCRIPTION "ProxLB Rebalancing VM workloads within Proxmox clusters.")
|
||||
set(CPACK_RPM_PACKAGE_SUMMARY "ProxLB - Rebalance VM workloads across nodes in Proxmox clusters.")
|
||||
set(CPACK_RPM_PACKAGE_DESCRIPTION "ProxLB - Rebalance VM workloads across nodes in Proxmox clusters.")
|
||||
set(CPACK_RPM_CHANGELOG_FILE "${CMAKE_CURRENT_SOURCE_DIR}/changelog_redhat")
|
||||
set(CPACK_PACKAGE_RELEASE 1)
|
||||
set(CPACK_RPM_PACKAGE_LICENSE "GPL 3.0")
|
||||
@@ -27,15 +27,14 @@ set(CPACK_RPM_PACKAGE_REQUIRES "python >= 3.2.0")
|
||||
# DEB packaging
|
||||
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
|
||||
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
|
||||
set(CPACK_DEBIAN_PACKAGE_SUMMARY "ProxLB Rebalancing VM workloads within Proxmox clusters.")
|
||||
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "ProxLB Rebalancing VM workloads within Proxmox clusters.")
|
||||
set(CPACK_DEBIAN_PACKAGE_SUMMARY "ProxLB - Rebalance VM workloads across nodes in Proxmox clusters.")
|
||||
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "ProxLB - Rebalance VM workloads across nodes in Proxmox clusters.")
|
||||
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/changelog_debian")
|
||||
set(CPACK_DEBIAN_PACKAGE_DEPENDS "python3")
|
||||
set(CPACK_DEBIAN_PACKAGE_DEPENDS "python3, python3-proxmoxer")
|
||||
set(CPACK_DEBIAN_PACKAGE_LICENSE "GPL 3.0")
|
||||
|
||||
|
||||
# Install
|
||||
set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
|
||||
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/postinst")
|
||||
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/postinst;${CMAKE_CURRENT_SOURCE_DIR}/conffiles")
|
||||
set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/postinst")
|
||||
include(CPack)
|
||||
|
||||
@@ -1,5 +1,41 @@
|
||||
proxlb (0.9.0) unstable; urgency=low
|
||||
proxlb (1.0.3) unstable; urgency=low
|
||||
|
||||
* Add a convert function to cast all bool alike options from configparser to bools.
|
||||
* Add a config parser options for future features.
|
||||
* Add a config versio schema that must be supported by ProxLB.
|
||||
* Add feature to allow the API hosts being provided as a comma separated list.
|
||||
* Add storage balancing function.
|
||||
* Add doc how to add dedicated user for authentication. (by @Dulux-Oz)
|
||||
* Add cli arg `-b` to return the next best node for next VM/CT placement.Fix some wonkey code styles.
|
||||
* Provide a more reasonable output when HA services are not active in a Proxmox cluster.
|
||||
* Improve the underlying code base for future implementations.
|
||||
* Fix documentation for the master_only parameter placed in the wrong config section.
|
||||
* Fixed `master_only` function by inverting the condition.
|
||||
* Improved the overall validation and error handling.
|
||||
* 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.
|
||||
* Fix anti-affinity rules not evaluating a new and different node.
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.ch> Wed, 11 Sep 2024 17:31:03 +0200
|
||||
|
||||
proxlb (1.0.2) unstable; urgency=low
|
||||
|
||||
* Add option to run migration in parallel or sequentially.
|
||||
* Add option to run ProxLB only on a Proxmox cluster master (req. HA feature).
|
||||
* Fix daemon timer to use hours instead of minutes.
|
||||
* Fix CMake packaging for Debian package to avoid overwriting the config file.
|
||||
* Fix some wonkey code styles.
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.ch> Tue, 13 Aug 2024 17:28:14 +0200
|
||||
|
||||
proxlb (1.0.0) unstable; urgency=low
|
||||
|
||||
* Initial release of ProxLB.
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.ch> Sun, 07 Jul 2024 05:38:41 -0200
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.ch> Thu, 01 Aug 2024 17:04:12 +0200
|
||||
|
||||
proxlb (0.9.0) unstable; urgency=low
|
||||
|
||||
* Initial development release of ProxLB as a tech preview.
|
||||
|
||||
-- Florian Paul Azim Hoberg <gyptazy@gyptazy.ch> Sun, 07 Jul 2024 05:38:41 +0200
|
||||
|
||||
@@ -1,2 +1,28 @@
|
||||
* Sun Jul 07 2024 Florian Paul Azim Hoberg <gyptazy@gyptazy.ch>
|
||||
* Wed Sep 12 2024 Florian Paul Azim Hoberg <gyptazy@gyptazy.ch>
|
||||
- Add a convert function to cast all bool alike options from configparser to bools.
|
||||
- Add a config parser options for future features.
|
||||
- Add a config versio schema that must be supported by ProxLB.
|
||||
- Add feature to allow the API hosts being provided as a comma separated list.
|
||||
- Add storage balancing function.
|
||||
- Add doc how to add dedicated user for authentication. (by @Dulux-Oz)
|
||||
- Add cli arg `-b` to return the next best node for next VM/CT placement.Fix some wonkey code styles.
|
||||
- Provide a more reasonable output when HA services are not active in a Proxmox cluster.
|
||||
- Improve the underlying code base for future implementations.
|
||||
- Fix documentation for the master_only parameter placed in the wrong config section.
|
||||
- Fixed `master_only` function by inverting the condition.
|
||||
- Improved the overall validation and error handling.
|
||||
- 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.
|
||||
- Fix anti-affinity rules not evaluating a new and different node.
|
||||
|
||||
* Tue Aug 13 2024 Florian Paul Azim Hoberg <gyptazy@gyptazy.ch>
|
||||
- Add option to run migration in parallel or sequentially.
|
||||
- Add option to run ProxLB only on a Proxmox cluster master (req. HA feature).
|
||||
- Fixed daemon timer to use hours instead of minutes.
|
||||
- Fixed some wonkey code styles.
|
||||
|
||||
* Thu Aug 01 2024 Florian Paul Azim Hoberg <gyptazy@gyptazy.ch>
|
||||
- Initial release of ProxLB.
|
||||
|
||||
* Sun Jul 07 2024 Florian Paul Azim Hoberg <gyptazy@gyptazy.ch>
|
||||
- Initial development release of ProxLB as a tech preview.
|
||||
|
||||
1
packaging/conffiles
Normal file
1
packaging/conffiles
Normal file
@@ -0,0 +1 @@
|
||||
/etc/proxlb/proxlb.conf
|
||||
13
proxlb.conf
13
proxlb.conf
@@ -3,10 +3,21 @@ api_host: hypervisor01.gyptazy.ch
|
||||
api_user: root@pam
|
||||
api_pass: FooBar
|
||||
verify_ssl: 1
|
||||
[balancing]
|
||||
[vm_balancing]
|
||||
enable: 1
|
||||
method: memory
|
||||
mode: used
|
||||
maintenance_nodes: dummynode03,dummynode04
|
||||
ignore_nodes: dummynode01,dummynode02
|
||||
ignore_vms: testvm01,testvm02
|
||||
[storage_balancing]
|
||||
enable: 0
|
||||
[update_service]
|
||||
enable: 0
|
||||
[api]
|
||||
enable: 0
|
||||
[service]
|
||||
daemon: 1
|
||||
schedule: 24
|
||||
log_verbosity: CRITICAL
|
||||
config_version: 3
|
||||
|
||||
5
requirements.txt
Normal file
5
requirements.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
argparse
|
||||
configparser
|
||||
proxmoxer
|
||||
requests
|
||||
urllib3
|
||||
Reference in New Issue
Block a user