windowsserver2016系列 三:虚拟化 -...

37
Windows Server 2016 系列 三:虚拟化

Upload: doanliem

Post on 23-Feb-2018

264 views

Category:

Documents


30 download

TRANSCRIPT

Page 1: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

Windows Server 2016 系列

三:虚拟化

Page 2: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

2 / 37

Windows Server 2016 系列三:虚拟化

在《Windows Server 2016 系列一:关键变化》中,我们对 Windows Server 2016 的新特性已经有所了

解。对于决定升级到 Windows Server 2016 的组织,《Windows Server 2016 系列二:升级》必不可少。

Windows Server 2016 在虚拟化方面提供了首次登陆的容器和 Hyper-V 更新。

容器是虚拟化的未来发展方式——应用程序和服务在孤立的环境中运行,不会影响到系统。Windows

Server 2016 还为 Hyper-V 带来了显著的安全提升。

Hyper-V 更新

在最新版本中,一些 Hyper-V 特性引人注目,包括虚拟机隔离、存储弹性的提升、PowerShell 的改变和

生产检查点。

Windows Server 2016 Hyper-V 新特性抢先看

Host Guardian 是什么?如何保护 Windows Server 2016 Hyper-V 虚拟机?

Windows 容器与 Docker

微软在 Windows Server 2016 中同时引入两种不同类型的容器:Windows Server 容器和 Hyper-V 容器。

它们跟 Docker 又有什么关系呢?

Windows Server 2016 中的 Windows 容器是怎么一回事?

Windows Server 容器和 Hyper-V 容器有何不同?

专访 Docker 与微软高层:Windows 容器与 Docker

Windows Docker 对管理员意味着什么?

Windows Server 2016 中的 Hyper-V 容器有多安全?

Page 3: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

3 / 37

容器部署

在 Hyper-V Server 2016 中,Hyper-V 嵌套虚拟技术是一个新的功能。嵌套虚拟化技术可使虚拟机承载

另外一个虚拟机。这里的具体教程可以指导你如何部署 Windows 容器。

两种方式将 Windows 容器部署到微软 Azure 中

通过 Hyper-V 嵌套虚拟化技术实现 Windows 容器

当 Hyper-V 用户遇上嵌套虚拟化技术

谁来管理 Windows 容器?IT 人员表示‘我说了算’

Page 4: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

4 / 37

Windows Server 2016 Hyper-V 新特性抢先看

微软在 Windows Server 2012 和 Windows Server 2012 R2 Hyper-V 中引入了一些新的特性,使得

Windows Server 2016 Hyper-V 中的新增功能显得比较少。但是,在最新版本中也有一些引人注目的 Hype

r-V 特性,包括虚拟机隔离、存储弹性的提升、PowerShell 的改变和生产检查点。下面就介绍一下期待中的 H

yper-V 特性概况。

生产检查点

检查点,以前被称为快照,在一开始的时候就存在于 Hyper-V 中。这个功能允许管理员不需要恢复备份就

可以将一台虚拟机(VM)回退到之前的一个时间点。使用检查点带来的问题是对应用服务器不太奏效。如果

使用不当,Hyper-V 检查点可能回损坏数据库并且对应用造成严重破坏。

生产检查点也以十分类似的方式运行,除非它们使用 Volume Shadow Copy Services。当你创建或者

应用一个检查点的时候,这个过程和创建以及恢复一个备份很相似,这使管理员避免了使用检查点会发生的各

种各样崩溃问题。生产检查点在 Windows Server 2016 Hyper-V 里默认开启,但是你也可以在必要时恢复

回旧的检查点模式。

虚拟机隔离

虚拟机隔离背后的基本概念是创建一个虚拟机所有者的结构。因此这个虚拟机不可以被移动到其他的结构

去或者在其他结构中运行。隔离的虚拟机被加密以防止非授权访问 VM 内容。加密可以通过使用 BitLocker 来

实现。在新版本的 Hyper-V 中会支持虚拟 TPM,它可以允许虚拟机通过 BitLocker 加密。

存储弹性

在上一个版本的 Hyper-V 中,存储的短暂性失去连接可能会导致一个虚拟机失效。即使管理员可以使用故

障转移技术将一个失效的虚拟机转移到另一个集群的节点中去,但这也需要存储的连通性。而且有的时候故障

转移是致命的。

Page 5: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

5 / 37

举个例子,在 Hyper-V 部署环境中有一些集群节点是连接到 iSCSI 目标的,这些 iSCSI 目标会在高峰期的

时候遭遇到低带宽和间歇性的连接失效。虚拟机可能会因为超过一分钟的连接失效而摧毁掉。

存储弹性功能是设计来检查虚拟机存储连接的间歇性中断,而且在会暂停虚拟机直到存储连接恢复为止。

不过使用集群等级的故障转移技术也是一个方法。

PowerShell Direct

PowerShell 可以通过很多方法在远程 Windows Servers 上执行脚本或者 cmdlets。最知名的方法包括使

用 Invoke-Command cmdlet。管理员可以进入 Invoke-Command cmdlet,使用–ComputerName 参数,

该参数中包含远程机器的认证信息和需要运行的命令。

在上一个版本的 Hyper-V 中,可以通过使用 Invoke-Command cmdlet 来在 Hyper-V 虚拟机上运行命

令。但要这么做的前提是虚拟机需要有网络连通性。

在 Windows Server 2012 R2 里,管理员有能力复制文件到虚拟机中——即使没有网络连接性存在。复

制的过程会在没有网络连通性的情况下使用 VMBus。在 Windows Server 2016 里,PowerShell Direct 特

性也建立在这个概念上。

Windows Server 2016 允许管理员远程在虚拟机上运行 PowerShell cmdlet 或者脚本,即使虚拟机没

有网络连通性。这个过程使用了 VMBus 的功能和 Invoke-Command cmdlet。这意味着要使用 VMName

参数来替代 cmdlet ComputerName 参数。

(来源:TechTarget 中国 作者:Brien Posey 译者:肖培庆)

Page 6: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

6 / 37

Host Guardian 是什么?如何保护 Windows Server 2016Hyper-V 虚拟机?

保障数据免受他人窥探,是 IT 长期存在的一大问题。如果 IT 部门有权限访问数据,组织要如何才能保证

敏感数据的机密性?多年来,企业 IT 一直试图解决这个问题,包括最小特权访问控制和各种基于角色的访问控

制。随着组织开始考虑云计算,这类隐私问题也受到了越来越多的关注;如何保障公有云上的数据隐私?

为此,微软为 Windows Server 2016 Hyper-V 开发名为 Host Guardian(主机守护者)的新功能。H

ost Guardian 是一个服务器角色,用于提供虚拟机管理程序级别的虚拟机隐私保护。Host Guardian 采用三

种不同的功能组合来提供隐私保护。

Host Guardian 采用 Hyper-V 级的安全保护

三项功能之一是虚拟磁盘加密。微软提供的通过 BitLocker 对物理硬盘进行加密的功能已经有相当一段时

间。Host Guardian 通过在客户操作系统中启用 BitLocker,对 Hyper-V 中虚拟机的相关虚拟硬盘进行加密。

正如 BitLocker 采用物理服务器的可信平台模块芯片(TPM),BitLocker 利用虚拟 TPM 芯片对虚拟机进行加

