mirror of
https://github.com/apache/cloudstack
synced 2026-08-05 18:37:13 +00:00
Added support for PowerFlex/ScaleIO (v3.5 onwards) storage pool as a primary storage in CloudStack (for KVM hypervisor) and enabled VM/Volume operations on that pool (using pool tag). Please find more details in the FS here: https://cwiki.apache.org/confluence/x/cDl4CQ Documentation PR: apache/cloudstack-documentation#169 This enables support for PowerFlex/ScaleIO (v3.5 onwards) storage pool as a primary storage in CloudStack Other improvements addressed in addition to PowerFlex/ScaleIO support: - Added support for config drives in host cache for KVM => Changed configuration "vm.configdrive.primarypool.enabled" scope from Global to Zone level => Introduced new zone level configuration "vm.configdrive.force.host.cache.use" (default: false) to force host cache for config drives => Introduced new zone level configuration "vm.configdrive.use.host.cache.on.unsupported.pool" (default: true) to use host cache for config drives when storage pool doesn't support config drive => Added new parameter "host.cache.location" (default: /var/cache/cloud) in KVM agent.properties for specifying the host cache path and create config drives on the "/config" directory on the host cache path => Maintain the config drive location and use it when required on any config drive operation (migrate, delete) - Detect virtual size from the template URL while registering direct download qcow2 (of KVM hypervisor) templates - Updated full deployment destination for preparing the network(s) on VM start - Propagate the direct download certificates uploaded to the newly added KVM hosts - Discover the template size for direct download templates using any available host from the zones specified on template registration => When zones are not specified while registering template, template size discovery is performed using any available host, which is picked up randomly from one of the available zones - Release the VM resources when VM is sync-ed to Stopped state on PowerReportMissing (after graceful period) - Retry VM deployment/start when the host cannot grant access to volume/template - Mark never-used or downloaded templates as Destroyed on deletion, without sending any DeleteCommand => Do not trigger any DeleteCommand for never-used or downloaded templates as these doesn't exist and cannot be deleted from the datastore - Check the router filesystem is writable or not, before performing health checks => Introduce a new test "filesystem.writable.test" to check the filesystem is writable or not => The router health checks keeps the config info at "/var/cache/cloud" and updates the monitor results at "/root" for health checks, both are different partitions. So, test at both the locations. => Added new script: "filesystem_writable_check.py" at /opt/cloud/bin/ to check the filesystem is writable or not - Fixed NPE issue, template is null for DATA disks. Copy template to target storage for ROOT disk (with template id), skip DATA disk(s) * Addressed some issues for few operations on PowerFlex storage pool. - Updated migration volume operation to sync the status and wait for migration to complete. - Updated VM Snapshot naming, for uniqueness in ScaleIO volume name when more than one volume exists in the VM. - Added sync lock while spooling managed storage template before volume creation from the template (non-direct download). - Updated resize volume error message string. - Blocked the below operations on PowerFlex storage pool: -> Extract Volume -> Create Snapshot for VMSnapshot * Added the PowerFlex/ScaleIO client connection pool to manage the ScaleIO gateway clients, which uses a single gateway client per Powerflex/ScaleIO storage pool and renews it when the session token expires. - The token is valid for 8 hours from the time it was created, unless there has been no activity for 10 minutes. Reference: https://cpsdocs.dellemc.com/bundle/PF_REST_API_RG/page/GUID-92430F19-9F44-42B6-B898-87D5307AE59B.html Other fixes included: - Fail the VM deployment when the host specified in the deployVirtualMachine cmd is not in the right state (i.e. either Resource State is not Enabled or Status is not Up) - Use the physical file size of the template to check the free space availability on the host, while downloading the direct download templates. - Perform basic tests (for connectivity and file system) on router before updating the health check config data => Validate the basic tests (connectivity and file system check) on router => Cleanup the health check results when router is destroyed * Updated PowerFlex/ScaleIO storage plugin version to 4.16.0.0 * UI Changes to support storage plugin for PowerFlex/ScaleIO storage pool. - PowerFlex pool URL generated from the UI inputs(Gateway, Username, Password, Storage Pool) when adding "PowerFlex" Primary Storage - Updated protocol to "custom" for PowerFlex provider - Allow VM Snapshot for stopped VM on KVM hypervisor and PowerFlex/ScaleIO storage pool and Minor improvements in PowerFlex/ScaleIO storage plugin code * Added support for PowerFlex/ScaleIO volume migration across different PowerFlex storage instances. - findStoragePoolsForMigration API returns PowerFlex pool(s) of different instance as suitable pool(s), for volume(s) on PowerFlex storage pool. - Volume(s) with snapshots are not allowed to migrate to different PowerFlex instance. - Volume(s) of running VM are not allowed to migrate to other PowerFlex storage pools. - Volume migration from PowerFlex pool to Non-PowerFlex pool, and vice versa are not supported. * Fixed change service offering smoke tests in test_service_offerings.py, test_vm_snapshots.py * Added the PowerFlex/ScaleIO volume/snapshot name to the paths of respective CloudStack resources (Templates, Volumes, Snapshots and VM Snapshots) * Added new response parameter “supportsStorageSnapshot” (true/false) to volume response, and Updated UI to hide the async backup option while taking snapshot for volume(s) with storage snapshot support. * Fix to remove the duplicate zone wide pools listed while finding storage pools for migration * Updated PowerFlex/ScaleIO volume migration checks and rollback migration on failure * Fixed the PowerFlex/ScaleIO volume name inconsistency issue in the volume path after migration, due to rename failure
269 lines
12 KiB
Properties
269 lines
12 KiB
Properties
# 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.
|
|
|
|
# Sample configuration file for CloudStack agent
|
|
|
|
# The GUID to identify the agent with, this is mandatory!
|
|
# Generate with "uuidgen"
|
|
guid=
|
|
|
|
#resource= the java class, which agent load to execute
|
|
resource=com.cloud.hypervisor.kvm.resource.LibvirtComputingResource
|
|
|
|
#workers= number of threads running in agent
|
|
workers=5
|
|
|
|
#host= The IP address of management server
|
|
host=localhost
|
|
|
|
# The time interval in seconds after which agent will check if connected host
|
|
# is the preferred host (the first host in the comma-separated list is preferred
|
|
# one) and will attempt to reconnect to the preferred host when it's connected
|
|
# to one of the secondary/backup hosts. The timer task is scheduled after agent
|
|
# connects to a management server. On connection, it receives admin configured
|
|
# cluster-level 'indirect.agent.lb.check.interval' setting that will be used by
|
|
# the agent as the preferred host check interval however the following setting
|
|
# if defined overrides the received value. The value 0 and lb algorithm 'shuffle'
|
|
# disables this background task.
|
|
#host.lb.check.interval=0
|
|
|
|
#port = The port management server listening on, default is 8250
|
|
port=8250
|
|
|
|
#cluster= The cluster which the agent belongs to
|
|
cluster=default
|
|
|
|
#pod= The pod which the agent belongs to
|
|
pod=default
|
|
|
|
#zone= The zone which the agent belongs to
|
|
zone=default
|
|
|
|
#public.network.device= the public nic device
|
|
# if this is commented, it is autodetected on service startup
|
|
# public.network.device=cloudbr0
|
|
|
|
#private.network.device= the private nic device
|
|
# if this is commented, it is autodetected on service startup
|
|
# private.network.device=cloudbr1
|
|
|
|
#guest.network.device= the guest nic device
|
|
# if this is commented, the private nic device will be used
|
|
|
|
# local storage path, by default, it's /var/lib/libvirt/images/
|
|
#local.storage.path=/var/lib/libvirt/images/
|
|
|
|
# Qemu socket path, directory where Qemu sockets are placed.
|
|
# These sockets are for the Qemu Guest Agent and SSVM privisioning
|
|
# Make sure that AppArmor or SELinux allow libvirt to write there
|
|
#qemu.sockets.path=/var/lib/libvirt/qemu
|
|
|
|
# The UUID for the local storage pool, this is mandatory!
|
|
# Generate with "uuidgen"
|
|
local.storage.uuid=
|
|
|
|
# Location for KVM scripts
|
|
domr.scripts.dir=scripts/network/domr/kvm
|
|
|
|
# the timeout for time-consuming operations, such as create/copy snapshot
|
|
#cmds.timeout=7200
|
|
|
|
# set the vm migrate speed, by default, it will try to guess the speed of the guest network
|
|
# In MegaBytes per second
|
|
#vm.migrate.speed=0
|
|
|
|
# set target downtime at end of livemigration, the 'hiccup' for final copy. Higher numbers
|
|
# make livemigration easier, lower numbers may cause migration to never complete. Less than 1
|
|
# means hypervisor default (20ms).
|
|
#vm.migrate.downtime=0
|
|
|
|
# Busy VMs may never finish migrating, depending on environment. When its available, we will
|
|
# want to add support for autoconvergence migration flag which should fix this. Set an upper
|
|
# limit in milliseconds for how long live migration should wait, at which point VM is paused and
|
|
# migration will finish quickly. Less than 1 means disabled.
|
|
#vm.migrate.pauseafter=0
|
|
|
|
# Agent hooks is the way to override default agent behavior to extend the functionality without excessive coding
|
|
# for a custom deployment. The first hook promoted is libvirt-vm-xml-transformer which allows provider to modify
|
|
# VM XML specification before send to libvirt. Hooks are implemented in Groovy and must be implemented in the way
|
|
# to keep default CS behaviour is something goes wrong.
|
|
# All hooks are located in a special directory defined in 'agent.hooks.basedir'
|
|
#
|
|
# agent.hooks.basedir=/etc/cloudstack/agent/hooks
|
|
|
|
# every hook has two major attributes - script name, specified in 'agent.hooks.*.script' and method name
|
|
# specified in 'agent.hooks.*.method'.
|
|
|
|
# Libvirt XML transformer hook does XML-to-XML transformation which provider can use to add/remove/modify some
|
|
# sort of attributes in Libvirt XML domain specification.
|
|
# agent.hooks.libvirt_vm_xml_transformer.script=libvirt-vm-xml-transformer.groovy
|
|
# agent.hooks.libvirt_vm_xml_transformer.method=transform
|
|
#
|
|
# The hook is called right after libvirt successfuly launched VM
|
|
# agent.hooks.libvirt_vm_on_start.script=libvirt-vm-state-change.groovy
|
|
# agent.hooks.libvirt_vm_on_start.method=onStart
|
|
#
|
|
# The hook is called right after libvirt successfuly stopped VM
|
|
# agent.hooks.libvirt_vm_on_stop.script=libvirt-vm-state-change.groovy
|
|
# agent.hooks.libvirt_vm_on_stop.method=onStop
|
|
#
|
|
|
|
# set the type of bridge used on the hypervisor, this defines what commands the resource
|
|
# will use to setup networking. Currently supported NATIVE, OPENVSWITCH
|
|
#network.bridge.type=native
|
|
|
|
# set the driver used to plug and unplug nics from the bridges
|
|
# a sensible default will be selected based on the network.bridge.type but can
|
|
# be overridden here.
|
|
# native = com.cloud.hypervisor.kvm.resource.BridgeVifDriver
|
|
# openvswitch = com.cloud.hypervisor.kvm.resource.OvsVifDriver
|
|
#libvirt.vif.driver=com.cloud.hypervisor.kvm.resource.BridgeVifDriver
|
|
|
|
# Set DPDK Support on OpenVswitch
|
|
#openvswitch.dpdk.enabled=true
|
|
#openvswitch.dpdk.ovs.path=/var/run/openvswitch
|
|
|
|
# set the hypervisor type, values are: kvm, lxc
|
|
hypervisor.type=kvm
|
|
|
|
# This parameter specifies a directory on the host local storage for temporary storing direct download templates
|
|
#direct.download.temporary.download.location=/var/lib/libvirt/images
|
|
|
|
# This parameter specifies a directory on the host local storage for creating and hosting the config drives
|
|
#host.cache.location=/var/cache/cloud
|
|
|
|
# set the rolling maintenance hook scripts directory
|
|
#rolling.maintenance.hooks.dir=/etc/cloudstack/agent/hooks.d
|
|
|
|
# disable the rolling maintenance service execution
|
|
#rolling.maintenance.service.executor.disabled=true
|
|
|
|
# set the hypervisor URI. Usually there is no need for changing this
|
|
# For KVM: qemu:///system
|
|
# For LXC: lxc:///
|
|
# hypervisor.uri=qemu:///system
|
|
|
|
# settings to enable direct networking in libvirt, should not be used
|
|
# on hosts that run system vms, values for mode are: private, bridge, vepa
|
|
# libvirt.vif.driver=com.cloud.hypervisor.kvm.resource.DirectVifDriver
|
|
# network.direct.source.mode=private
|
|
# network.direct.device=eth0
|
|
|
|
# setting to enable the cpu model to kvm guest globally.
|
|
# three option:custom,host-model and host-passthrough.
|
|
# custom - user custom the CPU model which specified by guest.cpu.model.
|
|
# host-model - identify the named CPU model which most closely matches the host,
|
|
# and then request additional CPU flags to complete the match. This should give
|
|
# close to maximum functionality/performance, which maintaining good
|
|
# reliability/compatibility if the guest is migrated to another host with slightly different host CPUs.
|
|
# host-passthrough - tell KVM to passthrough the host CPU with no modifications.
|
|
# The difference to host-model, instead of just matching feature flags,
|
|
# every last detail of the host CPU is matched. This gives absolutely best performance,
|
|
# and can be important to some apps which check low level CPU details,
|
|
# but it comes at a cost wrt migration. The guest can only be migrated to
|
|
# an exactly matching host CPU.
|
|
#
|
|
# guest.cpu.mode=custom|host-model|host-passthrough
|
|
# This param is only valid if guest.cpu.mode=custom,
|
|
# for examples:"Conroe" "Penryn", "Nehalem", "Westmere", "pentiumpro" and so
|
|
# on,run virsh capabilities for more details.
|
|
# guest.cpu.model=
|
|
#
|
|
# This param will set the CPU architecture for the domain override what
|
|
# the management server would send
|
|
# In case of arm64 (aarch64), this will change the machine type to 'virt' and
|
|
# adds a SCSI and a USB controller in the domain xml.
|
|
# guest.cpu.arch=x86_64|aarch64
|
|
#
|
|
# This param will require CPU features on the <cpu> section
|
|
# guest.cpu.features=vmx vme
|
|
#
|
|
# vm.memballoon.disable=true
|
|
# Disable memory ballooning on vm guests for overcommit, by default overcommit
|
|
# feature enables balloon and sets currentMemory to a minimum value.
|
|
#
|
|
# vm.diskactivity.checkenabled=false
|
|
# Set to true to check disk activity on VM's disks before starting a VM. This only applies
|
|
# to QCOW2 files, and ensures that there is no other running instance accessing
|
|
# the file before starting. It works by checking the modify time against the current time,
|
|
# so care must be taken to ensure the cluster has time synced, otherwise VMs may fail to start.
|
|
#
|
|
# vm.diskactivity.checktimeout_s=120
|
|
# Timeout for giving up on waiting for VM's disk files to become inactive. Hitting
|
|
# this timeout will result in failure to start VM.
|
|
#
|
|
# vm.diskactivity.inactivetime_ms=30000
|
|
# This is the length of time that the disk needs to be inactive in order to pass the check.
|
|
# This means current time minus mtime of disk file needs to be greater than this number.
|
|
# It also has the side effect of setting the minimum threshold between a stop and start of
|
|
# a given VM.
|
|
#
|
|
# kvmclock.disable=false
|
|
# Some newer linux kernels are incapable of reliably migrating vms with kvmclock
|
|
# This is a workaround for the bug, admin can set this to true per-host
|
|
#
|
|
# vm.rng.enable=false
|
|
# This enabled the VirtIO Random Number Generator device for guests.
|
|
#
|
|
# vm.rng.model=random
|
|
# The model of VirtIO Random Number Generator (RNG) to present to the Guest.
|
|
# Currently only 'random' is supported.
|
|
#
|
|
# vm.rng.path=/dev/random
|
|
# Local Random Number Device Generator to use for VirtIO RNG for Guests.
|
|
# This is usually /dev/random, but per platform this might be different
|
|
#
|
|
# vm.rng.rate.bytes=2048
|
|
# The amount of bytes the Guest may request/obtain from the RNG in the period
|
|
# specified below.
|
|
#
|
|
# vm.rng.rate.period=1000
|
|
# The number of milliseconds in which the guest is allowed to obtain the bytes
|
|
# specified above.
|
|
#
|
|
# router.aggregation.command.each.timeout=600
|
|
# timeout value for aggregation commands send to virtual router
|
|
#
|
|
# host.overcommit.mem.mb = 0
|
|
# allows to increase amount of ram available on host virtually to utilize Zswap, KSM features
|
|
# and modern fast SSD/3D XPoint devices. Specified amount of MBs is added to the memory agent
|
|
# reports to the Management Server
|
|
# Default: 0
|
|
#
|
|
# host.reserved.mem.mb = 0
|
|
# How much host memory to reserve for non-allocation.
|
|
# A useful parameter if a node uses some other software that requires memory,
|
|
# or in case that OOM Killer kicks in sometimes.
|
|
# If this parameter is used, host.overcommit.mem.mb must be set to 0.
|
|
# Default value: 0
|
|
#
|
|
# vm.watchdog.model=i6300esb
|
|
# The model of Watchdog timer to present to the Guest
|
|
# For all models refer to the libvirt documentation.
|
|
# Recommend value is: i6300esb
|
|
#
|
|
# vm.watchdog.action=none
|
|
# Action to take when the Guest/Instance is no longer notifiying the Watchdog
|
|
# timer.
|
|
# For all actions refer to the libvirt documentation.
|
|
# Recommended values are: none, reset and poweroff.
|
|
#
|
|
iscsi.session.cleanup.enabled=false
|
|
# Automatically clean up iscsi sessions not attached to any VM.
|
|
# Should be enabled for users using managed storage for example solidfire.
|
|
# Should be disabled for users with unmanaged iscsi connections on their hosts
|