Commit Graph

16 Commits

Author SHA1 Message Date
Vishesh ea90848429
Feature: Add support for DRS in a Cluster (#7723)
This pull request (PR) implements a Distributed Resource Scheduler (DRS) for a CloudStack cluster. The primary objective of this feature is to enable automatic resource optimization and workload balancing within the cluster by live migrating the VMs as per configuration.
Administrators can also execute DRS manually for a cluster, using the UI or the API.
Adds support for two algorithms - condensed & balanced. Algorithms are pluggable allowing ACS Administrators to have customized control over scheduling.

Implementation
There are three top level components:

    Scheduler
    A timer task which:

    Generate DRS plan for clusters
    Process DRS plan
    Remove old DRS plan records

    DRS Execution
    We go through each VM in the cluster and use the specified algorithm to check if DRS is required and to calculate cost, benefit & improvement of migrating that VM to another host in the cluster. On the basis of cost, benefit & improvement, the best migration is selected for the current iteration and the VM is migrated. The maximum number of iterations (live migrations) possible on the cluster is defined by drs.iterations which is defined as a percentage (as a value between 0 and 1) of total number of workloads.

    Algorithm
    Every algorithms implements two methods:
        needsDrs - to check if drs is required for cluster
        getMetrics - to calculate cost, benefit & improvement of a migrating a VM to another host.

Algorithms

    Condensed - Packs all the VMs on minimum number of hosts in the cluster.
    Balanced - Distributes the VMs evenly across hosts in the cluster.
    Algorithms use drs.level to decide the amount of imbalance to allow in the cluster.

APIs Added

listClusterDrsPlan

    id - ID of the DRS plan to list
    clusterid - to list plans for a cluster id

generateClusterDrsPlan

    id - cluster id
    iterations - The maximum number of iterations in a DRS job defined as a percentage (as a value between 0 and 1) of total number of workloads. Defaults to value of cluster's drs.iterations setting.

executeClusterDrsPlan

    id - ID of the cluster for which DRS plan is to be executed.
    migrateto - This parameter specifies the mapping between a vm and a host to migrate that VM. Format of this parameter: migrateto[vm-index].vm=<uuid>&migrateto[vm-index].host=<uuid>.

Config Keys Added

    ClusterDrsPlanExpireInterval
    Key drs.plan.expire.interval
    Scope Global
    Default Value 30 days
    Description The interval in days after which old DRS records will be cleaned up.

    ClusterDrsEnabled
    Key drs.automatic.enable
    Scope Cluster
    Default Value false
    Description Enable/disable automatic DRS on a cluster.

    ClusterDrsInterval
    Key drs.automatic.interval
    Scope Cluster
    Default Value 60 minutes
    Description The interval in minutes after which a periodic background thread will schedule DRS for a cluster.

    ClusterDrsIterations
    Key drs.max.migrations
    Scope Cluster
    Default Value 50
    Description Maximum number of live migrations in a DRS execution.

    ClusterDrsAlgorithm
    Key drs.algorithm
    Scope Cluster
    Default Value condensed
    Description DRS algorithm to execute on the cluster. This PR implements two algorithms - balanced & condensed.

    ClusterDrsLevel
    Key drs.imbalance
    Scope Cluster
    Default Value 0.5
    Description Percentage (as a value between 0.0 and 1.0) of imbalance allowed in the cluster. 1.0 means no imbalance
    is allowed and 0.0 means imbalance is allowed.

    ClusterDrsMetric
    Key drs.imbalance.metric
    Scope Cluster
    Default Value memory
    Description The cluster imbalance metric to use when checking the drs.imbalance.threshold. Possible values are memory and cpu.
2023-10-26 11:48:18 +05:30
Pearl Dsilva 07d1ffc4e7
UI: Fix route to domain details (#6086) 2022-03-10 08:09:36 -03:00
Pearl Dsilva b1e01a89a9
UI: Fix Dedicating resource to a domain (#6085) 2022-03-10 07:33:18 -03:00
Hoang Nguyen d258da5524
UI: Upgrade to Vue3 library (#5151)
* add new vue 3 library & and 2.x (beta)

* edit config files, settings, utils, store,... corresponding to Vue 3

* edit layout and config to suit the new library

* fix header & side menu

* components, autogenview

* fix dashboard & compute

* compute: fix form errors

* storage: fix form & template by vue3

* networks: fix form & template by vue3

* image: fix form & template by vue3

* project: fix by vue3 library

* user: fix by vue3

* iam: fix by vue3

* fix zoneWizard & tooltip click event

* fix infra > physicalnetwork & visible modal

* fix infra by vue3 & antdv 2x

* fix offerings by vue3

* fix plugin by vue3

* fix form & action form

* update the ant-design latest version

* fix icon, style dark mode, menu

* fix unittest

* fix babel plugins not found

* add name,ref missing & callback i18n not found

* fix slot & info icon

* fix unit test

* fix tooltip label of form item

* fix lint errors

* using global app, globalProperties

* add focus directive & edit the position of ctrl+Enter

* upgrage Vue 3 version

* fix main UT

* fix build failed

* using `optionFilterProp="label"' & fix build fail

* fix UT with new code

* fix icons of undefined

* fix error run app

* fix selectbox options

* add vue version for clear storage

* fix template

* fix template of iprange form

* fix warning test UT

* fix conflit

* fix build failed

* fix error run app the first time after upgrade

* fix auto-complete & watch object/array

* fix error run application

* fix error build

* fix form, icon, template & locales

* fix conflit & form

* remove slot errors

* fix error build & test UT

* fix error template

* Add licenses for missing files

* add scroll to first errors

* add scroll to first errors

* fix select filter, tag event

* add shallowRef async component are missing

* fix css, upgrade vue-cropper version

* fix css

* fix vue 3 coding for new components

* Remove unused components

* fixes `this` not found in @/roles

* fix redirect after login again when session expired error

* fix openKeys menu & watch router

* fixes

* fix build failed

* fixes

* fixes ut

* fixes

* fixes eslint

* fixes

* fixes

* fixes css

* fix menu sidebar css

* fix some css icon, images

* fix build fail

* fixes

* fixes

* fixes

* fixes

* fix publicip resource

* fixes ut

* fixes

* fixes

* fixes layout mode

* fixes dropdown filter columns

* fixes dashboard & hidden setting for normal user

* fixes

* fixes layout

* fixes avatar

* fixes

* Add missing else

* Fix query in routable paths

Co-authored-by: davidjumani <dj.davidjumani1994@gmail.com>
2022-03-09 09:47:09 -03:00
nvazquez 67601b5a78
Merge branch '4.16' 2022-03-09 06:55:49 -03:00
Nicolas Vazquez 7fbfd4c6ea
UI: Fix navigation to domains (#6072) 2022-03-09 06:54:55 -03:00
Yashika 38181b2afa
Optional chaining used to enhance readability (#5961)
* Optional chaining used to enhance readability

* Added Suggested change

Co-authored-by: YashikaSarkar <65132044+YashikaSarkar@users.noreply.github.com>
2022-02-10 01:27:54 -03:00
Hoang Nguyen 535761b2b9
UI: Refactor async job polling codebase-wide (#4782)
* refactor async job polling codebase-wide

* fix multiple call fetchData() when async job completed

* remove unnecessary functions

* remove const not use

* move closeaction out of handleResponse

* call closeAction without waiting for all group actions to complete

* refactor polljob network provider

* removed variable not use

* remove await
2021-07-19 08:50:54 -03:00
Hoang Nguyen 4f97fea9ea src: fix doclinks and translation across UI (#481)
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2021-01-20 07:06:20 +05:30
Abhishek Kumar 11dfaf4ad2 view: fix role-base checks on components to disable (#317)
Fixes #310

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
Co-authored-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2021-01-20 07:06:19 +05:30
davidjumani a9bc272403 config: fix translation key usage for API actions and elsewhere (#407)
- Adds API messages
- Fixes English strings to use keys
- Fixes/adds missing keys to en.json
- Fixes locale load/store issue across logout/login

FIxes #410

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
Co-authored-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2021-01-20 07:06:19 +05:30
Rohit Yadav 2f02da1c95 config: automatic translation key migration (#370)
The new convention used:
- All lower keys
- Most keys start with `label.` prefix
- All spaces and underscores replaced with `.`

Quick ugly hack and similar for config `title`:
> IFS=$'\n'
> git grep -l "\$t('" | grep -v -e "\$t('label\." -e "\$t('message" -e "\$t('error" > ftr
> for f in $(cat ftr); do echo $f; for w in $(grep -Po '\$t\(\K[^)]*' $f | grep "^'" | grep -v -e ^\'message -e ^\'error -e ^\'label); do echo WORD IS $w; nw=$(echo $w | sed "s/$w/'label\.\L&/g" | sed "s/label\.'/label\./g" | sed "s/ /\./g" | sed "s/_/\./g"); echo $w = $nw; sed -i "s/\$t($w/\$t($nw/g" $f; done; done

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2021-01-20 07:06:18 +05:30
Abhishek Kumar 5ab5adc918 utils: introduce global API error notification (#296)
Fixes #294

Introduce a new global `this.$notifyError(error)` that takes in the `error` in a catch block and displays error notification with duration: 0, refactored to replace error handling codebase-wide.

Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
Co-authored-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2021-01-20 07:06:18 +05:30
Ritchie Vincent 41a2297dd4 infra: add cluster form (#114)
This adds the add cluster form with domain/account dedication option.

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
Co-authored-by: Rohit Yadav <rohit@apache.org>
2021-01-20 07:06:16 +05:30
Ritchie Vincent 827ca541ca infra: Vmware section in zone details tab (#127)
Fixes vmware section in zone details tab

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
Co-authored-by: Rohit Yadav <rohit@apache.org>
2021-01-20 07:06:15 +05:30
Ritchie Vincent 1df0e0cdea infra: reusable dedicated domain component (#113)
Adds dedicated section for zone/pod/cluster/host to dedicate that resource to a domain (and account). Implements the list, dedicate and release APIs.

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
Co-authored-by: Rohit Yadav <rohit@apache.org>
2021-01-20 07:06:15 +05:30