NET应用的上云之路 Windows 容器化技术初探.docx
-
资源ID:1425047
资源大小:35.59KB
全文页数:5页
- 资源格式: DOCX
下载积分:5金币
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
NET应用的上云之路 Windows 容器化技术初探.docx
一、引言容器化技术是当今技术浪潮中支撑微服务和DevOps的重要推动力量。虽说DOCker容器技术源自1.inUX内核相关技术,但微软、DoCker及KUberneteS社区也在不断完善WindoWS操作系统对容器化的支持。自vl.14版本起,Kubernetes对Windows容器的支持进入稳定阶段。本文试从Windows容器化技术相关概念出发,对WindoWS.NET应用上云之路的相关问题进行探讨。二、Windows容器化技术(一)WindoWS容器类型相对于传统硬件虚拟化技术,容器技术更加轻量,其代价是容器中应用的运行仍一定程度上依赖于宿主机的操作系统内核提供的能力,多个容器共享宿主机的操作系统内核。也正是因为这个原因,Windows容器无法在1.inUX上运行,1.inux容器也无法在WindoWS上运行。为提供容器化能力,WindOWS自SerVer2016版开始逐渐加入了内核命名空间、控制组群、分层文件系统等内核功能,以提供类似1.inux的容器化能力。事实上,WindoWS支持两种类型的容器运行时:进程隔离和HyPer-V隔离。两种隔离模式可以在运行容器时以参数方式指定。ProcessIsolationHyper-VIsolationUser-modeContainerApplication1Binaries.1.ibranesBinaries.1.ibrariesNTKernelContainerContainerApplication2Application3Hyper-VVMUser-modeContainerApplication5Binaries.1.ibrariesNTKernelHyperVhypervisorHardwarelayer进程隔离,也称为WindoWSSerVerCOntainers,WindOWSSerVer上的默认隔离模式。在该模式下,宿主机上的多个容器共用该宿主机的操作系统内核,有一定的安全风险,只适用于私有云环境。同时由于共享内核,容器的内核版本应与宿主机的内核版本保持一致,即WindowsServer2019宿主机上只能运行WindowsServer2019的容器。HyPer-V隔离,是上述模式的扩展,WindoWSlO上的默认隔离模式。在该模式下,每个容器独立运行于高度优化的虚拟机至上,不共享宿主机内核,因此可以运行其他版本的内核甚至是1.inux内核。但需要注意的是只能运行相同或更老版本的内核,如WindowsServer2019宿主机除了可以运行WindowsServer2019容器外,还可以运行WindoWSSerVer2016容器,而无法运行1903或者1909版本的容器。(二)1.inux容器VSWindOWS容器与1.inux容器相比,Windows容器存在以下主要特点:1、如上所述,WindOWS容器内核版本与宿主机内核版本存在强绑定,即使使用HyPer-V模式也只是增加了对运行更旧内核版本的容器的支持。而在1.inUX上,只要内核版本高于3.10,任何版本内核的容器都可以运行。2、基础镜像较大。完整的WindowsServer镜像servercore大小约为1.5G,最小化的基础镜像nanoserver约为100M,而对应的alpine1.inux只有5M左右。3、Hyper-V隔离理论上还能支持1.inux容器。1.COW(1.inUXCOntainerSonWindoWS)就是使用Hyper-V隔离支持1.inUX容器,在最新的DockerforWindows中可以作为一项实蔡功能开启。即将发布的WS1.2(WindoWSSUbSyStemfor1.inUx2)由于使用了Hyper-V,也可以实现对1.inux容器的支持。(三)Kubernetes对Windows的局限Kubernetes对Windows的支持还在不断成熟过程中,目前已知存在以下局限性:1最低要求WindowsServer2019及DockerEEl809o2、Kubeadm对纳管Windows节点的支持尚为beta阶段,目前纳管Windows的方式较繁琐。3、目前只支持进程隔离模式,在该模式下无法对容器内存上限作出限制。4、WindOWS支持的CNl插件极少,异构集群还需要插件同时支持1.inUX和WindOWS节点,因此Flannel成为最常用的选择。目前对FIannel的host-gw后端支持为Stable,对vxlan后端支持仍为Alphao5、不支持NFS类型的存储。三、已有.NET应用迁移上云(一)测试环境搭建目前Kubernetes对Windows节点的支持方式为作为工作节点纳管,本次测试环境为Kubernetesv1.17,Windows节点为WindowsServer2019DockerEE18.09,网络方案选择为Flannel的vxlan模式。WindOWS节点上的Flanneld和Kube-Proxy支持以WindOWS服务或者DaemonSet方式运行,本次选择了更为稳定的Windows服务方式,经验证节点重启后可以自动加入集群。(二)基础镜像选择微软提供提供四种基础镜像供不同种类的应用选择,见下表:NanoServer支持.NETCOre应用WindowsServerCore支持传统.NETFramework应用Windows提供完全的WindOWSAPIWindowsIoTCore为IoT应用专用其中NanoServer和WindowsServerCore为最常用的选择,NanoServer的优势是仅为.NETCore构建,镜像大小相比ServerCore小得多。ServerCore除提供.NETFramework支持外,还内置了POWerShe11、WMl等功能。我行现有的.NETFramwork应用上云,如不考虑改造为.NETCore应用,则应选择WindowsServerCore作为基础镜像。基于WindowsServerCore,微软又提供了如下镜像供选择:windows/servercoreservercore基础镜像windows/servercore/iis在servercore基础上加入iis功能dotnetframeworksdk用于.NETFramework应用开发测试及编译dotnetframework/aspnet在servercore基础上加入iis及支持dotnet/framework/runtime用于在生产环境运行.NETFramework应用根据应用种类和场景选择基础镜像后,再根据内核版本确定镜像标签,即可完成基础镜像选择。需要注意的是,微软官方仓库里的镜像每月会有更新,为保持一致性,在下载镜像时最好在tag中明确指定哪个月份的更新。(三)镜像制作在本小节,我们使用iis作为基础镜像制作一个最简单的网站镜像。DOCkerfne如下:FROMCOPYindex.htmlinetpubwwwroot其中index.html内容为:<hl>HellofromWindowsContainer!<hl>使用如下命令进行打包:dockerbuild-tiis-site.(四)本地运行使用如下命令在本地运行:dockerrunrm-dnameiis-p5000:80iis-site在浏览器中访问localhost:5000,出现如下页面证明运行成功。Iocalhost5000/×+GfCQ。IocaIhostS(XX)HellofromWindowsContainer!可以使用命令dockerexec-itiispowershell登入运行的容器,并查看.NETFramework版本为4.8,如下图。VindoysPowerShellCopyxight(C)MicrosoftCoXPOXStion.Allrightsreserved.xythenewcross-platfoxnPovezShellhttps:/aka-nspscoxe6PSC:>GetHIindovsFeatuxeDisplayKa>eNMeInstallStateIXJ.NETFxanework4.8FeaturesNET-FzaaeworkHS-Fea.InstalledX.METFxaMVark4.8NET-FXaterOHkT5YoxeInstalledASP.HET4.8HET-Fxa>ework-45-ASPMETAvailableXVCFServicesHET-VCF-Services45InstalledHTTPActivationKET-VCF-mP-Activat.AvailableMessajeQueUing(MSMQ)ActivationKET-VCF-MSMQ-Activat.AvailableManedPipeActivationKET-VCF-Pipe-Activat.AvailableTCPActivationKCT-VCF-TCP-Activati.Available(XTCPPortSharingREr-VCF-TCP-PortShar.Installed上图中有许多功能未开启,可以使用Add-WindowsFeature在制作镜像时添加Windows功能。和1.inux容器只能看到一个进程不同,在Windows容器中可以看到除应用外的其他多个进程。PSC:>Get-processSIProcessNameIdUCpHandlesNPM(K)1CExecSvc1conhost1CSrSS1f0ntdr50stOIdle1Isass1Jiisdtc1powershell1ServiceMonitor1servicesOSmSS1svchost1svchost1svchost1svchost1svchost1svchost1svchost1svchost1svchost1svchost1svchostOSystem一80886(»(Il8(00048408640402602882480808858406358906365642294011234455621111111111112652Oa2OO.66O.24010040l330060SO.3.SO.1.S64.S61.S61.S6O.S004288006246846026602004牙<583448ol2142J5al9s2944049867730122509280746810444229946108038481576171IZIll2166008426866QQ2842686QO4国34a2411693294219090a216795880064785501345141132321221275413141i1571500365933594542728401214IlZII3121OI39300692008746931852960529176(a61u38572523281341141231(五)在k8s上部署在镜像制作完成后,就可以尝试在Kubemetes上部署T,service和deployment的使用方式和1.inUX容器一样,这里不再赘述。由于是1.inUX和WindOWS节点共存的异构集群,需要通过类似"kubernetes.io/os":WindoWS的nodeSelector来指定Windows容器在Windows节点上调度。容器化技术的特点与实现原理解析随着现代应用开发和部署需求的不断演进,容器化技术作为一种轻量、高效、可移植的解决方案得到了广泛应用。本文将探讨容器化技术的核心特点以及支撑这些特点的关键实现原理。通过对命名空间、控制组、容器镜像、联合文件系统等技术的解析,将揭示容器化技术如何实现轻量化、可移植性、快速启动、资源隔离和可扩展性等特性,提供深入了解这一领域的基础知识。容器化技术的最重要特点包括:1 .轻量化:容器是轻量级的虚拟化单元,相较于传统的虚拟机,容器共享主机的操作系统内核,避免了虚拟机启动所需的额外资源。2 .可移植性:容器可以在不同的环境中运行,而无需担心依赖关系和配置差异。这种可移植性使得应用程序在开发、测试和生产环境之间更容易部署和迁移。3 .快速启动:容器可以在几秒内启动,相比之下,虚拟机通常需要几分钟。这提高了开发、测试和部署的效率。4 .资源隔离:容器技术提供了资源隔离,确保容器之间相互独立,不会相互干扰。这使得在同一主机上运行多个容器成为可能,而不必担心冲突或资源争用。5 .可扩展性:容器可以根据需求进行水平扩展,通过在集群中运行多个相同的容器实例来处理更多的负载。容器编排工具(如KUberneteS)可以自动管理容器的扩展和收缩。容器编排:容器编排工具(如KUbemetes、DoCkerSWaI*m等)为容器的自动化部署、伸缩和管理提供了支持。这些工具可以协调多个容器的运行,确保它们协同工作,实现高可用性和负载均衡。容器注册表:容器注册表用于存储和分发容器镜像。通过容器注册表,可以方便地分享和管理容器镜像,使得在不同环境中部署容器变得更加简便。容器网络:容器网络确保容器之间可以通信,并与外部网络连接。容器网络技术使得不同容器可以在虚拟网络中独立运行,同时又可以方便地进行通信。安全性:容器化技术也注重安全性,通过各种手段(如容器签名、镜像扫描等)确保容器的运行环境不受到恶意攻击,提高应用程序的安全性。实现这些特点的原理主要包括:1 .命名空间(NameSPace):通过使用命名空间,容器可以在同一主机上共享主机资源,但各自拥有自己的进程、网络、文件系统等空间,从而实现资源隔离。1.inux系统:在1.inUX系统中,容器技术主要依赖于命名空间。命名空间通过提供独立的进程、网络、文件系统等空间,实现了资源的隔离。每个容器在共享主机内核的同时,通过命名空间确保其运行环境在各个方面相互隔离。Windows系统:在Windows系统上,Docker采用了Windows容器和Hyper-V容器。WindOWS容器使用进程隔离技术,确保容器中的进程独立运行。而HyPer-V容器则在每个容器内运行一个小型的HyPer-V虚拟机,提供更高程度的隔离。这些机制确保了在Windows系统上容器间的资源隔离。Mac系统:在Mac系统上,Docker利用了轻量级虚拟化和等价的隔离技术。通过HyperKit和VPNKit等工具,在macOS上运行1.inUXKit虚拟机,实现了对1.inux容器的支持。这种方式在MaC系统上提供了资源隔离的环境,使得DOCker容器能够在这个平台上运行。总体来说,无论是在WindOWS还是在MaC系统上,容器技术都借助虚拟化和隔离技术来实现资源隔离。具体的实现细节可能会因为不同的系统和工具而有所不同,但基本原理保持相似。通过这些独立的命名空间,容器能够在共享相同的主机内核的情况下,实现对资源的有效隔离。这使得容器化技术在轻量级、高效的同时,能够提供良好的安全性和隔离性。2 .控制组(Cgroup):CgroUP用于限制和控制容器的资源使用,包括CPU、内存、网络带宽等。这确保了在主机上运行的容器不会因为资源争用而相互干扰。3 .容器镜像:容器镜像包含应用程序及其依赖的所有文件和配置。镜像是不可变的,确保了在不同环境中具有一致的运行环境,实现了可移植性。4 .联合文件系统(UniOnFS):容器使用联合文件系统将多个文件系统层组合成一个文件系统视图。这使得容器可以共享基础镜像的文件,并在其上添加自己的文件层,实现轻量化和快速启动。这些原理共同作用,使得容器化技术成为现代应用开发和部署的重要工具。容器化技术的重要特点包括轻量化、可移植性、快速启动、资源隔离和可扩展性。这些特性的实现原理涉及命名空间、控制组、容器镜像、联合文件系统等关键技术。通过命名空间实现资源隔离,在控制组的支持下对资源进行限制和控制,以容器镜像和联合文件系统确保容器的轻量化和可移植性。此外,容器编排、容器注册表、容器网络等辅助技术构建了完整的容器生态系统。这一综合体系为应用程序的开发、测试和部署提供了高效、灵活、可扩展的解决方案,推动着现代软件开发范式的发展。