密。

Host Guardian 的第二项功能是实时加密。虚拟机不是静态的。Hyper-V 虚拟机可以从一台主机上实时

迁移到另外一台。Host Guardian 可用于迁移时对虚拟机进行加密。

第三个功能是 Host Guardian 能阻止对虚拟机内存的访问。这样可以避免主机级别的内存提取攻击对虚

拟机数据进行访问。

微软希望 Host Guardian 能够推动云虚拟机的使用

尽管这些机制可以保护 Hyper-V 虚拟机免于管理员窥视,但如果只将 Host Guardian 作为虚拟机管理

程序级别的保密机制,就有点目光短浅了。微软已宣称 Windows Server 2016 将是第一款云操作系统。Hos

t Guardian 不仅能够确保组织内部数据中心虚拟机的隐私,还能够为公有云上的虚拟机提供隐私保障。

Page 7: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

7 / 37

当你思考微软在保护云虚拟机数据隐私的目标时,很容易看出为何微软选择设计 Host Guardian 要包含

这三点安全功能。微软需要一种方式,在无须影响云级别或数据中心级别运营的情况下,实现虚拟机级别的隐

私保障。无论虚拟机在何种平台上运行,管理员需要做的唯一事情,就是确保环境的健康稳定。管理员同样还

需要能够创建虚拟机备份。微软设计 Host Guardian 时抱着这样的思路,保障虚拟机隐私免遭入侵。

安全是需要付出代价的

Host Guardian 有两种应用方式。当管理员设置 Host Guardian 时,必须选择一个认证方式。该认证方

式可以基于硬件或基于管理员;但不能两者同时使用。

基于硬件的认证更适用于公共宿主环境。基于硬件的认证是比较复杂的认证配置类型,但同样也提供了最

大的隐私保证,因为信任植根于硬件。基于硬件的认证要求配备了 TPM 2.0 芯片和统一可扩展固件接口(UEFI)

2.3.1 或更高版本。

基于管理员的认证,更适合企业 IT。它比基于硬件的认证复杂性低,但依赖于一个可靠的活动目录环境。

Host Guardian 角色可以被用于确保虚拟机所有者的隐私。然而,这种保密是需要付出代价的。加密过程

无疑会一定程度上增加 Hyper-V 主机的开销。对虚拟机的保护同样可能导致某些特定的升级或灾难恢复操作更

加困难。还需要注意的是,不是所有虚拟机都可以用 Host Guardian 进行保护,系统要求至少是运行 Server

2012 或 Windows 8 和更高级别的版本。同样还有一些微软的文档表名,只能支持第二代虚拟机。

(来源:TechTarget 中国 作者:Brien Posey 译者:陈德文)

Page 8: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

8 / 37

Windows Server 2016 中的 Windows 容器是怎么一回事?

去年一年里,容器技术大获流行,其能够提供高可扩展性、轻量级虚拟化软件组件和完整的应用程序。容

器技术很大程度上基于 Linux 平台,目前最受关注的当属 Docker。但也因此减缓了容器 Windows 环境中的

应用。目前 Windows 管理员仍然依赖熟悉的 hypervisor 和成熟的 Hyper-V 虚拟机。

这种情况将在即将发布的 Windows Server 2016 中消失,新一代 Windows Server 将支持 Docker 容器

技术和新的 Hyper-V 容器技术。让我们来仔细看看 Windows Server 2016 对容器的支持情况。

传统 Windows 虚拟化通过安装 hypervisor 如 Hyper-V 将软件从底层硬件抽象出来。一旦运行

hypervisor,管理员可以创建私有、功能齐全的虚拟机——每个虚拟机有自己的操作系统、应用程序和其他组

件。这样,几乎任何 OS 版本和工作负载可以同时运行在同一个系统上,然后在系统之间进行迁移,无需顾虑

底层服务器或数据中心基础设施。

容器提供了另一种虚拟化方式。首先在主机上安装操作系统,再安装容器层或者容器引擎,然后把工作负

载分区到虚拟容器空间。每个容器共享一个 OS 内核、函数库和文件。这使得容器可以消除传统虚拟机中常见

的冗余操作系统引起的资源浪费。这样做的结果是实现了轻量级虚拟化,能够比传统 hypervisor 虚拟化提供

更深度的整合和跨平台移动。

Windows Server 2016 应该支持两种形式的容器技术:

1. Docker 容器通过嵌套的虚拟化实现。Hyper-V 支持创建 Linux 虚拟机,Docker 安装在 Linux 操作系

统之上来支持 Linux 容器。

2. Windows Server 2016 预计将直接支持容器——Windows Server 容器,以及其原生容器——

Hyper-V 容器。

对于 Windows Server 容器,Docker 引擎能够直接在 Windows Server 上创建和支持 Windows 容器,

每个容器可以共享共同的 Windows 进程工具箱。Hyper-V 容器更像是嵌套虚拟化:Hyper-V 首先创建一个虚

拟机,然后 Docker 引擎在 Hyper-V 环境中创建 Windows 容器。

Page 9: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

9 / 37

这看起来似乎没有任何区别,但可以提高隔离并提高安全性。因为容器共享操作系统内核和进程,如果一

个容器被破坏,这里面的恶意软件可能会感染底层操作系统,从而影响其他容器。Hyper-V 将容器隔离,阻止

容器中的活动通过操作系统影响到其他容器。

随着 Windows Server 2016 支持多个容器方法的出现,容器管理问题引起了高度关注。Docker Machine

等工具可以在云设施如微软 Azure、笔记本电脑和数据中心服务器中创建 Docker 主机。然后 Docker Machine

安装并配置 Docker 客户端,在 Windows 和 Linux 环境中启动、停止、重启、升级以及配置 Docker。Docker

Machine 是用来简化容器创建和管理的常见工具,帮助组织更好地利用资源空间,节省管理时间。

(来源:TechTarget 中国 作者:Stephen J. Bigelow 译者:杨旭)

Page 10: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

10 / 37

Windows Server 容器和 Hyper-V 容器有何不同?

容器(Container)是 Windows Server 2016 最重要的新特性之一。但它们也因为两个原因令人困惑。

首先,尽管容器在开源世界存在了很长一段时间,对 Windows 系统来说却是个新的概念。其次,微软同时引

入两种不同类型的容器:Windows Server 容器和 Hyper-V 容器。

要了解容器如何工作,你需要对服务器虚拟化有一个基本的了解。容器不同于虚拟机(VM),但它们是

一种虚拟化形式。

更强大的服务器让虚拟化成为可能

有一段时间,服务器硬件在其性能上相对适中。工作负载需要专用的硬件来运行。随着时间的推移,服务

器硬件变得更强大;许多应用程序只消耗现代服务器一小部分资源 。引入服务器虚拟化是为了更好地利用硬件,

其允许多个工作负载在虚拟机中同时运行。这些虚拟机充当隔离界限,每个虚拟机都有自己的专用操作系统、

虚拟硬盘、内存分配等。

随着时间的推移,钟摆开始向另一个方向摆动。虚拟机最初是为了提高硬件利用率,随着用户开始使用如

此多的虚拟机,硬件再次成为限制因素。一个物理服务器在耗尽资源前只能运行那么多的工作量。

