产品发布

RELEASE
ZStack v1.1 RC1 发布

Yongkang_You | 2022-08-07 22:38

ZStack 1.1 RC1 版本今天发布,欢迎大家下载试用。在该版本中,我们主要针对1.0 版本做了性能和稳定性相关的工作。 某些性能指标提升超过10倍,例如consoleproxy在管理节点重启后会立刻安装完毕. 在ZStack 1.1 正式版发布的时候我们还会提供一个离线版的CentOS7.2的安装ISO和ZStack 1.1的离线安装方法。

新增功能

1.Ansible 优化

2.ConsoleProxy 重连API

3.API超时管理框架

4.垃圾自动回收

5.15M超小试用镜像--支持动态添加删除云盘和网络

6.更新虚拟路由(VirtualRouter)镜像

7.修改CentOS7.2 无法热迁移VM的Bug


安装升级

1.安装

2.升级

3.Virtual Router Provider升级到Flat Network Porvider


1. Ansible优化

在1.1版本中,我们不再使用Ansible Playbook的方式去部署agent,而是直接使用了Ansible的原生SDK,为每个agent都定制了单独的部署程序,使得部署的稳定性和效率得到了较大的提高。

新的Ansible部署工具会自动检查系统依赖包的安装情况,只在有依赖包缺失的情况下才访问yum或apt源,避免了重启ZStack和升级ZStack过程中,由于访问外网抖动导致的物理机重连失败的问题,提高了系统的稳定性。新的部署工具也会检查Python依赖,解决了升级过程中consoleproxy依赖的websockify重复编译问题,升级consoleproxy的部署时间从原来的5分钟缩减到了4秒。


2. ConsoleProxy重连API

在1.1版本中,我们加入了console proxy的重连和查询API,用户不再需要通过重启ZStack来重新部署console proxy。

>>>QueryConsoleProxyAgent 
{
    "inventories": [
        {
            "createDate": "Mar 26, 2016 12:53:17 PM",
            "description": "Console proxy agent running on the management node[uuid:ae80b109e9ca4f4c81191cd2ffe43000]",
            "lastOpDate": "Mar 26, 2016 12:53:22 PM",
            "managementIp": "172.20.12.46",
            "state": "Enabled",
            "status": "Connected",
            "type": "ManagementServerConsoleProxy",
            "uuid": "ae80b109e9ca4f4c81191cd2ffe43000"
        }
    ],
    "success": true
}

>>>ReconnectConsoleProxyAgent 
{
    "inventory": {
        "ae80b109e9ca4f4c81191cd2ffe43000": true
    },
    "success": true
}

3. API超时管理框架

ZStack所有功能由大量相互独立的微服务实现,服务之间使用异步消息通信,通常一个API会涉及到多个消息以及跟Agent端的HTTP调用,超时管理成为一个难题。在1.1版本中,我们加入了统一的API超时管理框架,用户无需关心底层细节。在当前版本中,用户如果需要改变默认的API超时,暂时还需要通过zstack.properties文件来改变,例如需要改变AddImage的API超时为6个小时,需要在zstack.properties添加如下配置:

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

NOTE:目前我们为所有耗时的API都设置了默认3小时的超时时间,用户在如无特殊需要,不建议通过配置的方式进行修改。我们在1.2版本会新加超时管理API,用户可以直接通过API来设定相应操作的超时时间。


4. 垃圾回收机制

在1.1版本中,我们全面开启了跟虚拟机相关的垃圾回收器,可以自动回收由于网络故障、物理机故障导致的遗留资源,而不阻碍用户操作。

场景:

物理机网络失联导致用户无法删除该物理机上运行的虚拟机。在早前的ZStack版本中,用户需要等待物理机网络恢复后再执行删除操作。有了垃圾回收器后,用户可以直接删除虚拟机,后台会记录该删除操作。垃圾回收器会在物理机网络恢复后自动触发,执行未完成的操作。

目前已经启动的垃圾回收器包括云主机、云盘、快照,更多的垃圾回收器会在未来版本中逐一开放。

ZStack的垃圾回收器非常智能,支持时间轮询和事件触发,其中事件触发支持多种关联事件。例如在前面的例子中,如果管理员在物理机网络恢复前又删除了该物理机,垃圾回收器也会被触发,清除之前提交的删除该物理机上虚拟机的任务。


5. 新虚拟路由(Virtual Router)镜像

VirtualRouter image 更新到了 zstack-virtualrouter-1.1.0.qcow2 .我们除了更新了VirtualRouter 对应的services外,还提高了VirtualRouter的安全访问方式:

1.修改了virtual router 默认的密码,原先的默认密码是 password。以后用户无法用密码登录Virtual Router

