Go to file
Joshua Boniface c776aba8b3 Standardize fuzzy matching and use fullmatch
Solves two problems:

1. How match fuzziness was used was very inconsistent; make them all the
same, i.e. "if is_fuzzy and limit, apply .* to both sides".

2. Use re.fullmatch instead of re.match to ensure exact matching of the
regex to the value. Without fuzziness, this would sometimes cause
inconsistent behavior, for instance if a limit was non-fuzzy "vm",
expecting to match the actual "vm", but also matching "vm1" too.
2021-12-06 16:35:29 -05:00
.github Add funding configuration 2021-11-06 18:05:17 -04:00
.hooks Revamp formatting and linting on commit 2021-11-06 13:34:33 -04:00
api-daemon Remove "and started" from message text 2021-11-29 16:42:26 -05:00
client-cli Fix bugs with legacy benchmark format 2021-11-26 11:42:35 -05:00
daemon-common Standardize fuzzy matching and use fullmatch 2021-12-06 16:35:29 -05:00
debian Bump version to 0.9.45 2021-11-25 09:34:20 -05:00
docs Remove references to Ansible manual 2021-11-08 00:29:47 -05:00
node-daemon Bump version to 0.9.45 2021-11-25 09:34:20 -05:00
.bbuilder-tasks.yaml Add sudo to deploy-package task 2021-11-08 02:41:10 -05:00
.file-header Update copyright year in headers 2021-03-25 17:01:55 -04:00
.flake8 Move Flake configuration into dedicated file 2021-11-06 02:55:37 -04:00
.gitignore Convert pvc-client-cli into a proper Python module 2021-06-23 05:03:19 -04:00
.version Bump version to 0.9.45 2021-11-25 09:34:20 -05:00
CHANGELOG.md Bump version to 0.9.45 2021-11-25 09:34:20 -05:00
LICENSE Update to new logo 2021-06-29 18:41:36 -04:00
README.md Reformat code with Black code formatter 2021-11-06 03:02:43 -04:00
build-and-deploy.sh Revamp formatting and linting on commit 2021-11-06 13:34:33 -04:00
build-stable-deb.sh Rename build-deb.sh to build-stable-deb.sh 2021-11-06 03:18:58 -04:00
build-unstable-deb.sh Fix quote in sed for unstable deb build 2021-11-08 02:54:27 -05:00
bump-version Fix sed commands after Black formatting change 2021-11-08 02:29:05 -05:00
format Add start delineators to command output 2021-11-06 13:35:30 -04:00
gen-api-doc Add DB migration update script 2020-02-15 23:23:09 -05:00
gen-api-migrations Ensure all helper scripts pushd/popd 2021-11-06 03:17:47 -04:00
gen-zk-migrations Ensure all helper scripts pushd/popd 2021-11-06 03:17:47 -04:00
lint Add start delineators to command output 2021-11-06 13:35:30 -04:00
mkdocs.yml Adjust toc_depth for RTD theme 2021-10-04 01:45:05 -04:00
test-cluster.sh Refactor pvcnoded to reduce Daemon.py size 2021-08-21 03:14:22 -04:00

README.md

Logo banner

License Code style: Black Release Documentation Status

What is PVC?

PVC is a Linux KVM-based hyperconverged infrastructure (HCI) virtualization cluster solution that is fully Free Software, scalable, redundant, self-healing, self-managing, and designed for administrator simplicity. It is an alternative to other HCI solutions such as Harvester, Nutanix, and VMWare, as well as to other common virtualization stacks such as ProxMox and OpenStack.

PVC is a complete HCI solution, built from well-known and well-trusted Free Software tools, to assist an administrator in creating and managing a cluster of servers to run virtual machines, as well as self-managing several important aspects including storage failover, node failure and recovery, virtual machine failure and recovery, and network plumbing. It is designed to act consistently, reliably, and unobtrusively, letting the administrator concentrate on more important things.

PVC is highly scalable. From a minimum (production) node count of 3, up to 12 or more, and supporting many dozens of VMs, PVC scales along with your workload and requirements. Deploy a cluster once and grow it as your needs expand.

As a consequence of its features, PVC makes administrating very high-uptime VMs extremely easy, featuring VM live migration, built-in always-enabled shared storage with transparent multi-node replication, and consistent network plumbing throughout the cluster. Nodes can also be seamlessly removed from or added to service, with zero VM downtime, to facilitate maintenance, upgrades, or other work.

PVC also features an optional, fully customizable VM provisioning framework, designed to automate and simplify VM deployments using custom provisioning profiles, scripts, and CloudInit userdata API support.

Installation of PVC is accomplished by two main components: a Node installer ISO which creates on-demand installer ISOs, and an Ansible role framework to configure, bootstrap, and administrate the nodes. Once up, the cluster is managed via an HTTP REST API, accessible via a Python Click CLI client or WebUI.

Just give it physical servers, and it will run your VMs without you having to think about it, all in just an hour or two of setup time.

What is it based on?

The core node and API daemons, as well as the CLI API client, are written in Python 3 and are fully Free Software (GNU GPL v3). In addition to these, PVC makes use of the following software tools to provide a holistic hyperconverged infrastructure solution:

  • Debian GNU/Linux as the base OS.
  • Linux KVM, QEMU, and Libvirt for VM management.
  • Linux ip, FRRouting, NFTables, DNSMasq, and PowerDNS for network management.
  • Ceph for storage management.
  • Apache Zookeeper for the primary cluster state database.
  • Patroni PostgreSQL manager for the secondary relation databases (DNS aggregation, Provisioner configuration).

Getting Started

To get started with PVC, please see the About page for general information about the project, and the Getting Started page for details on configuring your first cluster.

Changelog

View the changelog in CHANGELOG.md.

Screenshots

While PVC's API and internals aren't very screenshot-worthy, here is some example output of the CLI tool.

Node listing
Listing the nodes in a cluster

Network listing
Listing the networks in a cluster, showing 3 bridged and 1 IPv4-only managed networks

VM listing and migration
Listing a limited set of VMs and migrating one with status updates

Node logs
Viewing the logs of a node (keepalives and VM [un]migration)