随着服务器虚拟化的成熟,虚拟机监控程序供应商寻找各种方法来增加物理服务器能够容纳的虚拟机数量,

比如引入精简配置的虚拟硬盘和内存过量使用等功能。容器被认为具有类似功能,因为它们可以帮助服务器容

纳额外的工作负载。

容器消减虚拟化体积

这就提出了一个问题:虚拟服务器和容器之间有何不同。虚拟服务器被设计为有独立操作系统、应用程序

和硬件资源。如果一个虚拟机中发生问题,这个问题不会影响到其它虚拟机,因为虚拟服务器充当隔离边界。

虚拟机的问题是它们比真正需要的更多。以一个应用程序服务器为例,该应用程序服务器包含应用程序和

一个专用的操作系统。这个操作系统消耗存储空间、内存、CPU 周期和其它硬件资源。虽然对于运行少量虚拟

Page 11: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

11 / 37

机的主机来说,这可能不是一个问题,但是想象一下,如果一个主机必须运行大量的虚拟机并且所有的虚拟机

都运行相同的操作系统呢?

容器设法通过所有的容器共享使用一个操作系统来解决大小问题。容器类似于一个虚拟应用程序,它存储

应用程序的二进制文件和配置文件,但只存储应用程序修改的操作系统组件,如注册表项或特定于应用程序的

驱动程序。

为什么微软要提供容器

为什么微软推出 Windows Server 容器和 Hyper-V 容器?这个问题有很多不同的答案,但归根结底是信

任问题。

当运行 Windows Server 容器,容器使用主机操作系统。这对受信任应用程序的运行是没有问题的,但运

行不受信任的应用程序是不合适的。Hyper-V 容器提供一个额外的隔离边界,每个容器都有自己的操作系统二

进制文件的副本。唯一能真正区别 Hyper-V 容器与 Hyper-V 虚拟机的是,Hyper-V 容器可以用 Docker 管理,

而 Hyper-V 虚拟机不能。

容器是一个通过共享操作系统二进制文件提高效率的机制。这种方法不仅能提高主机的性能,这也使得补

丁管理更加容易,因为有更少的操作系统要打补丁。

(来源:TechTarget 中国 作者:Brien Posey 译者:Raymond Lee)

Page 12: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

12 / 37

专访 Docker 与微软高层:Windows 容器与 Docker

在 Linux 容器管理领域,Docker 横空出世,但是在过去一年里,除了开源项目,该公司还与微软展开合

作,将这些功能集成到 Windows 环境。双方在下一个 Windows Server 版本中展开全面合作,为用户提供

Windows Server 容器和 Hyper-V 容器,预计在 2016 年某个时候正式推出。

Docker 公司联合创始人兼 CTO Solomon Hykes 和微软 Azure CTO Mark Russinovich 与

SearchWindowsServer 进行了一次谈话,双方表示将加强合作伙伴关系。在本次报道的第一部分,两人讨论

了将 Docker 移入 Windows 平台的挑战以及拥挤的容器编配产品市场。

你能跟我们介绍一下微软和 Docker 之间的伙伴关系是如何建立起来的吗?

Hykes:我们开始做 Docker 的时候专注于真正帮助开发人员构建新的应用程序。我们称之为分布式应用

程序,它们跨越许多机器,在云中随处运行——7 天 24 小时在线。这就是这种新的范式产生的原因,同时我

们发现根本没有这样的工具来帮助开发人员进行构建。我们开始利用 Linux 容器,并且关注 这些应用程序的

某一特定的方面,久而久之,我们逐渐扩大了这些工具的范围,最终,开发人员使用的平台上就有了某些通用

工具。在这种显而易见的情况下,很快你就想尝试去支持 Windows 平台,让开发人员掌控自己的整个平台。

对于企业来说,一些应用程序运行在 Linux 服务器上,另一些运行在 Windows 系统上这是非常常见的情

况。这给了我们很多动力来尝试并且将 Docker 的工具以及开发者的相关经验应用在这两个平台上,这是与微

软建立合作伙伴关系的真正的起点。

微软有一个专门与开源社区进行合作的团队,主要工作是将 Docker 所有的工具移植到 Windows 上,熟

练掌握未来 Windows Server 上新的容器技术。一旦新版本发布,我们会达到这样的目标:使用本地 Docker

工具,你可以同时在 Linux 和 Windows 上成功构建分布式应用程序。对此我们感到非常兴奋。

在两个环境之间移动时,用户会遇到一些挑战么?

Hykes:从技术观点来说,我希望一切顺利。将来会有一个发布计划表,比如实验版本发布,测试版本发

布等等,但关键是起点的高度远不及传统的虚拟化。

Page 13: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

13 / 37

实际上,我们并不需要任何特定成分来同时支持 Windows 和 Linux 平台。这里的关键是,分布式应用程

序的一些组件只适用于 Windows,而另一些组件只支持 Linux,但这是 OK 的,因为这个应用程序是所有这些

组件的总和。我们并没有试图让 Windows 看起来更像 Linux 或者让 Linux 看起来更像 Windows——这太不

可思议了。相反,我们目前采取的方法是将每个平台的强项展示给开发人员,然后让他们自己选择,这样就好

办多了,因为他们有共同的工具。

Russinovich:我们在 Windows Server 上所做的就是实现与 Linux Docker 容器相同的基础技术,与

Docker 合作以确保所有的 Docker API 能够同开源社区一样运行良好。例如,你可以将一个 Docker 客户端指

向一个 Windows 主机,并且使用相同的 API,相同的命令来部署 Docker 容器,就像指向一个 Linux 主机和

部署 Linux 容器一样。

是否会担忧 Docker 容器对 Windows Server 或 Hyper-V 的销售量造成侵蚀?

Russinovich:容器是非常强大的工具,因为可以创建基于微服务的应用程序,我们拥抱这种技术,甚至

是在微软内部。Docker 是一个奇妙的工具,它能更有效地部署和管理这些应用程序,所以我不认为有担忧存

在。相反,我们更应该尽快帮助开发人员在 Windows 上使用这项技术

和一些竞争对手不同,微软已经决定不开发自己的容器编配工具。Azure 中是否有望出现相关工具?还是

会保持更多的不可知?

Russinovich:在这一点上,我们支持很多的编配引擎,比如谷歌 Kubernetes 就是其中一个,还有其他

像 Mesos 和 Swarm 工具用来部署 Azure。我们想让所有使用这些编排引擎的用户能够愉快地使用 Azure。我

们已经与谷歌合作以确保 Kubernetes 顺利运行在 Azure 上。我们还宣布了自己的微服务应用程序平台即服务

(PAAS)架构,叫做 Service Fabric。我们希望随着时间的推移,能够充分地合并容器技术,但是这是一个更

高层次的应用平台——高于低级编排,比如 Mesos 和 Kubernetes。

Hykes:这个过程很少有构建模块,我们不会试图去重新发现和重新创造 Linux 容器。

目前有这么多其他厂商进入容器编配领域,您会担心 Docker 被挤出来吗?

Hykes:分裂永远是一个风险。Docker 工具的存在是有一定原因的。这些工具的存在就是为了避免分裂,

因为分裂对开发者不利,会让他们的生活非常悲惨。我想说,我们一直在布道接口的统一。显然,我们不能告

