From ecea199d02c48c9708a46ed2dd38667cc1fbc606 Mon Sep 17 00:00:00 2001 From: Harikrishna Patnala Date: Tue, 11 Nov 2025 13:53:09 +0530 Subject: [PATCH 1/6] Few changes in release notes --- source/releasenotes/about.rst | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/source/releasenotes/about.rst b/source/releasenotes/about.rst index 89c68b9ea9..cf552ea598 100644 --- a/source/releasenotes/about.rst +++ b/source/releasenotes/about.rst @@ -17,26 +17,26 @@ What's New in |release| ======================= -Apache CloudStack |release| is a 4.22 LTS release with 10 new features, +Apache CloudStack |release| is a LTS release with 10 new features, around 15 improvements and more than 140 bug fixes since the 4.21.0.0 release. Some of the highlights include: -Enhanced Backup and Disaster Recovery -SSL Offloading for Load Balancers -Baremetal/MaaS Extension -CSI Driver for CKS -Console Access for Proxmox in Extensions Framework -VMware-to-KVM Migration Enhancements -Snapshot/Backup Schedule Listing -Per-Zone Console Proxy Configuration -Direct Volume Migration within Cluster -Persistent KVM Domains -Support for userdata on System VMs -EL10 & OpenSUSE 15.6 Platform Support -Stronger Checksum Algorithm (SHA-512) -Enable KVM volume and VM snapshot by default -Support xz format for template registration -Support for shared Filesystem on Config Drive Networks +· Enhanced Backup and Disaster Recovery +· SSL Offloading for Load Balancers +· Baremetal/MaaS Extension +· CSI Driver for CKS +· Console Access for Proxmox in Extensions Framework +· VMware-to-KVM Migration Enhancements +· Snapshot/Backup Schedule Listing +· Per-Zone Console Proxy Configuration +· Direct Volume Migrations by-passing Secondary Storage +· Persistent domain for unmanaged KVM instances from CS +· Support for User Data on System VMs +· EL10 & OpenSUSE 15.6 Platform Support +· Stronger Checksum Algorithm (SHA-512) +· Enable KVM Volume and VM snapshot by default +· Support XZ compression format for template registration with KVM +· Support for Shared Filesystem on Networks with Config Drive Known Issues ------------ From 6c8cf2f25c9ac0ea2c39629559304e06e5b3fcab Mon Sep 17 00:00:00 2001 From: Harikrishna Patnala Date: Tue, 11 Nov 2025 16:37:45 +0530 Subject: [PATCH 2/6] Fix indexing --- source/releasenotes/about.rst | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/source/releasenotes/about.rst b/source/releasenotes/about.rst index cf552ea598..d521ad4708 100644 --- a/source/releasenotes/about.rst +++ b/source/releasenotes/about.rst @@ -21,22 +21,22 @@ Apache CloudStack |release| is a LTS release with 10 new features, around 15 improvements and more than 140 bug fixes since the 4.21.0.0 release. Some of the highlights include: -· Enhanced Backup and Disaster Recovery -· SSL Offloading for Load Balancers -· Baremetal/MaaS Extension -· CSI Driver for CKS -· Console Access for Proxmox in Extensions Framework -· VMware-to-KVM Migration Enhancements -· Snapshot/Backup Schedule Listing -· Per-Zone Console Proxy Configuration -· Direct Volume Migrations by-passing Secondary Storage -· Persistent domain for unmanaged KVM instances from CS -· Support for User Data on System VMs -· EL10 & OpenSUSE 15.6 Platform Support -· Stronger Checksum Algorithm (SHA-512) -· Enable KVM Volume and VM snapshot by default -· Support XZ compression format for template registration with KVM -· Support for Shared Filesystem on Networks with Config Drive +• Enhanced Backup and Disaster Recovery +• SSL Offloading for Load Balancers +• Baremetal/MaaS Extension +• CSI Driver for CKS +• Console Access for Proxmox in Extensions Framework +• VMware-to-KVM Migration Enhancements +• Snapshot/Backup Schedule Listing +• Per-Zone Console Proxy Configuration +• Direct Volume Migrations by-passing Secondary Storage +• Persistent domain for unmanaged KVM instances from CS +• Support for User Data on System VMs +• EL10 & OpenSUSE 15.6 Platform Support +• Stronger Checksum Algorithm (SHA-512) +• Enable KVM Volume and VM snapshot by default +• Support XZ compression format for template registration with KVM +• Support for Shared Filesystem on Networks with Config Drive Known Issues ------------ From 76d9008f4173e9f19bcf2054594b635fc7b2c8f0 Mon Sep 17 00:00:00 2001 From: Suresh Kumar Anaparti Date: Wed, 26 Nov 2025 13:09:20 +0100 Subject: [PATCH 3/6] Primary storage LUN capacity correction (#599) --- .../choosing_deployment_architecture.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/conceptsandterminology/choosing_deployment_architecture.rst b/source/conceptsandterminology/choosing_deployment_architecture.rst index 55f673a05f..c2b9ac81d9 100644 --- a/source/conceptsandterminology/choosing_deployment_architecture.rst +++ b/source/conceptsandterminology/choosing_deployment_architecture.rst @@ -299,7 +299,8 @@ Setup Best Practices - Use multiple clusters per pod if you need to achieve a certain switch density. -- Primary storage mountpoints or LUNs should not exceed 6 TB in size. +- Primary storage mountpoints or LUNs should be limited to a manageable + capacity as the CloudStack does not impose any limit on them. It is better to have multiple smaller primary storage elements per cluster than one large one. From 71b45432cc1d3ac34e17f5d6a21cb8cea552e810 Mon Sep 17 00:00:00 2001 From: Manoj Kumar Date: Mon, 1 Dec 2025 12:06:31 +0530 Subject: [PATCH 4/6] Add Deployment planners documentation (#594) Co-authored-by: Jithin Raju --- .../images/deployment-planner-diagram.png | Bin 0 -> 73711 bytes source/adminguide/deployment_planners.rst | 99 ++++++++++++++++++ source/adminguide/index.rst | 1 + source/adminguide/vm_volume_allocators.rst | 37 +++---- 4 files changed, 119 insertions(+), 18 deletions(-) create mode 100644 source/_static/images/deployment-planner-diagram.png create mode 100644 source/adminguide/deployment_planners.rst diff --git a/source/_static/images/deployment-planner-diagram.png b/source/_static/images/deployment-planner-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..a041ff0b2628371ce902a9036fd43fe586743d95 GIT binary patch literal 73711 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%0AQ)=PQZyyL^?Frxd&1KmIU%F=u)SK=R4 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

