《 Kubernetes进阶实战》一Kubernetes系统基础
第1章
Kubernetes系统基础
近十几年来,IT领域新技术、新概念层出不穷,例如DevOps、微服务(Microservice)、容器(Container)、云计算(Cloud Computing)和区块链(Blockchain)等,直有“乱花渐欲迷人眼”之势。另外,出于业务的需要,IT应用模型也在不断地变革,例如,开发模式从瀑布式(Waterfall)到敏捷(Agile)再到精益(Lean),甚至是与QA和Operations融合的DevOps,应用程序架构从单体(monolithic)模型到分层模型再到微服务,部署及打包方式从面向物理机到虚拟机再到容器,应用程序的基础架构从自建机房到托管再到云计算,等等,这些变革使得IT技术应用的效率大大提升,同时却以更低的成本交付更高质量的产品。
尤其是以Docker为代表的容器技术的出现,终结了DevOps中交付和部署环节因环境、配置及程序本身的不同而造成的动辄几种甚至十几种部署配置的困境,将它们统一在容器镜像(image)之上。如今,越来越多的企业或组织开始选择以镜像文件作为交付载体。容器镜像之内直接包含了应用程序及其依赖的系统环境、库、基础程序等,从而能够在容器引擎上直接运行。于是,IT运维工程师(operator)无须关注开发应用程序的编程语言、环境配置等,甚至连业务逻辑本身也不必过多关注,而只需要掌握容器管理的单一工具链即可。
部署的复杂度虽然降低了,但以容器格式运行的应用程序间的协同却成了一个新的亟待解决的问题,这种需求在微服务架构中表现得尤为明显。结果,以Kubernetes为代表的容器编排系统应需而生。
1.1 容器技术概述
容器是一种轻量级、可移植、自包含的软件打包技术,它使得应用程序可以在几乎任何地方以相同的方式运行。软件开发工程师在自己笔记本上创建并测试完成的容器,无须任何修改就能够在生产系统的虚拟机、物理机或云主机上运行。
容器由应用程序本身和它的环境依赖(库和其他应用程序)两部分组成,并在宿主机(Host)操作系统的用户空间中运行,但与操作系统的其他进程互相隔离,它们的实现机制有别于诸如VMWare、KVM和Xen等实现方案的传统虚拟化技术。容器与虚拟机的对比关系如图1-1所示。
由于同一个宿主机上的所有容器都共享其底层操作系统(内核空间),这就使得容器在体积上要比传统的虚拟机小得多。另外,启动容器无须启动整个操作系统,所以容器部署和启动的速度更快,开销更小,也更容易迁移。事实上,容器赋予了应用程序超强的可移植能力。
1.1.1 容器技术的功用
IT系统在架构上已经迭代数十年之久,其环境复杂程度日趋加重,直有积重难返之势。现如今,应用程序开发人员通常需要同时使用多种服务构建,并要架构IT信息系统,涉及MQ、Cache和DB等,且很可能要部署到不同的环境中,如物理服务器、虚拟服务器、私有云或公有云之上。这些不同的主机或许还有着不同的系统环境,如RHEL、Debian或SUSE等Linux发行版,甚至是UNIX、Windows等。
结果,一方面应用程序包含了多种服务,每种服务均可能存在依赖的库和软件包;另一方面存在多种部署环境,而服务在运行时又可能需要动态迁移到不同的环境中。于是,各种服务和环境通过排列组合产生了一个大部署矩阵。应用程序开发工程师在编写代码时需要考虑不同的运行环境,而运维工程师则需要为不同的服务和平台配置环境。对他们双方来说,这都必将是一项困难而艰巨的任务。
幸运的是,货运系统的集装箱机制为解决这个难题提供了有效的借鉴方案。Docker正是将集装箱思想运用到软件打包上,为代码提供了一个基于容器的标准化运输系统。Docker可以将几乎任何应用程序及其依赖的运行环境都打包成一个轻量级、可移植、自包含的容器,并能够运行于支持Docker容器引擎的所有操作系统之上。简言之,容器的优势主要表现在以下两个方面。
◆ 应用程序开发工程师:“一次构建,到处运行”(Build Once,Run Anywhere)。容器意味着环境隔离和可重复性,开发人员只需为应用创建一个运行环境,并将其打包成容器便可在各种部署环境上运行,并与它所在的宿主机环境隔离。
◆ 运维工程师:“一次配置,运行所有”(Conf?igure Once,Run Anything)。一旦配置好标准的容器运行时环境,服务器就可以运行任何容器,这使得运维人员的工作变得更高效、一致和可重复。容器消除了开发、测试、生产环境的不一致性。
DevOps 容器 Kubernetes
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。