诉供应商应该做什么。我们只是觉得应该要避免碎片,并且让人信服。我想说,微软对此一直非常理解,积极

拥抱能够避免分裂的解决方案。

Page 14: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

14 / 37

编配有三层:集群,有大量的机器;成分,大量的容器一起工作;然后是将这些连接在一起的网络。拥有

了这三个构建模块,就有了一个编配的解决方案,而且 Docker 堆栈包含了针对这三层的相关工具。

(来源:TechTarget 中国 作者:Trevor Jones 译者:杨旭)

Page 15: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

15 / 37

Windows Docker 对管理员意味着什么?

微软最近的发展使得大多数传统的 Windows 系统管理员好奇他们究竟能在历史版本的操作系统上进行多

大程度上的异构操作,并且所需的 IT 人员也超出了原有的规模限制。Windows Docker 正在袭来,在 Azure

云平台上运行的 Linux 虚拟机,即将到来的 Nano Server 没有用户图形界面且需要熟悉 PowerShell,传统的

客户端-服务器架构正在渐行渐远。

Linux 和开源软件曾被认为是公司的克星,微软已经应用一些新的技术,帮助应用程序开发以及云计算能

够更加吸引客户。对更高效率的追求已经促使微软在 Windows Server 2016 中加入了对容器的支持,预计将

在 2016 年下半年实现。容器可提供更高的资源利用率以及更快的应用程序开发,然而这对于大多数 Windows

系统管理员意味着什么?容器的管理功能是否已经开发了相关必要的工具来支撑当前的工作量?

我们就 Windows Docker 容器对于应用虚拟化应用程序的 IT 管理员的意义的议题咨询了

SearchWindowsServer 的咨询委员会成员。

Brien Posey

容器代表着一种新的,更具效率的应用程序运行方式。因为在单一服务器上允许运行多个任务,虚拟服务

器已变得更加主流,然而它们也有相当低效率的一面,因为每个虚拟机都使用自己专用的操作系统。容器通过

允许 OS 组件来提升效率,在某些案例中,可以被多个容器化的应用程序组件共享使用。要进行这些共享无需

在不同的容器独立边界间进行折衷。

起初,对于 Windows 管理员最大的挑战在于学习曲线(学习投入的时间与成效的关系曲线,译者注)。

容器需要管理员从全新的角度去思考应用程序、操作系统以及虚拟机。如果不熟悉容器相关的技术,在进行转

换时几乎会面临各种挑战。例如,管理员需要重新思考备份的办法,寻找并解决问题的方法甚至是工作负载的

可扩展性。

一旦 Windows 商店通过了学习曲线最初的阶段,容器化所面临的最大挑战即是管理问题。即便已经存在

为 Windows 容器准备的工具,在他们变得好用之前还需要一些时间。

Page 16: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

16 / 37

一些人预测容器最终将彻底取代服务器虚拟化。我并不认为虚拟机管理程序会很快消失,但其所承担的角

色可能会发生变化。相比于当前的虚拟机主机,虚拟机管理程序最终很可能被更多地运用于容器的主机。

Trevor Pott

容器对于普通 Windows 管理员很可能意义非凡,这要取决于微软如何为组件办法和设定许可证。

操作正确的话,容器可以成为 Windows 已安装应用提供新的安装方式。相对于操作系统中散乱的库和数

据,应用程序所需的每一个单独的文件和注册表项,所有内容都会被限制在其自身的容器内部。安装应用程可

以简单到将容器复制过来并注册就可以完成,卸载过程则是简单到反注册容器并删除其自身就可以。传统的应

用程序安装往往造成其与 OS 之间产生千丝万缕的关系,因此容器这一特性非常重要。开发人员不遵守微软的

操作规程,而微软的操作规程经常发生变化。容器化应用程序间的通信也是依靠传统网络而非操作系统的内部

消息进行。这意味着其通信在应用程序层面的传递可能被防火墙拒绝、被调查,以确定是否存在安全性问题。

许多人认为使用 PowerShell 就足够了,但绝大多数 Windows 管理员为小公司工作更喜欢图形化的用户

界面。除非出现比过去几年微软所使用的更好的用户界面,否则喜欢使用命令行和脚本的管理员们还是不会买

账。

当前,对拥有自己的室内开发团队,开发室内应用程序的公司来说,容器是一种很方便的封装应用程序的

方式。该方式对于需要大规模操作的运营团队也许很有帮助,但我尚未发现此类团队有使用微软.产品的先例,

因为从经济意义上说不可行。

管理员们要重点关注的是容器并不是虚拟化的替代方案,不理解容器本质的人才会认为它是虚拟化的替代。

容器是应用程序封装的方式,虚拟机管理程序则是操作系统封装的方式。他们之间是有很大差别的。

当我封装操作系统时,我会把整个环境都进行打包,包括所有的库、内核版本、配置、监控、网络配置等

等。操作系统有很多灵活部件,调整它们中的一个就可能影响到应用程序的运作方式。

容器自身拥有一部分,并不是很多的网络元素。它们能将部分而非全部的与库关联的文件封装到应用程序

中。它们不能封装操作系统的内核以及其他许多操作系统层面的环境变量。

如果你有 10000 个应用程序都需要相同配置的运行环境,就意味着你需要在相同的操作系统上运行 10000

个容器。然而,如果你的 10000 个应用程序需要运行在 8 种不同的环境之上,在 8 种不同的虚拟机上运行它

们,并将你的应用程序在对应的操作系统上按类型划分到不同的容器中即可。

Page 17: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

17 / 37

尽管微软做出了很多努力,但没有数据中心是完全相同的。即使不同的公司运行相同的版本的内置操作系

统,其配置文件的内容也是多种多样,并且几乎所有的公司都运行着多种版本的操作系统。这说明数据中的不

同环境是司空见惯并且是可预见到的。因此虚拟机管理程序并非随处可见。

然而容器允许更加容易地封装应用程序,因此站在运营团队的立场上说,理性的选择是将所有内容打包,

至少是将在相关虚拟机的操作系统运行的应用程序部署到容器中。在容器中部署的应用程序可共享操作系统的

配置参数。最终建成的数据中心也许未必是最具有效率的,但却是在理论上的完美效率和现实世界的易于管理

中间实现平衡折衷。

Michael Stump

微软对容器以及 Linux 系统的支持,使得许多传统的 Windows Server 管理员因这一“好消息”而抓破了

头。

最近的三年间,我们听闻了容器将接管数据中心和云领域的消息,而传统技术,诸如 x86 架构虚拟化,将

成为 21 世纪的主流框架。这说明不论你选用何种虚拟机管理程序来组件和定义你的数据中心,你的世界都面

临着自上而下的变革。VMware 和微软很快通过自己的虚拟机管理程序为你的商业容器提供理想平台的方式占

领了市场。

2014 年 10 月,微软与 Docker 合作将最有名的容器系统带到了 Windows 平台。当时,微软推出了 Hyper-V

容器和 Nano Server。Azure 从 Azure 市场中带来了部署 Docker 管理功能虚拟机的能力。突然间,好像微软

成了在容器领域的“赌博公司”,且原生云应用程序成为 IT 界的一等公民。

同时,许多企业级消费者开始担忧即将到来的 Windows Server 2003 版本服役期的结束,他们聚集在一

