干货分享-Win2019上的Linux容器和Azure Stack上的K8

提示

要参加微信课堂以及日常技术交流,请给我们发微信(微信号:markpah),请注明加入以下哪个群:

  • 微软Azure Stack交流微信群
  • 微软Azure Docker交流微信群

您测试过Windows上的Linux容器吗?

您在Azure Stack里部署过K8S吗?

这是上个周末刚闭幕的微软Tech Summit大会,笔者在课堂上提出的两个问题。

关于第一个问题,大家常有的困惑就是,我们为什么要在Windows上运行Linux容器?

答案有以下三点:

  • 节省资源 Windows服务器上能同时运行Windows容器和Linux容器,而不是Windows容器只能在Windows主机上运行,Linux容器只能在Linux主机上运行,造成资源浪费。
  • 隔离能力 Windows上的Linux容器采用了Hyper-V容器技术,底层是小型的看不见的虚拟机,所以借用了hypervisor的隔离能力
  • 商业引擎 Windows服务器的docker引擎,会是企业版的引擎,由微软和docker提供支持

接下来让我们看一下Windows是如何让Windows容器和Linux容器水火共融的。这里以一台Windows 10机器为例进行介绍,您也可以在Windows Server 2016 Build 1709或者Windows Server 2019上测试。

运行docker images,即可看到Windows 10上当前有Windows和Linux的容器镜像。

随便运行一下docker run -it microsoft/nanoserver,即可启动一个Windows容器。

再运行docker run -it supertest2014/nyan,即可同时启动一个Linux容器。

我们可以通过docker ps命令查看这两个容器的信息。

前面说过,Linux容器采用了Hyper-V容器的技术,底层是被优化过的小型Linux虚拟机,采用的是docker的LinuxKit(内核和引导文件位于C:\Program Files\Linux Containers)。可见非常精简。

以下是原理图。其中绿色的部分就是传统的Linux容器架构原理图。

看看Windows上的Linux容器增加了哪些组件?首先是运行在Hypervisor之上,这样隔离能力就和虚拟机一样高,而不是采用共享内核的机制。其次由于dockerd、containerd等服务运行在主分区(Host Partition,就是宿主机),通过HCS(宿主计算服务)和LinuxKit虚拟机上的GCS(来宾计算服务)通信,这两个组件是基于Hyper-V的VMBus高速内存总线!

怎么查看Linux容器的详细信息,通过Hyper-V管理器(GUI、PowerShell或者API)是看不到这台微型虚拟机的任何信息的。

我们需要借助hcsdiag这个命令,首先运行hcsdiag list命令,查看服务器上的Hyper-V容器信息。

可以看到其上运行了两个容器,记住其中Linux容器的ID信息。再运行以下命令:

hcsdiag console -uvm ec1682e834415788943cd79fa56da656f5ffb689ea16a126c166eaba8812e54b

即可进入该微型虚拟机的命令行,运行ps aux,即可查看该虚拟机的进程信息,其中有/bin/sh -c nyancat,这就是Linux容器进程(加以命名空间保护),还有/bin/gcs,这就是GCS组件,还有hv_vmbus_con,这是虚拟机的硬件驱动。

这台微型虚拟机不但内核精简,本身的硬件配置也精简,删除了所有不支持Hyper-V enlightened的设备。

再运行mount,查看该虚拟机挂载的设备。可以看到底部有若干/dev/pmem的存储设备,只读模式(ro),这就是Linux容器的基础镜像(包含多个layer的base image),加载到内存里。

还有一个/dev/sda这样的块设备,是可读写设备(rw),这是容器顶部的layer。当容器被杀死时,该layer自动删除,也可以commit到镜像仓库,以实现快速代码迭代。

用Process Explorer,可以查看微型虚拟机的vmwp进程,可以看到该进程的访问句柄,下图中红色框里的sandbox.vhdx,就是Linux容器的顶层可读写layer,而绿色框里的多个layer.vhd文件,则是Linux容器的base image。这和上图的命令行显示是一一对应的。

谈完了容器,接下来该说说如何在Azure Stack里部署Azure Kubernetes Service呢?盆盆录制了一个视频,介绍如何在海外环境下部署Azure Kubernetes Service(K8S 1.11),国内网络环境嘛,请耐心等待,很快就可以有啦

有了Kubernetes,又该如何用它来创建应用呢?请看以下视频。

可能您会问,如果要在Azure或者Azure Stack混合云里构建云原生应用,希望能有DevOps、微服务、监控、数据仓库、服务目录等一揽子的服务,包括能对底层的容器编排提供商业支持,应该做如何选择?请不妨考虑一下盆盆所供职的DaoCloud。我们是国内首家正式商用支持Windows server 2016的云原生平台,现在也是唯一正式商用支持Azure Stack的云原生平台,在该领域携手神州数码云计算、联想集团等战略合作伙伴一起提供同类最佳完整解决方案。能完整支持以下四个任何的能力。

本文分享自微信公众号 - 华来四Azure混合云(sysinternal)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏来自GitOPEN的技术文摘

编译Android5.1.1源码

编译Android源码是为了更好的学习源码,当然,如果要做第三方ROM适配,也可以尝试;我们这篇重点学习如下内容:

33630
来自专栏bisal的个人杂货铺

RH+Oracle安装过程中碰到的一些值得总结的问题

昨天大半夜装一个RH5+Oracle版本,期间碰到了几件事情,陈述如下,以此为据。

11030
来自专栏bisal的个人杂货铺

安装Oracle Linux碰见的几个问题

今儿需要部署一个Oracle环境,为了简单些,选择了Oracle提供的Linux版本介质:OracleLinux-R6-U2-Server-x86_64-dvd...

13630
来自专栏来自GitOPEN的技术文摘

国内镜像加速Android源码下载

6.查看想要下载的源码的Tag和Builds,网址:====点击查看,需要翻蔷====,这里 @安卓猴 给你们截下图,自己放大查看:

53830
来自专栏来自GitOPEN的技术文摘

我的开发环境

最近在写第二个系列文章《Monkey Android》,目标定位Android初学者,因此不得不谈论一下他们很关心的开发环境的问题。在系列文章中我并没有设计这方...

18330
来自专栏来自GitOPEN的技术文摘

Daily Tips(Updated)

[No.007] 解决Ubuntu16.04 字体太细发虚(表现在Chrome中浏览中文) 这个问题产生是由于Ubuntu 16.04 LTS 的默认中日韩...

17120
来自专栏来自GitOPEN的技术文摘

Ubuntu安装字体and切换默认字体

Ubuntu系统安装好后,默认字体对于中文的支持看上去不太美丽,于是很多朋友可能需要设置系统的默认字体为自己喜欢的字体。本文主要介绍如何解决这两个问题。

24820
来自专栏bisal的个人杂货铺

Oracle RAC安装过程中碰到的“坑”和关键点(二)

Linux下安装Oracle,除了系统配置参数,我觉得依赖包的安装是另一个比较琐碎的操作。

36010
来自专栏bisal的个人杂货铺

Linux下安装Oracle的过程和涉及的知识点-系列1

Linux下安装Oracle的经历也许在很多人眼里就是一个日常的再普通不过的操作,但实际其中蕴含着大量的操作系统、Oracle、Linux指令操作等知识点。因为...

14820
来自专栏来自GitOPEN的技术文摘

VirtualBox中CentOS配置git服务器

在管理自己的代码的时候,我一直使用github。有的时候,私有项目不想公开,如果还要放到GitHub上,那就必须要花钱。解决这个问题的方法其实也很简单:在自己电...

19830

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励