FhGKhzw(C%; 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 A5dZ)H literal 0 HcmV?d00001 diff --git a/source/adminguide/deployment_planners.rst b/source/adminguide/deployment_planners.rst new file mode 100644 index 0000000000..64cee50d90 --- /dev/null +++ b/source/adminguide/deployment_planners.rst @@ -0,0 +1,99 @@ +.. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information# + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + + +Deployment Planners +====================== + + +Deployment planners determine *how and where instances* are placed across clusters within a zone. +A planner builds and orders a *list of candidate clusters* based on a placement strategy such as available capacity, user dispersion, or pod concentration. +This ordered list is then passed to the *host allocator*, which attempts to deploy the instance following the planner’s priority order. + +Administrators can configure the global setting ``vm.deployment.planner`` to define the default deployment planner for the environment. +This can also be overridden per *Compute Offering*, allowing flexible control over how instances are distributed across the infrastructure. + +Available Planners +------------------ + +FirstFitPlanner +~~~~~~~~~~~~~~~ + +The ``FirstFitPlanner`` ranks all clusters in a zone by their *available (free) capacity*, placing clusters with the most available resources at the top of the list. +This approach prioritizes capacity-driven placement, ensuring efficient utilization of resources across the zone. + +UserDispersingPlanner +~~~~~~~~~~~~~~~~~~~~~ + +The ``UserDispersingPlanner`` aims to *spread a user’s instances across multiple clusters*, reducing the impact of any single cluster failure on that user. + +#. The planner counts the number of instances in the *Running* or *Starting* state for the user’s account in each cluster. +#. Clusters are sorted in **ascending order** based on this count, so clusters with fewer instances from the user are preferred. +#. The global setting ``vm.user.dispersion.weight`` (default: ``1``) controls how strongly dispersion affects ordering: + * ``1``: Ranking is based entirely on dispersion. + * ``< 1``: Available capacity has more influence in placement decisions. + +Lowering the dispersion weight allows a balance between *even distribution* and *efficient capacity usage*. + +UserConcentratedPodPlanner +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``UserConcentratedPodPlanner`` focuses on *pod-level affinity*, preferring pods where the user already has active instances. + +#. The planner identifies all pods in the zone that contain *Running* instances for the user’s account. +#. Pods are sorted in **descending order** by the number of user instances — pods with more user instances come first. +#. Clusters from these pods are then added to the top of the list in that order, so deployment is biased toward pods where the user is already active. +#. Clusters within each pod are *not* further sorted by capacity or instance count. +#. If no pods contain user instances, the cluster order remains unchanged. + +Summary of Planner Behavior +--------------------------- + +.. list-table:: + :header-rows: 1 + + * - Planner + - Placement Focus + - Ordering Criteria + - Typical Use Case + * - FirstFitPlanner + - Capacity + - Descending by available resources + - Capacity-optimized or general-purpose placement + * - UserDispersingPlanner + - Dispersion + - Ascending by user instance count (optionally weighted with capacity) + - Distribute user instances evenly across clusters + * - UserConcentratedPodPlanner + - Pod Affinity + - Descending by user instance count per pod + - Keep user instances within the same pod for locality or data proximity + +Pod-Level vs Cluster-Level Allocation +------------------------------------ + +When ``apply.allocation.algorithm.to.pods = true``: +The allocation algorithm (for example, *FirstFit*) is applied at *pod granularity* first. +The planner will evaluate or rank pods according to the allocation heuristics — for *FirstFit*, that means prioritizing pods with more available capacity according to the FirstFit capacity checks. +After pods are ordered, the planner then considers clusters *inside each pod* — typically evaluating clusters within the selected pod in order (or applying cluster-level heuristics only within that pod). +In other words, *pod-level ordering happens before cluster selection*. + +When ``apply.allocation.algorithm.to.pods = false`` (the default in many deployments): +The allocation algorithm operates at the *cluster level* across the entire zone. + +|deployment-planner-diagram.png| + +.. |deployment-planner-diagram.png| image:: /_static/images/deployment-planner-diagram.png + :alt: Deployment Planner Diagram diff --git a/source/adminguide/index.rst b/source/adminguide/index.rst index 040ad1cd67..1c12ffa9a1 100644 --- a/source/adminguide/index.rst +++ b/source/adminguide/index.rst @@ -138,6 +138,7 @@ Managing VM and Volume Allocation .. toctree:: :maxdepth: 4 + deployment_planners host_and_storage_tags arch_types vm_volume_allocators diff --git a/source/adminguide/vm_volume_allocators.rst b/source/adminguide/vm_volume_allocators.rst index c15ebd8796..dded93ec03 100644 --- a/source/adminguide/vm_volume_allocators.rst +++ b/source/adminguide/vm_volume_allocators.rst @@ -37,14 +37,14 @@ VM allocator supports following algorithms to select a host in the cluster: .. cssclass:: table-striped table-bordered table-hover ============================= ======================== -Algorithm Description +Algorithm Description ============================= ======================== -random Selects a host in the cluster randomly. -firstfit Selects the first available host in the cluster. +random Selects a host in the cluster randomly. +firstfit Selects the first available host in the cluster. userdispersing Selects the host running least instances for the account, aims to spread out the instances belonging to a single user account. -userconcentratedpod_random Selects the host randomly aiming to keep all instances belonging to single user account in same pod. -userconcentratedpod_firstfit Selects the first suitable host from a pod running most instances for the user. -firstfitleastconsumed Selects the first host after sorting eligible hosts by least allocated resources (such as CPU or RAM). +userconcentratedpod_random Behaves same as random algorithm. +userconcentratedpod_firstfit Behaves same as firstfit algorithm. +firstfitleastconsumed Selects the first host after sorting eligible hosts by least allocated resources (such as CPU or RAM). ============================= ======================== Use global configuration parameter: @@ -62,14 +62,14 @@ Volume allocator supports following algorithms to select a host in the cluster: .. cssclass:: table-striped table-bordered table-hover ============================= ======================== -Algorithm Description +Algorithm Description ============================= ======================== -random Selects a storage pool in the cluster randomly. -firstfit Selects the first available storage pool in the cluster. -userdispersing Selects the storage pool running least instances for the account, aims to spread out the instances belonging to a single user account. -userconcentratedpod_random Selects the storage pool randomly aiming to keep all instances belonging to single user account in same pod. -userconcentratedpod_firstfit Selects the first suitable pool from a pod running most instances for the user. -firstfitleastconsumed Selects the first storage pool after sorting eligible pools by least allocated resources. +random Selects a storage pool in the cluster randomly. +firstfit Selects the first available storage pool in the cluster. +userdispersing Selects the storage pool running least instances for the account, aims to spread out the instances belonging to a single user account. +userconcentratedpod_random Behaves same as random algorithm. +userconcentratedpod_firstfit Behaves same as firstfit algorithm. +firstfitleastconsumed Selects the first storage pool after sorting eligible pools by least allocated resources. ============================= ======================== .. note:: @@ -98,11 +98,11 @@ Key: `host.capacityType.to.order.clusters` .. cssclass:: table-striped table-bordered table-hover ========= ======================== -Value Behavior +Value Behavior ========= ======================== -CPU Prioritizes resources with the most available CPU. -RAM Prioritizes resources with the most available memory. -COMBINED Uses a weighted formula to balance CPU and RAM in prioritization. +CPU Prioritizes resources with the most available CPU. +RAM Prioritizes resources with the most available memory. +COMBINED Uses a weighted formula to balance CPU and RAM in prioritization. ========= ======================== **Additional Configuration for COMBINED** @@ -132,8 +132,9 @@ Example Configuration Above config prioritizes CPU at 70% weight and RAM at 30% when ranking pods, clusters, and hosts. .. note:: - - `host.capacityType.to.order.clusters` is only respected for host ordering when: + - `host.capacityType.to.order.clusters` is only respected for cluster/host ordering when: .. code:: bash + vm.deployment.planner: FirstFitPlanner, UserDispersingPlanner (when vm.user.dispersion.weight is < 1) vm.allocation.algorithm: firstfitleastconsumed - When using COMBINED, make sure to tune cpu.to.memory.capacity.weight to reflect your environment’s resource constraints and workload profiles. From 8091c569cbb36e251506f1971bed8236ee0a8625 Mon Sep 17 00:00:00 2001 From: dahn Date: Wed, 3 Dec 2025 10:39:23 +0100 Subject: [PATCH 5/6] Remove redundant 'the' from CloudStack reference (#602) --- .../conceptsandterminology/choosing_deployment_architecture.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/conceptsandterminology/choosing_deployment_architecture.rst b/source/conceptsandterminology/choosing_deployment_architecture.rst index c2b9ac81d9..0f847dc897 100644 --- a/source/conceptsandterminology/choosing_deployment_architecture.rst +++ b/source/conceptsandterminology/choosing_deployment_architecture.rst @@ -300,7 +300,7 @@ Setup Best Practices density. - Primary storage mountpoints or LUNs should be limited to a manageable - capacity as the CloudStack does not impose any limit on them. + capacity as CloudStack does not impose any limit on them. It is better to have multiple smaller primary storage elements per cluster than one large one. From d05ebd4eb92879183f097a04f1a518050296401c Mon Sep 17 00:00:00 2001 From: Harikrishna Date: Wed, 10 Dec 2025 17:07:41 +0530 Subject: [PATCH 6/6] Log4j file details (#608) --- .../upgrading/upgrade/_log4j_file_check.rst | 26 +++++++++++++++++++ source/upgrading/upgrade/upgrade-4.20.rst | 2 ++ source/upgrading/upgrade/upgrade-4.21.rst | 2 ++ source/upgrading/upgrade/upgrade-4.22.rst | 2 ++ 4 files changed, 32 insertions(+) create mode 100644 source/upgrading/upgrade/_log4j_file_check.rst diff --git a/source/upgrading/upgrade/_log4j_file_check.rst b/source/upgrading/upgrade/_log4j_file_check.rst new file mode 100644 index 0000000000..c8aa002165 --- /dev/null +++ b/source/upgrading/upgrade/_log4j_file_check.rst @@ -0,0 +1,26 @@ +.. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information# + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +.. sub-section included in upgrade notes. + +.. note:: + + During upgrades from versions prior to 4.20, the logging configuration file may not be migrated automatically to the new Log4j2 format - especially if the original log4j configuration file was manually customized or modified. + + It is strongly recommended to verify **before starting the Management Server and the Usage Server** that the configuration file (e.g. `log4j-cloud.xml`) under `/etc/cloudstack/management` and `/etc/cloudstack/usage` respectively uses the Log4j2 format. + + If the file still uses legacy Log4j (version 1) syntax or structure, **manually replace or update** the configuration using the default Log4j2 configuration supplied with the latest package. + + Failure to update may result in missing or incomplete log generation after upgrade. \ No newline at end of file diff --git a/source/upgrading/upgrade/upgrade-4.20.rst b/source/upgrading/upgrade/upgrade-4.20.rst index 083ac2e81e..dacf9a1ca6 100644 --- a/source/upgrading/upgrade/upgrade-4.20.rst +++ b/source/upgrading/upgrade/upgrade-4.20.rst @@ -207,6 +207,8 @@ Setup the GPG public key if you wish to enable ``gpgcheck=1``: $ sudo yum upgrade cloudstack-usage +.. include:: _log4j_file_check.rst + .. _upg_hyp_414: Upgrade Hypervisors diff --git a/source/upgrading/upgrade/upgrade-4.21.rst b/source/upgrading/upgrade/upgrade-4.21.rst index 0449de1645..441990c851 100644 --- a/source/upgrading/upgrade/upgrade-4.21.rst +++ b/source/upgrading/upgrade/upgrade-4.21.rst @@ -207,6 +207,8 @@ Setup the GPG public key if you wish to enable ``gpgcheck=1``: $ sudo yum upgrade cloudstack-usage +.. include:: _log4j_file_check.rst + .. _upg_hyp_414: Upgrade Hypervisors diff --git a/source/upgrading/upgrade/upgrade-4.22.rst b/source/upgrading/upgrade/upgrade-4.22.rst index 38ad410ecb..333fa2aaca 100644 --- a/source/upgrading/upgrade/upgrade-4.22.rst +++ b/source/upgrading/upgrade/upgrade-4.22.rst @@ -216,6 +216,8 @@ Setup the GPG public key if you wish to enable ``gpgcheck=1``: $ sudo yum upgrade cloudstack-usage +.. include:: _log4j_file_check.rst + .. _upg_hyp_414: Upgrade Hypervisors