作为我上一篇有关Virtual SAN自动化主题的后续文章, 带有PowerCLI的VMware 虚拟SAN自动部署 我想继续Virtual SAN自动化主题,并分享另一个自动化演示示例。
这次,我要重点介绍Virtual SAN的主要用例之一,重点是可用性和业务连续性。使用PowerCLI,您可以快速执行虚拟基础架构所需的所有必要设置和工件的部署和配置,以跨多个数据中心配置Virtual SAN集群。在此示例中,我从实现和维护的角度选择了最复杂的Virtua SAN部署选项之一,它是第3层网络上多个数据中心之间的扩展集群。
这种类型的Virtual SAN部署高度依赖于物理网络基础结构以及所需的适当配置,以允许Virtual SAN在第2层网络(多播)和路由网络(PIM)上进行通信。物理网络基础架构的准备和配置通常由专门的网络工程师团队负责,
这种类型的Virtual SAN部署高度依赖于物理网络基础结构以及所需的适当配置,以允许Virtual SAN在第2层网络(多播)和路由网络(PIM)上进行通信。物理网络基础结构的准备和配置通常是由专门的网络工程师团队负责的,因此这不是我所要做的。’我试图在这里用PowerCLI解决。假定已配置并准备好满足Virtual SAN通信的联网要求的物理网络基础结构。
此处提供的PowerCLI脚本中的示例代码可供vSphere Administrator用作在第3层网络上部署Virtual SAN扩展集群的一部分。脚本中的代码执行所有必要的与vSphere相关的工件的配置和设置,以成功地形成跨多个站点的8节点全闪存集群。有几个Virtual SAN 6.2配置功能’在最新版本的 PowerCLI 6.3版本1 因此,需要从用户界面启用几个功能,但仍然需要点击两次并降低复杂度。
伟大的Alan Renouf向我保证,缺少的PowerCLI cmdlet和功能已经在开发中,并将很快添加到PowerCLI中。除了这个小小的差距,此示例脚本还可以用于任何满足第3层VMware 虚拟SAN部署的必要物理网络配置设置并已成功实现的物理和vSphere基础架构中。
PowerCLI执行以下自动功能:
- 创建虚拟数据中心
- 将Virtual SAN Witness设备添加到数据中心并配置Virtual SAN网络IP地址
- 创建vSphere群集并将主机添加到群集
- 为每个主机和网络创建分布式交换机和端口组
- 添加主机相关信息,例如DNS,NTP,VMkernel接口,VLAN
- 启用Virtual SAN网络流量服务
- 在集群内所需的所有主机和Virtual SAN见证设备上添加静态路由
通讯
- 通过ping 虚拟SAN网络接口来验证主机通信和跨网络连接
- 声称闪存存储设备基于其各自层的模型由Micron提供,并且每个主机形成多个磁盘组
一旦完成所有这些功能,剩下要做的就是遍历延伸的集群配置工作流程以定义位置,并将Virtual SAN见证添加到集群作为见证失败域。完成所有操作后,单击几下。然后,您将准备开始创建虚拟机网络和部署虚拟机。在进入测试模式甚至生产之前,请不要’不要忘记完成建议的HA和DRS配置设置。
我使用了上周发布的最新版本的PowerCLI,我建议获取– PowerCLI 6.3版本1。我在下面的工作中提供了脚本的演示,以查看所有脚本的工作情况。我建议更多地全屏观看视频,以清楚地看到脚本中执行的操作,以防Windows上的字体太小而看不到。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 |
################################################ ################################# # # # VMware 虚拟SAN-扩展群集的全闪存自动部署 # # # ################################################ ################################# ################################################ ################################# # # # 多合一和最终Virtual SAN Streched群集配置。脚本 # # # # 艾伦·雷诺夫(Alan Renouf)和罗林森(Rawlinson) # # # ################################################ ################################# #-添加所有VMware PowerCLI模块- 得到 -模块 -ListAvailable 的VMware * | 导入模块 | 空空 #-脚本的基础结构设置- $ VCNode = “ vcenter-fqdn-or-ip” $ VC密码 = “密码” $ ESXiUserName = “根” $ ESXiPassword = '密码' $ DCName = “ octo-sabu” $ CluName = “ hci拉伸群集” $ VDSName = “ 10G交换机” $ PrimaryPortGroup = 3001 $ SecondaryPortgroup = 3003 $ WitnessPortgroup = 3002 $ DNS = “ 10.142.7.21”, “ 10.142.7.22” $ NTP = “ 10.132.249.12”, “ 10.132.249.28” $ VMotionIP = “ 192.168.21。” $ 虚拟SAN 知识产权 = “ 192.168。” $ cachingSSD = “ S630DC-960” $ CapacitySSD = “ MICRON_M510DC_MT” 目击者 = “ 虚拟SAN 见证人fqdn或ip” $ witnessIP = “ 192.168.2.68” $见证网 = “ 255.255.255.0” #-静态路线- $ PrimarySR = “ 192.168.1.0” $ PrimaryGW = “ 192.168.1.253” $ SecondarySR = “ 192.168.3.0” $ SecondaryGW = “ 192.168.3.253” $ WitnessSR = “ 192.168.2.0” $ WitnessGW = “ 192.168.2.253” #-连接到vCenter- 连接 -虚拟服务器 $ VCNode -用户 $ VCUserName -通过 $ VC密码 -警告动作 默默地继续 #-数据中心/集群配置- #-创建数据中心- 写主机 “创建数据中心:$ DCName” -前景色 绿色 $ DC = 新数据中心 -名称 $ DCName -位置 (获取文件夹 数据中心) #-将Virtual SAN Witness Appliance添加并配置到vCenter 写主机 “创建见证数据中心:见证人-$($ DCName)” -前景色 绿色 $ WDC = 新数据中心 -名称 “见证-$($ DCName)” -位置 (获取文件夹 数据中心) 写主机 “添加见证主机$ Witness” -前景色 绿色 添加VMHost -名称 目击者 -位置 $ WDC -用户 $ ESXiUserName -密码 $ ESXiPassword -力 | 空空 写主机 “添加见证IP地址” -前景色 绿色 $ WVMK = 得到 -vmhost 目击者 | 获取VMHostNetworkAdapter | 哪里 { $ _ .dhcpEnabled -eq $真 } $ WVMK | 组 -VMHost NetworkAdapter -IP $ witnessIP -子网掩码 $见证网 -确认: $假 | 空空 #-创建集群- 写主机 “创建群集:$ CluName” -前景色 绿色 $ CLU = 新集群 -名称 $ CluName -位置 ( $ DC ) -DrsEnabled #-将主机添加到群集- 09..16 | Foreach { $ num = $ _ ; $ newnum = “ {0:D2}” -F $ num 写主机 “添加主机主机名-$ newnum.vmware.com” -前景色 绿色 添加VMHost -名称 “主机名-$ newnum.vmware.com” -位置 $ CluName -用户 $ ESXiUserName -密码 $ ESXiPassword -力 | 空空 } #-主机配置- $ 虚拟主机 s = 获取VMHost | 分类 名称 #-添加DNS / NTP并为主机启用iScsi设置- Foreach ($ vmhost 在 $ vmhosts) { 写主机 “在$ vmhost上配置DNS和域名” -前景色 绿色 获取VMHostNetwork -VMHost $ vmhost | 组 -VMHost Network -DNS地址 $ DNS -确认: $假 | 空空 写主机 “在$ 虚拟主机 上配置NTP服务器” -前景色 绿色 添加VMHostNTPServer -NtpServer $ NTP -VMHost $ 虚拟主机 -确认: $假 -ErrorAction 默默地继续 | 金融时报 | 空空 写主机 “在$ 虚拟主机 上配置NTP客户端策略” -前景色 绿色 获取VMHostService -VMHost $ 虚拟主机 | 哪里 { $ _ . 键 -eq “ ntpd” } | 组 -VMHost Service -政策 “上” -确认: $假 | 金融时报 | 空空 写主机 “在$ 虚拟主机 上重新启动NTP客户端” -前景色 绿色 获取VMHostService -VMHost $ 虚拟主机 | 哪里 { $ _ . 键 -eq “ ntpd” } | 重启VMHostService -确认: $假 | 金融时报 | 空空 } #-网络配置- #-创建DVSwitch- 写主机 “创建VDSwitch:$ VDSName” -前景色 绿色 $ VDS = 新VDSwitch -名称 $ VDSName -NumUplinkPorts 2 -位置 $ DC -Mtu 9000 -版 “ 6.0.0” #-创建端口组- 写主机 “创建端口组:VSAN网络$ PrimaryPortGroup” -前景色 绿色 新VDPortgroup -名称 “ 虚拟SAN 网络$ PrimaryPortGroup” -Vds $ vds -VlanId $ PrimaryPortGroup | 空空 写主机 “创建端口组:VSAN网络$ SecondaryPortGroup” -前景色 绿色 新VDPortgroup -名称 “ 虚拟SAN 网络$ SecondaryPortGroup” -Vds $ vds -VlanId $ SecondaryPortGroup | 空空 写主机 “创建端口组:VSAN网络$ WitnessPortGroup” -前景色 绿色 新VDPortgroup -名称 “ 虚拟SAN 网络$ WitnessPortGroup” -Vds $ vds -VlanId $ WitnessPortGroup | 空空 写主机 “创建vMotion网络3021” -前景色 绿色 新VDPortgroup -名称 “ vMotion网络3021” -VDSwitch $ vds -VlanId 3021 | 空空 #-将主机添加到VDSWitch并将pNIC迁移到VDS(vmnic2 / vmnic3)- Foreach ($ vmhost 在 ( $ DC | Get-VmHost)) { 写主机 “将$ 虚拟主机 添加到$ VDSName” -前景色 绿色 $ vds | 添加-VDSwitchVMHost -VMHost $ vmhost | 空空 $ vmhostNetworkAdapter = 获取VMHost $ vmhost | 获取VMHostNetworkAdapter -物理 -名称 vmnic2 写主机 “将$ 虚拟主机 NetworkAdapter添加到$ VDSName” -前景色 绿色 $ vds | 添加-VDSwitchPhysicalNetworkAdapter -VMHost NetworkAdapter $ vmhostNetworkAdapter -确认: $假 | 空空 $ vmhostNetworkAdapter = 获取VMHost $ vmhost | 获取VMHostNetworkAdapter -物理 -名称 vmnic3 写主机 “将$ 虚拟主机 NetworkAdapter添加到$ VDSName” -前景色 绿色 $ vds | 添加-VDSwitchPhysicalNetworkAdapter -VMHost NetworkAdapter $ vmhostNetworkAdapter -确认: $假 | 空空 } #-将DVUplink2设置为待机状态- $ TeamingPolicys = $ vds | 获取-VDPortgroup 虚拟SAN * | Get-VDUplinkTeamingPolicy Foreach ( $政策 在 $ TeamingPolicys) { 写主机 “为$($ Policy.VDPortGroup)设置备用上行链路” -前景色 绿色 $政策 | 组 -VDUplinkTeamingPolicy -StandbyUplinkPort “ dvUplink2” | 空空 } #-为DC中的所有主机创建vMotion VMKernel端口- 前言 ($ vmhost 在 ( $ DC | Get-VmHost)) { $ HostIP = ($ vmhost | 获取VMHostNetworkAdapter -名称 vmk0). ip $ LastO = $ HostIP . 分裂 ( “。” )[3] $ 虚拟SAN Net = 获取-VDPortGroup “ 虚拟SAN 网络$ PrimaryPortGroup” $3rdO = ($ 虚拟SAN Net. 名称 ).子串(16) $ CurrentvMotionIP = $ vMotionIP + $ LastO 写主机 “将IP地址为$ CurrentvMotionIP的vMotion网络适配器添加到$ 虚拟主机 中” -前景色 绿色 新 -vmhostnetworkadapter -VMHost $ vmhost 港口集团 “ vMotion网络3021” -虚拟交换机 $ vds -VMotionEnabled $真 -IP $ CurrentvMotionIP -子网掩码 “ 255.255.255.0” | 空空 } #为Virtual SAN Streched群集添加静态路由 #-主站点- 09..12 | Foreach { $ num = $ _ $ newnum = “ {0:D2}” -F $ num $ 虚拟主机 = “主机名-$ newnum.vmware.com” $ HostIP = (获取VMHost $ vmhost | 获取VMHostNetworkAdapter -名称 vmk0). ip $ LastO = $ HostIP . 分裂 ( “。” )[3] $ 虚拟SAN Net = 获取-VDPortGroup “ 虚拟SAN 网络$ PrimaryPortGroup” $3rdO = ($ 虚拟SAN Net. 名称 ).子串(16) $ CurrentVSANIP = $ 虚拟SAN 知识产权 + $3rdO + “。” + $ LastO 写主机 “将$ CurrentVSANIP添加到$($ 虚拟SAN Net.Name)并启用VSAN流量” -前景色 绿色 $ 虚拟SAN VMK = 新 -vmhostnetworkadapter -VMHost $ vmhost 港口集团 $ 虚拟SAN Net. 名称 -虚拟交换机 $ vds -VsanTrafficEnabled $真 -IP $ CurrentVSANIP -子网掩码 “ 255.255.255.0” 写主机 “将主站点的静态路由添加到主机hostname- $ newnum.vmware.com” -前景色 绿色 新VMHostRoute -VMHost $ 虚拟主机 -目的地 $ SecondarySR -网关 $ PrimaryGW -PrefixLength 24 -确认: $假 | 空空 新VMHostRoute -VMHost $ 虚拟主机 -目的地 $ WitnessSR -网关 $ PrimaryGW -PrefixLength 24 -确认: $假 | 空空 如果 ( -不 $1主IP) { $1主IP = (获取VMHost $ 虚拟主机 | 获取VMHostNetworkAdapter -名称 $ VMKnet). 知识产权 } } #-次要站点- 13..16 | Foreach { $ num = $ _ ; $ newnum = “ {0:D2}” -F $ num $ 虚拟主机 = “主机名-$ newnum.vmware.com” $ HostIP = (获取VMHost $ vmhost | 获取VMHostNetworkAdapter -名称 vmk0). ip $ LastO = $ HostIP . 分裂 ( “。” )[3] $ 虚拟SAN Net = 获取-VDPortGroup “ 虚拟SAN 网络$ SecondaryPortGroup” $3rdO = ($ 虚拟SAN Net. 名称 ).子串(16) $ CurrentVSANIP = $ 虚拟SAN 知识产权 + $3rdO + “。” + $ LastO 写主机 “将$ CurrentVSANIP添加到$($ 虚拟SAN Net.Name)并启用VSAN流量” -前景色 绿色 $ 虚拟SAN VMK = 新 -vmhostnetworkadapter -VMHost $ vmhost 港口集团 $ 虚拟SAN Net. 名称 -虚拟交换机 $ vds -VsanTrafficEnabled $真 -IP $ CurrentVSANIP -子网掩码 “ 255.255.255.0” 写主机 “将辅助站点的静态路由添加到主机hostname- $ newnum.vmware.com” -前景色 绿色 新VMHostRoute -VMHost $ 虚拟主机 -目的地 $ PrimarySR -网关 $ SecondaryGW -PrefixLength 24 -确认: $假 | 空空 新VMHostRoute -VMHost $ 虚拟主机 -目的地 $ WitnessSR -网关 $ SecondaryGW -PrefixLength 24 -确认: $假 | 空空 如果 ( -不 $1次IP) { $1次IP = (获取VMHost $ 虚拟主机 | 获取VMHostNetworkAdapter -名称 $ VMKnet). 知识产权 } } #-见证站点- 写主机 “为见证添加静态路由” -前景色 绿色 新VMHostRoute -VMHost 目击者 -目的地 $ PrimarySR -网关 $ WitnessGW -PrefixLength 24 -确认: $假 | 空空 新VMHostRoute -VMHost 目击者 -目的地 $ SecondarySR -网关 $ WitnessGW -PrefixLength 24 -确认: $假 | 空空 #-所有主机和网络之间的通信验证- #-主站点- 09..12 | Foreach { $ num = $ _ ; $ newnum = “ {0:D2}” -F $ num $ 虚拟主机 = “主机名-$ newnum.vmware.com” $ VMKnet = (获取VMHostNetworkAdapter -VMHost $ vmhost 港口集团 “ 虚拟SAN *”). 名称 写主机 “从$ vmknet上的$ 虚拟主机 ping $ SecondarySR ...” -前景色 绿色 $ esxcli = 获取ESXCLI -虚拟主机 $ vmhost $ ping = $ esxcli . 网络 . 诊断 . ping (2, $ null , $ null ,$1次IP, $ vmknet , $ null , $ null , $ null , $ null , $ null , $ null , $ null , $ null ) | 选择 -扩大 概要 如果 ( $ ping .已收 -ge 1) { 写主机 “次要Ping:$ 1次IP测试合格” -前景色 黄色 } 其他 { 写主机 “次要Ping:$ 1次IP失败” -前景色 红 } 写主机 “从$ VMKnet上的$ 虚拟主机 ping $ WitnessSR ...” -前景色 绿色 $ ping = $ esxcli . 网络 . 诊断 . ping (2, $ null , $ null ,$ WitnessIP, $ vmknet , $ null , $ null , $ null , $ null , $ null , $ null , $ null , $ null ) | 选择 -扩大 概要 如果 ( $ ping .已收 -ge 1) { 写主机 “见证人:$ WitnessSR经过测试可以” -前景色 黄色 } 其他 { 写主机 “见证Ping:$ WitnessSR失败” -前景色 红 } } #-次要网站- 13..16 | Foreach { $ num = $ _ ; $ newnum = “ {0:D2}” -F $ num $ 虚拟主机 = “主机名-$ newnum.vmware.com” $ VMKnet = (获取VMHostNetworkAdapter -VMHost $ vmhost 港口集团 “ 虚拟SAN *”). 名称 写主机 “从$ vmknet上的$ 虚拟主机 ping $ PrimarySR ...” -前景色 绿色 $ esxcli = 获取ESXCLI -虚拟主机 $ vmhost $ ping = $ esxcli . 网络 . 诊断 . ping (2, $ null , $ null ,$1主IP, $ vmknet , $ null , $ null , $ null , $ null , $ null , $ null , $ null , $ null ) | 选择 -扩大 概要 如果 ( $ ping .已收 -ge 1) { 写主机 “主要的Ping:$ 1主IP测试好了” -前景色 黄色 } 其他 { 写主机 “主要的Ping:$ 1主IP失败” -前景色 红 } 写主机 “从$ vmknet上的$ 虚拟主机 ping $ WitnessSR ...” -前景色 绿色 $ ping = $ esxcli . 网络 . 诊断 . ping (2, $ null , $ null ,$ WitnessIP, $ vmknet , $ null , $ null , $ null , $ null , $ null , $ null , $ null , $ null ) | 选择 -扩大 概要 如果 ( $ ping .已收 -ge 1) { 写主机 “见证人:$ WitnessSR经过测试可以” -前景色 黄色 } 其他 { 写主机 “见证Ping:$ WitnessSR失败” -前景色 红 } } #-见证站点- $ VMKnet = (获取VMHostNetworkAdapter -VMHost 目击者 港口集团 “ 虚拟SAN *”). 名称 写主机 “在$ vmknet上从$ witness ping $ PrimarySR ...” -前景色 绿色 $ esxcli = 获取ESXCLI -虚拟主机 目击者 $ Ping = $ esxcli . 网络 . 诊断 . ping (2, $ null , $ null ,$1主IP, $ vmknet , $ null , $ null , $ null , $ null , $ null , $ null , $ null , $ null ) | 选择 -扩大 概要 如果 ( $ ping .已收 -ge 1) { 写主机 “主要的Ping:$ 1主IP测试好了” -前景色 黄色 } 其他 { 写主机 “主要的Ping:$ 1主IP失败” -前景色 红 } 写主机 “从$ vmknet上的$ witness ping $ SecondarySR ...” -前景色 绿色 $ ping = $ esxcli . 网络 . 诊断 . ping (2, $ null , $ null ,$1次IP, $ vmknet , $ null , $ null , $ null , $ null , $ null , $ null , $ null , $ null ) | 选择 -扩大 概要 如果 ( $ ping .已收 -ge 1) { 写主机 “次要Ping:$ 1次IP测试合格” -前景色 黄色 } 其他 { 写主机 “次要Ping:$ 1次IP失败” -前景色 红 } #-启用Virtual SAN 写主机 “以手动模式为群集启用VSAN:$ CLU” -前景色 绿色 $ CLU = $ CLU | 组 -簇 -VsanEnabled: $真 -VsanDiskClaimMode 手册 -确认: $假 -ErrorAction 默默地继续 #-声明和标签缓存以及容量闪存设备 Foreach ( $ vmh 在 ( $ DC | Get-VmHost)) { 写主机 “为$($ vmh)查找磁盘” $ esxcli = 获取ESXCLI -虚拟主机 $ vmh 0..1 | Foreach { $ DiskgroupNum = $ _ +1 $缓存 = ( $ esxcli . 存储 . 核心 . 设备 . 清单 () | 哪里 { $ _ . 模型 -eq $ cachingSSD})[ $ _ ] $容量 = ( $ esxcli . 存储 . 核心 . 设备 . 清单 () | 哪里 { $ _ . 模型 -eq $ capacitySSD})[ $ _ ] 写主机 “在磁盘组$ Diskgroupnum中使用$($ caching.Vendor)-$($ caching.Model)进行缓存” -前景色 绿色 写主机 “使用$($ Capacity.Vendor)-$($ Capacity.Model)作为磁盘组$ Diskgroupnum中的容量” -前景色 绿色 写主机 “将$($ Capacity.Model)标记为容量” $容量标签 = $ esxcli . vsan . 存储 . 标签 . 加 (($容量. 设备 ), “ capacityFlash”) 写主机 “将存储设备添加到$($ vmhost)” $ 加 disks = $ esxcli . vsan . 存储 . 加 (($容量. 设备 ), ($缓存. 设备 )) 如果 ($ 加 disks -eq “真正” ) { 写主机 “磁盘已添加” -前景色 绿色 } 其他 { 写主机 “添加磁盘时出错:$ 加 disks” -前景色 红 } } 写主机 “在$($ vmh)上启用空间效率稀疏交换” -前景色 绿色 进阶设定 -实体 $ vmh -名称 “ 虚拟SAN .SwapThickProvisionDisabled” | 组 -高级设置 -值 1 -确认: $假 | 零 } #-Virtual SAN群集配置验证 如果 ( $ CLU .启用VSAN){ 写主机 “在$($ CLU.VSANDiskClaimMode)配置中创建的VSAN群集$($ CLU.Name)” -前景色 黄色 写主机 “现在存在以下主机和磁盘组:” Get-VsanDiskGroup | 选择 虚拟主机 , 名称 | 金融时报 -自动尺寸 写主机 “以下VSAN数据存储现在存在:” 获取数据存储 | 哪里 { $ _ . 类型 -eq “ vsan ” } | 选择 名称 , 类型 , FreeSpaceGB, 容量GB } 其他 { 写主机 “出了点问题,未启用Virtual SAN” } |
我要感谢 美光 慷慨大方,并为用于创建演示的Virtual SAN基础架构提供了闪存设备。还要感谢一位也是唯一的Alan Renouf先生,他一直希望提供帮助和合作。
-请享用
有关Virtual SAN(VSAN),vSphere虚拟卷(VVol)和其他存储和可用性技术以及vSphere Integrated OpenStack的(VIO)和云原生应用程序(CNA)的将来更新,请确保在Twitter上关注我:@冲云。