起意欲发展云策略并完全忽略容器的概念。从好的方面来看,例如,在数据中心物理和虚拟基础设施两方面投

入了较大资本的企业级用户,并不急于寻找更快的方式来更换交互服务器。容器能够解决的问题,当今很多企

业都还没有遇到。

对于微软的制作组来说,(容器)并非解决当下的问题,而是成为可以解决未来问题的可选平台,这是值

得称道的。从支持 Windows Docker 和 Nano Server 这样的解决方案的介绍中发现,并没有终结旧式方法。

Windows 管理员能够使用 Server Manager,或甚至是“计算机管理”中熟悉的微软管理控制台,来预见未

来。事实上,借助最新的 Windows Server 2016,管理员和开发者可以和平共处。管理员可以轻松地回顾事

件日志并部署不定,而开发者可以操控微小虚拟机中的临时军团。

Page 18: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

18 / 37

容器最终将进入企业级应用,部分原因要归功于微软将该技术作为未来 Windows Server 操作系统核心功

能这样的霸道的推介。但就目前而言,至少,容器对于操作系统有 n-1、n-2 或 n-3(n 代表最新一代)代差

的客户来说还是具有风险的新技术。

Tim Warner

Docker 容器的概念通常会使 Windows 系统的管理员非常紧张,特别是那些之前在 Linux 和免费、开源

软件领域没有经验的管理员。然而,进一步的调查发现,容器化领域与应用程序虚拟化之间存在许多相同点。

例如,许多 Windows 系统管理员使用如微软 App-V, Citrix XenApp 或 VMware ThinApp 这样的工具

来封装和发布独立的应用程序,并且沿用已久。

想象某个企业最近将所有用户都升级到了 Windows 10,结果发现核心的业务网页应用程序与微软 Edge

浏览器不兼容。应用程序虚拟化意味着管理员可以分发虚拟化实例,结果,使用 Internet Explorer 8 的用户现

在能够使用完全不兼容的应用程序。

因此,应用 Docker 容器时我们也是同样的想法:快速部署独立应用程序的能力。微软正在即将到来的

Windows Server 2016 操作系统中借助 Windows Docker 容器进一步探讨这一概念。

基于 Linux 的容器已几乎完全由需要快速建立和拆除开发环境的应用程序开发人员所使用。在 Windows

Server 2016 中,我们可以使用容器迅速释放容器化的、独立的 Windows Server 2016 实例。

Windows Server 容器比全 Hyper-V 或 VMware 虚拟机更加轻量和灵活。考虑纳米服务器—骨干

Windows Server 的安装选项,所占用的安装磁盘容量不超过 650MB,看到微软领先的是:未来数据中心的

主机服务器与尽可能薄的操作系统/管理程序层,部署同等微型虚拟机或容器。

Nano Server 选项更加有趣。当组建一台物理主机并安装 Nano Server,包括 Hyper-V 和容器封装,而

你拥有比 ESXi 更加轻便的管理程序层。依次,这一 Nano Server Hyper-V 能够管理厚虚拟机,当业务需要时,

需要选择一种可供选择的业务需求的 Windows Server 容器。

简而言之,对我来说似乎希望保持从事相关工作的 Windows 系统管理员理应努力掌握 Windows

PowerShell、Docker 容器工具以及 DevOps 算法。技术发展太快,很容易被落在后头。

(来源:TechTarget 中国 作者:Tom Walat 译者:朱文浩)

Page 19: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

19 / 37

Windows Server 2016 中的 Hyper-V 容器有多安全?

容器技术凭借着其轻量级的资源需求、快速部署和巨大的可扩展性优势吸引 IT 行业的重大关注。不过其中

一种最流行的容器引擎是基于 Linux 平台的 Docker,它正努力去解决一些重要的安全问题。

Docker 的安全问题起源于容器实例之间隔离的缺失。从最简单的角度来看,每一个容器都共享同一个宿

主 OS 内核,函数库和文件。如果一个恶意程序或者其他安全事故突破了其中一个容器而且访问到根 OS,那

么这个 OS 下面运行的所有容器都有可能受到危害。一个容器在运行的时候可以直接和宿主内核进行通信,而

且 Linux 也不会对主要内核进行拆分子系统或者子设备,也不会去保护他们。这意味着如果你可以和内核或者

设备进行通信的话,你就有可能危害整个系统。

尽管 Docker 承诺了未来会发布安全方面的改善,下面还是给大家介绍一些保护 Hyper-V 容器的策略。

1. 限制容器使用你了解和信任的机构的工具,避免使用任何你在 Internet 上找到的有趣的工具或者其他

的东西。

2. 勤奋地测试和应用 Linux 补丁和安全更新。相信 OS 支持,就像 Red Hat Enterprise Linux 可以帮助

你找到和修复漏洞一样。

3. 有可能地使用非 root 的身份来运行容器,而且一旦可以的话就去除 root 权限。不管怎样,都要想象容

器中的 root 权限是和容器外的 root 权限是一样的。

Windows Server 2016 中的 Hyper-V 容器使用了 Hyper-V 来首先创建一个 VM 作为隔离。一旦 VM 建

立好了,可以安装 Linux OS 和 Docker 引擎来支持容器运行。这是一种嵌套虚拟化的方式。如果容器和之上

的 Linux OS 受到危害,那么整个安全问题只会影响到 Hyper-V VM 内部。

虽然容器这个概念已经存在很多年了,但是 Docker 引擎引起了人们对这项技术的新的兴趣。微软希望它

的 Windows Server 2016 使用原生的容器和嵌套虚拟化,把容器从 Linux 部署环境迁移到 Windows 的环境

中。

Page 20: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

20 / 37

Windows Server 2016 也承诺引入合理化管理和改进容器实例间的隔离,帮助组织拥抱和扩张容器的部

署。IT 员工应该很快就可以在技术预览版本尝试 Hyper-V 容器,并且为采用 Windows 和 Docker 容器做好计

划。

(来源:TechTarget 中国 作者:Stephen J. Bigelow 译者:肖培庆)

Page 21: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

21 / 37

两种方式将 Windows 容器部署到微软 Azure 中

Docker 是一种应用虚拟化技术,在免费的开源软件社区中大受欢迎。

在 Web 服务器及数据库服务器之间,Docker 容器需要设置指定的应用程序,在一个相对独立的环境下运

行 Docker 容器及其附属应用。

DevOps 工程师和程序员非常喜欢使用 Docker,因为它们可以在短短的几秒钟的时间内影响整个多容器

环境。好像运行在内部专用硬盘上一样,容器有自己的网络意识和行为。当不再需要容器时,它可以自动停止,

并不会有太久的延时。

微软公司 Enterprise Cloud Group 架构主管兼技术研究员 Jeffrey Snover 和 Azure 首席技术官 Mark

Russinovich 对免费、开源软件通用化以及 Docker 容器特殊化非常感兴趣。

在 Windows Server 2016 Technical Preview 4(简称 TP4)中,Docker 运行时间与 Windows Server

操作系统(简称 OS)集成。Windows 和 Linux 核心程序具有根本性的不同,因为我们不能在 Windows 容器

主机上运行 Linux 容器。相反地,微软本身就已经提供了 Windows Server 容器。本文将会介绍在 Windows

