ZStack v1.1 release
Hello everyone, I am Frank Zhang, the architect of ZStack. Today I am happy to announce that ZStack v1.1 is released.
New Features And Enhancements
- Ansible Optimization
- Console Proxy APIs
- API Timeout Management
- Garbage Collector
- 15 Tiny Tryout Image
- Virtual Router Image Upgrade
Installation And Upgrade
1. Ansible Optimization
In this version, we create customized deployers for all ZStack agents(i.e. kvmagent, backup storage agent) directly using Ansible SDK, instead of regular Ansible playbook YAML files. As the result, the speed of agent deployment gets significantly improved, because the deployer that is a Python application will try best to avoid unnecessary time-costing steps such as accessing YUM repo; the logging also gets better, each task will post messages to a logging URL before and after execution, and the error message will clearly state the error instead of flooding out all tasks status, which regular Ansible playbook YAML files normally do.
2. Console Proxy APIs
Two new APIs are added for console proxy, ReconnectConsoleProxyAgent
and QueryConsoleProxyAgent
.
Users can use ReconnectConsoleProxyAgent
to redeploy console proxy agents:
>>>ReconnectConsoleProxyAgent
or use QueryConsoleProxyAgent
to query agents' status:
>>>QueryConsoleProxyAgent
3. API Timeout Management
As ZStack consists of a lot of microservices which communicate with each other through async-messages, it's very hard to control API timeout because the API has no idea about internal messages entailed by itself. In this version, we add a central API timeout management framework that can connect an API to all entailed internal messages and HTTP requests, and that can propagate the API's timeout to the descendants. All APIs have default configurations, users can change a configuration by editing the zstack.properties
file, for example:
ApiTimeout.org.zstack.header.image.APIAddImageMsg= org.zstack.header.storage.backup.DownloadImageMsg, org.zstack.storage.backup.sftp.SftpBackupStorageCommands$DownloadCmd, org.zstack.storage.ceph.backup.CephBackupStorageBase$DownloadCmd; 6h
This example changes the timeout of API org.zstack.header.image.APIAddImageMsg
to six hours. However, this way is discouraged. In 1.2 version, we will allow users to configure APIs' timeout through a new API.
4. Garbage Collector
In this version, the VM related garbage collectors are enabled. Users can destroy a VM anytime no matter the connection status of the host. For example, you can delete a VM even the network connection to the host where the VM is running is lost. The garbage collector will save user operations which cannot be completed in current situation and re-execute them once the host's network connection recovers. The garbage collector can be triggered by time-based poll and events, for example, a host reconnect event and host delete event can both trigger a VM deleting garbage collector.
5. 15M Tiny Tryout Image
A new 15 tiny image is ready for quickly try out creating VMs. The image supports runtime attaching/detaching volumes and networks. The ACPID daemon is also included so you can gracefully shutdown a VM. You can download the image from:
http://download.zstack.org/templates/zstack-image-1.2.qcow2
6. New Virtual Router Image
The virtual router image is upgraded to 1.1 version, you can download it from:
http://download.zstack.org/templates/zstack-virtualrouter-1.1.0.qcow2
NOTE: Users still using the old 0.9 version are not necessary to upgrade. However, we suggest all new users using the new version.
7. Installation
You can install the 1.1 release by:
wget http://download.zstack.org/releases/1.1/1.1.0/0331/zstack-installer-1.1.0-0331.bin -O zstack-installer-1.1.0.bin
bash zstack-installer-1.1.0.bin
8. Upgrade
To upgrade your ZStack to 1.1, do:
wget http://download.zstack.org/releases/1.1/1.1.0/0331/zstack-installer-1.1.0-0331.bin -O zstack-installer-1.1.0.bin
bash zstack-installer-1.1.0.bin -u
9. Upgrade Virtual Router Provider To Flat Network Provider
If you are currently using a flat network with a previous ZStack version, you can upgrade the L3 network using the flat network provider so you won't need the virtual router VM anymore. Assume the UUID of your L3 network is 1a82c2691978476fa6cefa36bb9d4bfd, please follow the below steps:
1. Obtain the UUID of the virtual rotuer provider
>>>QueryNetworkServiceL3NetworkRef l3NetworkUuid=1a82c2691978476fa6cefa36bb9d4bfd
{
"inventories": [
{
"l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"networkServiceProviderUuid": "5d21ea0f39c04d6fb68cfaf5a37db4ad",
"networkServiceType": "DNS"
},
{
"l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"networkServiceProviderUuid": "5d21ea0f39c04d6fb68cfaf5a37db4ad",
"networkServiceType": "DHCP"
}
],
"success": true
}
2. Detach the virtual router provider from the L3 network
>>>DetachNetworkServiceFromL3Network l3NetworkUuid=1a82c2691978476fa6cefa36bb9d4bfd networkServices='{"5d21ea0f39c04d6fb68cfaf5a37db4ad":["DHCP","DNS"]}'
{
"inventory": {
"createDate": "Jan 30, 2016 3:01:03 PM",
"dns": [
"8.8.8.8"
],
"ipRanges": [
{
"createDate": "Jan 30, 2016 3:01:04 PM",
"endIp": "192.168.201.199",
"gateway": "192.168.200.1",
"l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"lastOpDate": "Jan 30, 2016 3:01:04 PM",
"name": "ipr-dk7p",
"netmask": "255.255.252.0",
"startIp": "192.168.201.180",
"uuid": "ec5fd87dd80243fdabeeace847c04427"
}
],
"l2NetworkUuid": "9ec8cad681d1424fa7eda2447edae142",
"lastOpDate": "Jan 30, 2016 3:01:03 PM",
"name": "l3-etpz",
"networkServices": [],
"state": "Enabled",
"system": false,
"type": "L3BasicNetwork",
"uuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"zoneUuid": "4a3a78b1b9f049948b79cf9e667f0af2"
},
"success": true
}
the parameter
networkServices
is a map where the key is anetworkServiceProviderUuid
and the value is a list ofnetworkServiceType
, which you obtain in the step 1
3. Get the flat network provider UUID
>>>QueryNetworkServiceProvider type=Flat
{
"inventories": [
{
"attachedL2NetworkUuids": [
"9ec8cad681d1424fa7eda2447edae142"
],
"createDate": "Jan 30, 2016 11:56:32 AM",
"description": "Flat Network Service Provider",
"lastOpDate": "Jan 30, 2016 11:56:32 AM",
"name": "Flat Network Service Provider",
"networkServiceTypes": [
"DHCP",
"Userdata"
],
"type": "Flat",
"uuid": "17864f985e584a9ba4cd81de215212ce"
}
],
"success": true
}
4. Get L2 UUID for the L3 network
>>>QueryL3Network fields=l2NetworkUuid, uuid=1a82c2691978476fa6cefa36bb9d4bfd
{
"inventories": [
{
"l2NetworkUuid": "9ec8cad681d1424fa7eda2447edae142"
}
],
"success": true
}
5. Attach the flat network provider to the L2 network
>>>AttachNetworkServiceProviderToL2Network l2NetworkUuid=9ec8cad681d1424fa7eda2447edae142 networkServiceProviderUuid=17864f985e584a9ba4cd81de215212ce
{
"inventory": {
"attachedL2NetworkUuids": [
"9ec8cad681d1424fa7eda2447edae142"
],
"createDate": "Jan 30, 2016 11:56:32 AM",
"description": "Flat Network Service Provider",
"lastOpDate": "Jan 30, 2016 11:56:32 AM",
"name": "Flat Network Service Provider",
"networkServiceTypes": [
"DHCP",
"Userdata"
],
"type": "Flat",
"uuid": "17864f985e584a9ba4cd81de215212ce"
},
"success": true
}
6. Attach the flat network provider to the L3 network
>>>AttachNetworkServiceToL3Network l3NetworkUuid=1a82c2691978476fa6cefa36bb9d4bfd networkServices='{"17864f985e584a9ba4cd81de215212ce":["DHCP","Userdata"]}'
{
"inventory": {
"createDate": "Jan 30, 2016 3:01:03 PM",
"dns": [
"8.8.8.8"
],
"ipRanges": [
{
"createDate": "Jan 30, 2016 3:01:04 PM",
"endIp": "192.168.201.199",
"gateway": "192.168.200.1",
"l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"lastOpDate": "Jan 30, 2016 3:01:04 PM",
"name": "ipr-dk7p",
"netmask": "255.255.252.0",
"startIp": "192.168.201.180",
"uuid": "ec5fd87dd80243fdabeeace847c04427"
}
],
"l2NetworkUuid": "9ec8cad681d1424fa7eda2447edae142",
"lastOpDate": "Jan 30, 2016 3:01:03 PM",
"name": "l3-etpz",
"networkServices": [
{
"l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"networkServiceProviderUuid": "17864f985e584a9ba4cd81de215212ce",
"networkServiceType": "DHCP"
},
{
"l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"networkServiceProviderUuid": "17864f985e584a9ba4cd81de215212ce",
"networkServiceType": "Userdata"
}
],
"state": "Enabled",
"system": false,
"type": "L3BasicNetwork",
"uuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"zoneUuid": "4a3a78b1b9f049948b79cf9e667f0af2"
},
"success": true
}
7. Delete the virtual router VM
>>QueryVirtualRouterVm
{
"inventories": [
{
"allVolumes": [
{
"createDate": "Jan 30, 2016 3:06:50 PM",
"description": "Root volume for VM[uuid:c5a966cb87d644649952daf683f89e26]",
"deviceId": 0,
"format": "qcow2",
"installPath": "/zstack_ps/rootVolumes/acct-36c27e8ff05c4780bf6d2fa65700f22e/vol-8eeaa9cb4c1045a2825f8815fed69d72/8eeaa9cb4c1045a2825f8815fed69d72.qcow2",
"lastOpDate": "Jan 30, 2016 3:06:59 PM",
"name": "ROOT-for-virtualRouter.l3.1a82c2691978476fa6cefa36bb9d4bfd",
"primaryStorageUuid": "4bff4e2d266f480ead596752d14ff3b5",
"rootImageUuid": "7bed05aa8ace4e5e8d6c55b284b66fb5",
"size": 467206656,
"state": "Enabled",
"status": "Ready",
"type": "Root",
"uuid": "8eeaa9cb4c1045a2825f8815fed69d72",
"vmInstanceUuid": "c5a966cb87d644649952daf683f89e26"
}
],
"allocatorStrategy": "LeastVmPreferredHostAllocatorStrategy",
"applianceVmType": "VirtualRouter",
"clusterUuid": "10409d3e33b249c19746022930a541c7",
"cpuNum": 1,
"cpuSpeed": 2,
"createDate": "Jan 30, 2016 3:06:50 PM",
"defaultRouteL3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"hostUuid": "415fa093b34e4a3d873368104b127115",
"hypervisorType": "KVM",
"imageUuid": "7bed05aa8ace4e5e8d6c55b284b66fb5",
"instanceOfferingUuid": "9cec7bd6324445a184351ffb7d32f970",
"lastHostUuid": "415fa093b34e4a3d873368104b127115",
"lastOpDate": "Jan 30, 2016 3:07:20 PM",
"managementNetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"memorySize": 536870912,
"name": "virtualRouter.l3.1a82c2691978476fa6cefa36bb9d4bfd",
"platform": "Linux",
"publicNetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"rootVolumeUuid": "8eeaa9cb4c1045a2825f8815fed69d72",
"state": "Running",
"status": "Connected",
"type": "ApplianceVm",
"uuid": "c5a966cb87d644649952daf683f89e26",
"vmNics": [
{
"createDate": "Jan 30, 2016 3:06:50 PM",
"deviceId": 0,
"gateway": "192.168.200.1",
"ip": "192.168.201.195",
"l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"lastOpDate": "Jan 30, 2016 3:06:50 PM",
"mac": "fa:4c:01:68:77:00",
"metaData": "7",
"netmask": "255.255.252.0",
"uuid": "c44e856aa88a42bc85ec30ce8c334c6c",
"vmInstanceUuid": "c5a966cb87d644649952daf683f89e26"
}
],
"zoneUuid": "4a3a78b1b9f049948b79cf9e667f0af2"
}
],
"success": true
}
>>>DestroyVmInstance uuid=c5a966cb87d644649952daf683f89e26
{
"success": true
}
8. Reconnect all hosts
>>>QueryHost
{
"inventories": [
{
"availableCpuCapacity": 7180,
"availableMemoryCapacity": 1997570048,
"clusterUuid": "4282fb61aa55458ea160de138e130298",
"createDate": "Jan 30, 2016 2:51:13 PM",
"hypervisorType": "KVM",
"lastOpDate": "Jan 30, 2016 3:03:20 PM",
"managementIp": "192.168.200.187",
"name": "host1",
"state": "Enabled",
"status": "Connected",
"totalCpuCapacity": 7182,
"totalMemoryCapacity": 2098233344,
"username": "root",
"uuid": "402f8304a50c410486e023512492316b",
"zoneUuid": "4a3a78b1b9f049948b79cf9e667f0af2"
},
{
"availableCpuCapacity": 14363,
"availableMemoryCapacity": 8321593344,
"clusterUuid": "10409d3e33b249c19746022930a541c7",
"createDate": "Jan 30, 2016 3:03:14 PM",
"hypervisorType": "KVM",
"lastOpDate": "Jan 30, 2016 3:03:52 PM",
"managementIp": "192.168.200.150",
"name": "host2",
"state": "Enabled",
"status": "Connected",
"totalCpuCapacity": 14364,
"totalMemoryCapacity": 8371924992,
"username": "root",
"uuid": "415fa093b34e4a3d873368104b127115",
"zoneUuid": "4a3a78b1b9f049948b79cf9e667f0af2"
}
],
"success": true
}
>>>ReconnectHost uuid=402f8304a50c410486e023512492316b
{
"success": true
}
>>>ReconnectHost uuid=415fa093b34e4a3d873368104b127115
{
"success": true
}