2.使用了用户特别的 SSH public key。 这个public key是用户在安装ZStack的时候自动产生的,可以保证每个用户都是用不同的SSH key。 用户可以使用私有的 SSH private key从Virtual Router的管理网络登录。 该SSH private key 默认存放在管理节点: /usr/local/zstack/apache-tomcat/webapps/zstackWEB-INF/classes/ansible/rsaKeys/id_rsa

用户可以下载并替换原有VirtualRouter Image:

cdn.zstack.io/community/downloads/zstack/1.1/zstack-virtualrouter-1.1.0.qcow2

替换原有VirtualRouter的方法是:

1.从UI上下载最新的VirtualRouter image,例如命名为 zstack-vr-1.1-image

2.从镜像服务器删除老的VirtualRouter Image

3.删除老的VirtualRouter Offering

4.创建新的VirtualRouter Offering,并且选择新下载的zstack-vr-1.1-image做为VirtualRouter Offering的镜像。其他网络配置不变。

5.从UI面板的Virtual Router菜单中删除现有的VirtualRouter VM

6.选择使用VR的L3网络重新创建一个普通VM,ZStack就会使用新的Virtual Router镜像创建一个新的虚拟路由。


6. 15M超小试用镜像--支持动态添加删除云盘和网络

在1.1我们为ZStack专门构建了一个只有15M的测试镜像,支持网络、SSHD,用户可以用它来做一些基本测试。相比于之前的1.0的测试镜像,该镜像支持了动态添加删除云盘和网络。下载链接: cdn.zstack.io/community/downloads/zstack/1.2/zstack-image-1.2.qcow2 感谢Robert Yang(@linuxer)提供该镜像!


7. 修复CentOS7.2 物理机无法热迁移VM的bug

CentOS7.2 修改了热迁移VM的libvirt的相关代码,导致如果用户没有显示的设置物理机Hostname的情况下,云主机无法热迁移。ZStack以及给RedHat报告了问题。 不过在ZStack 1.1中,我们做了特别的改动来避免CentOS7.2 的这个bug。


8. 安装

你可以通过下面方式安装:

wget http://cdn.zstack.io/community/downloads/zstack/1.1/zstack-installer-1.1.0-rc1.bin -O zstack-installer-1.1.0-rc1.bin
bash zstack-installer-1.1.0-rc1.bin -R aliyun

这里-R aliyun参数指定使用阿里云的源进行安装,你也可以使用-R 163使用网易的源。我们推荐使用阿里云的源


9. 升级

一如既往的,我们支持一键无缝升级:

wget http://cdn.zstack.io/community/downloads/zstack/1.1/zstack-installer-1.1.0-rc1.bin -O zstack-installer-1.1.0-rc1.bin
bash zstack-installer-1.1.0-rc1.bin -u

10. 用Flat Network Provider替换Virtual Router Provider

如果你的网络模式是扁平网络,并且使用的是Virtual Rotuer Provider作为网络提供商,你可以使用1.0的Flat Network Provider替换它,这样你就不再需要virtual router VM来充当DHCP服务器了。假定你要替换网络提供商的L3网络的UUID是1a82c2691978476fa6cefa36bb9d4bfd,参考以下步骤:

10.1 获得当前L3网络的网络提供商UUID

>>>QueryNetworkServiceL3NetworkRef l3NetworkUuid=1a82c2691978476fa6cefa36bb9d4bfd
{
 "inventories": [
     {
         "l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
         "networkServiceProviderUuid": "5d21ea0f39c04d6fb68cfaf5a37db4ad",
         "networkServiceType": "DNS"
     },
     {
         "l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
         "networkServiceProviderUuid": "5d21ea0f39c04d6fb68cfaf5a37db4ad",
         "networkServiceType": "DHCP"
     }
 ],
 "success": true
}

10.2 从L3网络上卸载Virtual Router Provider

>>>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
}

注意这里的参数networkServices是一个map, key是第一步里返回的networkServiceProviderUuid,value是第一步里返回的networkServiceType

10.3 获得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
}

10.4 获得承载L3网络的L2网络的UUID

>>>QueryL3Network fields=l2NetworkUuid, uuid=1a82c2691978476fa6cefa36bb9d4bfd
{
 "inventories": [
     {
         "l2NetworkUuid": "9ec8cad681d1424fa7eda2447edae142"
     }
 ],
 "success": true
}

10.5 加载Flat Network Provider到L2网络

>>>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
}

10.6 加载Flat Network Provider的服务到三层网络

>>>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
}

10.7. 删除virtualrouter ,删除virtual router offering

>>>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
}

10.8 重连所有有VM运行的host

>>>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
}

上一篇:ZStack v1.0发布
下一篇:ZStack v1.1 发布
最近文章

咨询

021-61733682

400-962-2212