部署容器时要考虑的6个关键因素虽然容器的目的是减少变量,从而简化和提高效率,但还有许多复杂的因素需要考虑。在企业界,考虑这六个因素很重要:1.性能开发人员通常不会从性能的角度考虑潜在的问题,但仅仅因为您使用网络浏览器访问应用程序并不意味着它可以处理很多的并发事务。在实际测试之前,您不知道它的功能。Kubernetes是可扩展的,但也是资源密集型的。容器可以帮助解决架构问题并确保所有必需的依赖项都到位,但它不会在推出后自动确保性能。底层语言运行环境、web服务器、openssl等库的好坏都会对性能产生影响。确保你的Linux发行版有一个积极主动的性能工程师团队进行回归测试,更重要的是优化整个架构的性能。2.兼容性在Linux世界中,不同的程序运行在内核上。大多数程序使用与内核接口的API:系统调用层。如果您坚持使用Linux中的系统调用层,则向前兼容性很重要。Linux之父LinusTorvalds有一条严格的规定:内核不应破坏向后兼容性。容器始终向前兼容,因为系统调用层尽量不破坏该功能。当您在旧内核上运行新容器镜像时会发生什么?或者当您从系统调用层进入ioctl、/dev、/proc等API时会发生什么?兼容性有时间和空间限制,良好的设计和测试有帮助。容器镜像和主机的Linux发行版需要深入思考这些问题,否则用户的状态会很糟糕。在内核级别、编译器级别(gcc)和库级别(glibc)以及系统调用接口之外的API都是如此。另一个问题是,如果你只使用C库相关的syscall函数,你可能就没事了。但更有可能的是,应用程序调用了一个不属于应用程序的辅助软件,例如故障排除或监控组件,这些组件使用ioctl/proc或其他内核API,如/dev,这可能会导致问题。如果升级容器主机,它可能无法再运行容器。在虚拟机的世界里,你通常不必担心它(即使是虚拟化,但是,一些架构或芯片组可能会导致问题),但在物理服务器的世界里,一些架构或芯片组可能会导致问题。3.与现有基础设施集成支持的硬件和软件生态系统与底层Linux发行版相对应。如果您需要ARM支持,它必须在那里。考虑可支持性——这适用于面向硬件的容器主机和面向软件的容器镜像。在选择容器镜像和容器主机时,这个“购买标准”常常被遗忘。但请记住,Linux发行版的生态系统(硬件和软件)是容器主机(硬件)和容器镜像(软件)可用的生态系统。如果您的Linux发行版支持特定的硬件或云提供商,那么您的容器主机应该可以正常工作。如果您的应用程序是为特定的Linux发行版设计和构建的,那么将这些应用程序放入基于该Linux发行版的容器映像中会容易得多。4.安全性一旦将容器镜像部署到生产环境中,它就会将您的应用程序及其所有依赖项暴露给危险的互联网。这包括数据泄露、特洛伊木马图片等。在为您的容器环境选择容器镜像和容器主机时,请考虑所有这些方面。您可能没有从RedHat容器目录下载容器镜像,而是选择从某个可疑网站下载它。这是一个坏主意。如果你不从一个已知的好容器开始,有人会注入恶意代码而你不会知道。从安全的角度来看,了解组件的质量至关重要;始终使用可信来源。请记住:一个容器可能在您下载它的那天是好的,但多年后就会变坏。5.大小容器执行大量构建操作,每次容器重建时都重新编译应用程序。现在开发人员负责图像中的所有内容。一年后,如果库中的代码破坏了向后兼容性并且容器损坏了,谁来修复它?他将拥有开发技能,而不仅仅是执行“yumupdate”之类的操作。应用程序可能需要重新编译。另一种方法是构建一个基础镜像,它有包,比如用openssl动态编译的web服务器软件,性能问题可以通过yumupdate得到新的包来修复。这比更改代码容易得多,但最终图像更大。添加软件后,基本映像的大小并不重要,现在是400Mb或500Mb。目前正在开发两种主要类型的容器化应用程序。一个是从Linux基础映像构建的,另一个是从头开始构建的。在这两个应用程序中,用户通常对容器镜像的大小很敏感,因为它会影响将容器镜像拉取到容器主机所需的时间。如果从头构建并部署静态编译的二进制文件,选择一个小的基础镜像或从头构建是很重要的。在为企业内部使用的软件构建整个生态系统时,更重要的是要考虑整个供应链(所有RPM包和依赖项)的规模,因为基础层通常可以共享和缓存。减少受威胁区域的关键是减少库和语言运行时环境的重复副本,从而减少整个环境中的足迹。6.支持支持主要有两种类型:生命周期支持和白手套支持。生命周期确定支持何时可用以及为容器映像中的任何特定程序(RPM或Debs)发布哪些补丁。白手套支持让您可以提交票证、获取修补程序并倡导上游更改。两者都非常重要,具体取决于您何时支持容器化应用程序。生命周期支持的上下文很重要,因为应用程序运行的时间比您想象的要长。可能三五年,或者更久。有许多运行多年的应用程序/系统实例。您必须考虑支持基本映像运行yumupdate多长时间。然后您返回到第一个模式来更改代码,实现不同版本的库,然后将其交回开发人员手中,这可能代价高昂。问问自己:我的容器镜像有更新吗?如果出现问题,我可以打电话找人修理吗?如果我有一个独特的问题,我可以向开发部门索取补丁吗?只是运行yumupdate不是同级别的支持。原标题:部署容器时要考虑的6个关键因素,作者:ScottMatteson