Server 2016 TP4 环境中如何从 Azure 虚拟机(简称 VM)上部署 Windows 容器。

创建容器承载 VM

毫不奇怪,我们将承载 Docker 运行环境及关联容器的服务器或者 VM 称为容器主机。尽管我们可以通过

下载 TP4 ISO、遵循一些相当繁琐的安装说明来设置内部容器主机,但是我认为,通过 Azure 公用云技术可以

更容易地实现以上操作。

如果你还没有微软的 Azure 账户,那么先注册一个免费试用版。你将会获得 200 美元的服务额度,可以

在一个月内免费访问 Azure。

登陆 Azure 门户网站,利用配有 Containers Tech Preview 4 图像的 Windows Server 2016 Core 技术

创建 VM,如图 1 所示。

Page 22: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

22 / 37

图 1. 微软在 AzureCloud. ALT 中加入启用容器的 Windows Server 2016 图像

如图 2 所示,在 Azure 创建容器主机后,点击“Connect”下载一个预先设置好的 Remote Desktop

Protocol (RDP).rdp 文件。

Page 23: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

23 / 37

图 2. 使用 Remote Desktop Protocol 连接到 Azure 中的容器主机 VM

关于 Azure 的 VM,我们还应该注意以下几点:

VM 运行在 Windows Server 2016 TP4 的 Server Core 模式中,这就意味着不存在 GUI。

由于 Docker 运行环境所限,因此 Windows 容器是属于预安装类型。

图像包含了 Server Core 配置中预先设置的运行 Windows Server 2016 TP4 的 Docker 容器。

轻松获取命令

接下来,打开 RDP 连接,连接到容器主机 VM 上,你可以在 cmd.exe 提示下找到自己所在的位置,键入

Powershell,进入 PowerShell 管理平台会话窗口。首先,让我们来先验证下是否已经安全了容器功能,如图

所示:

然后,我们要确定 Docker 服务确实存在并已经开始运行,如图所示:

Page 24: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

24 / 37

两方面都做到的话那是非常不错的了。我们可以通过以下两种方式来管理 Windows Server 容器:

本地 Docker 指令

容器 Windows PowerShell 模块

对于在开源环境中接触过 Docker 的人来说,他们非常喜欢使用本地指令,因为它与在 Linux 环境中运行

方式完全一致。然而,我建议大家使用 PowerShell 指令,因为我们现在已经对 PowerShell 语法非常熟悉,

使用起来也更容易熟练。同样的,根据我多年经验,我发现 PowerShell 指令要比本地 Docker 指令可信性更

强。

让我们快速浏览一下 Containers 指令,看看究竟有什么可用性:

Get-Command -Module Containers | Select-Object -Property Name | Sort-Object -Property

Name

Name

----

Add-ContainerNetworkAdapter

Add-ContainerSharedFolder

Connect-ContainerNetworkAdapter

Page 25: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

25 / 37

Disconnect-ContainerNetworkAdapter

Export-ContainerImage

Get-Container

Get-ContainerHost

Get-ContainerImage

Get-ContainerMemory

Get-ContainerNetworkAdapter

Get-ContainerProcessor

Get-ContainerSharedFolder

Get-ContainerStorage

Import-ContainerImage

Install-ContainerOSImage

Move-ContainerImageRepository

New-Container

New-ContainerImage

Remove-Container

Remove-ContainerImage

Remove-ContainerNetworkAdapter

Remove-ContainerSharedFolder

Page 26: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

26 / 37

Set-Container

Set-ContainerMemory

Set-ContainerNetworkAdapter

Set-ContainerProcessor

Set-ContainerSharedFolder

Set-ContainerStorage

Start-Container

Stop-Container

Test-ContainerImage

Uninstall-ContainerOSImage

创建 Windows Server 容器

在 Docker 术语中,容器代表一种容器图像实例。依次地,我们可以将容器图像看作为虚拟化 OS 和应用

程序的一种蓝图。

我们可以通过 Get-ContainerImage 浏览 VM 的预设容器图像;

Get-ContainerImage

Name Publisher Version IsOSImage

---- --------- ------- ---------

WindowsServerCore CN=Microsoft 10.0.10586.0 True

正如你看到的那样,目前我们有一种独立的 Windows Server OS 图像,称之为 WindowsServerCore。

我们将会使用 New-Container 来创建一种核心容器,并设置这种图像为模板:

Page 27: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

27 / 37

New-Container -Name 'core1' -ContainerImageName 'WindowsServerCore' -SwitchName

'Virtual Switch' -RuntimeType Default

Name State Uptime ParentImageName

---- ----- ------ ---------------

core1 Off 00:00:00 WindowsServerCore

我想详细地讨论下之前代码的两种不同的参数。首先,-SwitchName 参数会将容器绑定到容器主机的

Hyper-V 虚拟交换机上。

虚拟交换机非常重要,因为它可以使容器、主机以及其他方面实现交换、互通。我们可以进行以下尝试:

$switch = Get-VMSwitch -Name 'Virtual Switch'

$switch.NATSubnetAddress

172.16.0.0/12

我们可以从更深层次的角度看到,虚拟交换机在 172.16.0.0/12 地址范围内可以使用 Network Address

Translation 技术。这样,我们就可以期待容器可以拥有一个 172.16.0.0/12 IPv4 地址了。

其次,New-Container 命令的-RuntimeType 参数指定容器的隔离级别。在这种我们可以有以下两种选

择:

默认类型:这就是“普通的”Windows Server 容器隔离,其前提是,假设容器与主机之间存在一种高度

的信任关系。

Hyper-V 类型:这需要一种相对独立的容器环境,适用于完全独立、安全需求高的容器。

注意,微软的 Azure 并不支持 Hyper-V 容器。然而,当本地服务器运行 Windows Server 2016 TP4 时,

你便可以部署这种类型的容器。我曾将遇到过更复杂的问题,但是这也在我的意料之中,因为此时 Windows

Server 2016 和 Docker 集成还处在未完成的状态,十分不稳定。

在 Windows 容器中工作

Page 28: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

28 / 37

Windows Server 2016 在默认状态下是不会启动新容器的。我通过以下手动方式来调用 Start-Container:

Start-Container -Name 'core1'

正如你所期待的,采用与 Get-ContainerImage 查看容器图像一样的方法,我们通过 Get-Container 查

看容器:

Get-Container

Name State Uptime ParentImageName

---- ----- ------ ---------------

core1 Running 00:00:10.4520000 WindowsServerCore

通过 PowerShell 远程命令,我们可以与容器进行互动。首先,让我们通过 Enter-PSSession 进入到容器

中:

Enter-PSSession -ContainerName 'core1' -RunAsAdministrator

[core1]: PS C:\Windows\system32>

现在,我们所发出的任何一条指令都会进入到 core1 中,而不是容器主机中。例如,我们一起检查下容器

的 IPv4 地址:

[core1]: PS C:\Windows\system32> Get-NetIPAddress | Select-Object -Property IPv4Address

IPv4Address

-----------

172.16.0.2

正如我们所疑虑的那样,容器的 IP 地址是通过虚拟交换 NAT'ed 到主机上的。键入“Exit”,从容器中退

出,返回到主机中。

Page 29: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

29 / 37

通过使用 Invoke-Command,我们将指令发送到容器中:

Invoke-Command -ContainerName 'core1' -ScriptBlock { Get-Service -Name Server }

Status Name DisplayName PSComputerName

------ ---- ----------- --------------

Stopped LanmanServer Server core1

如果你曾经使用过 Invoke-Command,那么你很有可能会习惯通过-ComputerName 参数来指定目标计

算机。在 Windows Server 2016 中,新的-ContainerName 参数可以帮助我们锁定目标容器。

清理环境

通过停止容器来完成本次测试:

Stop-Container -Name 'core1'

然后,我们删除这个容器:

Remove-Container -Name 'core1' -Force

关闭 RDP 会话窗口,返回到 Azure 门户网站。如图 3 所示,确保已经关闭 VM,避免一些超额费用,或

者更早的消耗完 Azure 信用额度。

Page 30: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

30 / 37

图 3. 如果你没有使用 Azure 服务,确保已经将其关闭,避免产生额外费用

(来源:TechTarget 中国 作者:Tim Warner 译者:邹雅玲)

Page 31: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

31 / 37

通过 Hyper-V 嵌套虚拟化技术实现 Windows 容器

2016 年,你将会经常听到 Hyper-V 嵌套虚拟技术这个术语。这不仅仅是因为在 Hyper-V Server 2016

中,它是一个新的功能,还因为它对另外一项越来越受欢迎的技术具有重大影响。

在虚拟机进程中,虚拟机监控程序运行在物理硬件上,而虚拟机运行在虚拟机监控程序之上。嵌套虚拟化

技术可使虚拟机承载另外一个虚拟机。在将来很长一段时间内,该类型的虚拟化技术至少在 Windows Server

和 Hyper-V 环境中是可能实现的。

但在现在的 Windows Server 2016 Hyper-V 环境中,在虚拟机上运行的服务器可以承载其他 Hyper-V

虚拟机,并且还可以添加第二个虚拟机,或者嵌套虚拟化层。嵌套虚拟化技术已经在虚拟监控程序(VMware)

的支撑下存在一段时间了,所以将嵌套虚拟化技术添加到 Windows Server 2016 环境中并不代表技术的重大

突破,而是缩小其他虚拟化产品与 Hyper-V Server 2016 的特性差距。

嵌套虚拟化技术有几个好处。为了避免将生产网络用于操作实验,组织者通常能够更加简单地部署复杂的

网络和服务器基础设施测试和演示环境,并且,由于承载模拟或者测试的虚拟机自身能够部署访客虚拟机,因

此在培训环境中可以采用更好的模拟产品部署方式。

Hyper-V 嵌套虚拟化技术为容器创造了条件

Hyper-V 嵌套虚拟化技术最大的好处在于支持容器技术。容器在最近几个月已发展相当普遍,其提供了一

种新型的虚拟机,这种虚拟机在开发和部署应用程序时具有更少的消耗和更大的灵活性。

容器是一种新型的虚拟机,这种虚拟机在某些方面并不像传统虚拟机那么孤立。运行在一台主机上的全部

容器资源——操作系统文件、目录和运行服务,都是共享的。这将带来很高的效率,即假如你在主机上运行三

个不同的容器,这些容器作为访客都在运行相同版本的 Windows Server,你只需要一个 Windows 目录的副

本就可以了。这种共享可以减少消耗,使容器更加简化,相对于运行孤立、不分享任何东西和有更多重复操作

的传统虚拟机来说,在每台服务器上就会有更多的空间来运行容器。

容器对于管理员意味着什么?

Page 32: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

32 / 37

Windows 管理员在多方面受益于容器,或许其中最主要的方面就是其提供了一个思维框架,开发者可以

围绕它接近实际运行的代码。这意味着开发者不仅可以编码整个应用程序,还可以建立一个定制版本的代码运

行环境。开发者首先创建出容器系统镜像,这些镜像文件然后被输送给管理员。这种容器运行时,本质上同访

客在主机上的操作相同,并且还能以相同的方式,快速、简单地处理更新。每一个容器系统镜像可以工作在整

体应用程序中非常小的一部分,这样就会将应用程序组件化,其在微服务导向的环境中的实现会更加简单。

从另外一个角度来看,使用容器提高了开发者编写工作代码的责任,这些工作代码应用到工作环境中需准

确无误。使用容器还可以减少业务运作与 IT 之间的不和谐。由于工作在原始的服务器环境,开发者可能无法实

现某些期望的工作环境配置,因为他们没有能力去改变生产环境来适应这些配置。而通过容器,管理员就可以

在验证代码是否可以工作在某种服务器配置上少花些的时间,在管理总体基础设施和平台上多花一些时间。

如何管理容器

微软的容器管理工具主要为 Docker 公司的 API 工具和其他一些工具,Windows Server 容器是 Docker

公司首要开源项目中的一部分,并且 Windows Server 容器通常被认为在功能上是和 Docker 容器一样的。所

以一旦 Windows Server 2016 发布,可以预计,Docker 工具和实用程序就可以管理 Windows Server 容器。

目前仅有 PowerShell 命令集,但很明显,未来微软将会有更多的工作投入到该领域。

那么 Docker 如何才能适应这种情形呢?为了控制已经快速成为工业标准的容器,Docker 提出了 API 工

具“管理层”和引擎,其源代码是开源的,并且被广泛应用。其中可以被任何人应用的 Docker Hub 就是一个

真正的市场型应用程序存储库,这些应用程序就运行在 Docker 容器之中。

VMware 在对容器的支持方面遥遥领先。它有一个很好的产品,叫做 vSphere Integrated Containers,

该产品可以与 Docker 产品结合使用。在这方面,相对与微软的那些工具,这些工具更易用也更成熟,但这些

工具要工作在 Linux 容器中。

(来源:TechTarget 中国 作者:Jonathan Hassell 译者:周立伟)

Page 33: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

33 / 37

当 Hyper-V 用户遇上嵌套虚拟化技术

表面看来,嵌套虚拟化技术似乎并不能在生产环境当中发挥任何重要作用,那么究竟应该在哪些情况中使

用嵌套虚拟化技术呢?

嵌套虚拟化是 Windows Server 2016 Hyper-V 推出的诸多新特性之一。借助于这种全新特性,管理员可

以对 Hyper-V 主机进行虚拟化,并且在虚拟机当中嵌套运行 Hyper-V 主机和及其附属虚拟机。尽管这是一种

非常有趣的创意,但是用户还是需要认真考虑这种特性在真实生产环境当中能够发挥哪些作用。

坦白来说,嵌套虚拟化技术可能并不会为生产环境带来任何直接好处——至少现在还不能,但是这并不意

味着嵌套虚拟化技术毫无价值,也许未来它能够发挥更为重要的作用。如果你在虚拟化环境当中运行大量域控

制器以及一些应用程序服务器,那么嵌套虚拟化技术也许并不能为你带来任何帮助。

那么嵌套虚拟化技术究竟能够在哪些环境当中发挥作用呢?下面是三种潜在使用情况,当然也许还有更多。

首先,也是最为常见的使用情况是利用嵌套虚拟化技术搭建开发环境或者测试环境。通常开发人员和 IT 部

门需要在虚拟化环境当中完成测试工作。过去,需要使用专用的物理服务器才能够完成这项工作,因为需要在

物理服务器当中安装 hypervisor,之后按照需求创建虚拟机。

使用这种方式的问题在于成本过高。IT 部门可能并没有足够的预算为开发/测试环境购买专用硬件。即便

预算方面不存在问题,如果硬件使用率很低,也很难证明专用服务器的必要性。

嵌套虚拟化技术可以解决这种问题,它允许 IT 部门在独立环境当中创建开发/测试虚拟机,并且不会产生

任何专用硬件开销。企业可以在一个单独的虚拟 Hyper-V 服务器当中搭建完整的开发/测试环境。确实,这台

运行 Hyper-V 服务器的虚拟机需要大量内存、虚拟 CPU 和存储才能够保证虚拟化环境高效运行,但是 Hyper-V

能够支持大规模虚拟机。即便是这样的大型虚拟机也不会消耗过多的硬件资源,因此不用担心需要购买额外的

硬件服务器。

使用嵌套虚拟化搭建测试环境

Page 34: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

34 / 37

嵌套虚拟化技术的第二种潜在用途就是培训。企业在进行 Hyper-V 培训过当中肯定不希望一个没有任何经

验的管理员操作生产环境当中的 Hyper-V 服务器。但是可以使用嵌套虚拟化技术搭建一个全新环境,让没有经

验的管理员“安全”学习 Hyper-V 的各种原理。

即便企业没有任何招聘入门级别管理员的计划,嵌套虚拟化技术在培训方面也能够发挥很大作用。假设

2019 年的某个时间,微软发布了 Windows Server 2016 R2——这只是一个假设而已。企业想要将 Hyper-V

服务器升级到最新版本,但是在实际生产环境当中应用之前需要测试整个升级流程。过去,hypervisor 升级测

试需要使用专用硬件。事实上,实验室会产生大量的硬件需求,如果想要顺利完成 Hyper-V 集群迁移,就需要

拥有足够的硬件资源来搭建整个 Hyper-V 集群。但是如果使用嵌套虚拟化技术,就能够创建虚拟的 Hyper-V

集群,在不需要使用专用物理硬件的情况下测试升级流程。

我能想到的最后一种使用情况是嵌套虚拟化可以作为廉价版的私有云。大多数私有云都将关注重点放在用

户或者业务部门是否有能力创建或配置自己的虚拟机上。尽管搭建私有云环境看起来十分简单,但是在实际操

作过程当中,这是一种十分复杂和昂贵的任务。

Hyper-V 的嵌套虚拟化特性允许 IT 管理员为有经验的用户提供虚拟 Hyper-V 服务器,将其作为私有云的

替代解决方案。由于这些 Hyper-V 服务器是虚拟的,因此管理员能够限制资源使用情况,就像在真正的私有云

环境当中一样。Windows Server 2016 当中的 Hyper-V 甚至支持动态增加内存和网卡,意味着管理员可以在

不产生任何中断的情况下为虚拟 Hyper-V 服务器添加额外的硬件资源。

表面上,嵌套虚拟化技术是一种非常新奇的特性。但是从更深层次来说,在某些特定情况下,嵌套虚拟化

技术也能够发挥重要作用,即便这是一种只适合于小众市场的技术。

(来源:TechTarget 中国 作者:Brien Posey 译者:王学强)

Page 35: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

35 / 37

谁来管理 Windows 容器?IT 人员表示‘我说了算’

对于微软的容器产品,用户的态度如何呢?根据市场调查,到目前为止,微软企业用户更倾向于在内部环

境中或者自管理的云基础架构中使用 Windows Server 2016 中的容器功能,而不是单独的 Azure 容器服务—

—尽管 Azure 容器目前已经可用,而 Windows Server 容器离上市还有几个月的时间。

Bala Subra 是一家大型出版公司的.NET 架构师,他对 Windows Server 容器已经进行了概念验证测试,

他表示“我们需要一个适用于多种平台的解决方案,不只是 Linux 系统。”

虽然该公司已经使用了 Linux 容器,但是尚未用于生产环境,Subra 表示自己有耐心等到 Windows Server

2016 正式上市,届时将开始部署 Windows 容器。

这在很大程度上是因为微软用户需要一个由微软进行开发并提供支持的本地产品,鉴于微软的用户量,这

种需求并不罕见。另外也有一些组织想提前尝试在内部的裸金属上运行 Windows Server 容器,而不是直接交

付给公共云中的虚拟机。

Urban Science 是一家专门从事汽车行业的数据分析公司,该公司的配置管理员 Marc Priolo 说:“为了

让成本优势转移到容器技术,我们必须考虑重组我们的服务器基础设施。当你部署容器时,会消除很多虚拟操

作系统的开销。”

虽然 VM 可以持续运行十几个容器,但是裸机服务器可以运行成千上百个容器。而且裸机是网络级规模企

业的最爱,451 Research 的分析师 Jay Lyman 表示。

Azure 容器服务目前可用,但仍不完整

在云环境中,Azure Container Service(ACS)是建立在 Hyper-V 容器上,并且在 4 月 19 日开始向用

户提供大量集群管理和编配等选项。

但这里的选择是一把双刃剑,它同时也意味着用户仍然需要自己集成持续整合、交付工具以及日志记录和

监控。Azure 容器没有本地 Docker 注册中心,使用了 Docker 版注册表,Azure Compute 产品经理 Boris Scholl

表示。

Page 36: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

36 / 37

“我们绝对会自己运行 Docker,并且会充分利用嵌入到 Windows Server 2016 中的各种功能,”DevOps

分析师 Chris Riley 表示他正在考虑使用容器。Riley 同时也是 TechTarget 网站的投稿者以及 Azure 网站客户,

他说“在处理现有的应用程序上,ACS 存在一定的复杂性——对于我们来说,部署 Windows Server 2016 中

的容器会更简单一些。”

Window 容器还需合作伙伴

趁着 Docker 热潮,微软已经提供了多款具体应用工具,但是在容器方面的合作伙伴队伍还需壮大。

例如,ContainerX 的公司领导人曾在 VMware 工作,最近他表示支持 Windows Server 2016 容器、基

础设施分享以及多组合功能,并希望这些功能与 Windows 容器包分开打包。

WinDocks 公司提供了基于 SQL Server 的容器虚拟化平台,还有 DH2i 都是微软 Windows Server 容器

的强劲竞争对手。

手机费用支付公司 Ding 正在对 WinDocks 的产品进行评估,计划用在其软件开发管道,对容器中运行的

SQL Server 实例副本进行代码测试。

“创建测试及开发 SQL Server 是个相当漫长的过程。根据 VM 大小,可能需要花 10 分钟到两个小时。”

Ding 的数据库管理员 Andrew Pruski 说。

他说,通过测试 WinDocks 产品,SQL Server 复制只花了 90 秒。

(来源:TechTarget 中国 作者:Beth Pariseau 译者:杨旭)

Page 37: WindowsServer2016系列 三:虚拟化 - gygh.gov.cngygh.gov.cn/DFS/xmsp/ws2016virtualization_AFI... · 通过 Hyper-V 嵌套虚拟化技术 ... 基于硬件的认证要求配备了

37 / 37

本期电子书由 TechTarget 出品