首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kubernetes系统基础

开发模式从瀑布式(Waterfall)到敏捷(Agile)再到精益(Lean),甚至是与QA和Opeartions融合的Devops

应用程序架构从单体(monolithic)模型到分层模型再到微服务

部署及打包方式从面向物理机到虚拟机再到容器

应用程序的基础架构从自建机房到托管再到云计算

以Docker为代表的容器技术的出现,终结了Devops中交付和部署环节因环境,配置及程序本身的不同造成的动辄几种甚至十几种部署配置的困境,将它们统一在容器镜像(image)之上。越来越多的企业或组织开始选择以镜像文件作为交付载体。容器镜像之内直接包含了应用程序及其依赖的系统环境,库,基础支持等,从而能够在容器引擎上直接运行。于是,IT运维工程师(operator)无需关注开发应用程序的编程语言,环境配置等,甚至连业务逻辑本身也不过多关注,而只需要掌握容器管理的单一工具链即可。

部署的复杂度虽然降低了,但以容器格式运行的应用程序间的协同却成了一个新的亟待解决的问题,这种需求在微服务架构中表现得尤为明显。结果,以Kubernetes为代表的容器编排系统应需而生。

容器由应用程序本身和它的环境依赖(库和其他应用程序)两部分组成,并在宿主机(Host)操作系统的用户空间中运行,但与操作系统的其他进程互相隔离。

容器与虚拟机的对比关系图如下:

同一个宿主机上的所有容器都共享其底层操作系统(内核空间),这就使得容器在体积上要比传统的虚拟机小得多。另外,启动容器无需启动整个操作系统,所以容器部署和启动的速度更快,开销更小,也更容器迁移。事实上,容器赋予了应用程序超强的可移植能力。

Docker可以将几乎任何应用程序及其依赖的运行环境都打包成一个轻量级,可移植,自包含的容器,并能够运行于支持Docker容器引擎的所有操作系统之上。简言之,容器的优势主要表现在以下两个方面:

      应用程序开发工程师:一次构建,到处运行(Build Once,Run Anywhere)

      运维工程师:一次配置,运行所有(Configure Once,Run Anything)

Docker在LXC项目的基础上,从文件系统,网络互联到进程隔离等方面对容器技术进行了进一步的封装,极大地简化了容器的创建和维护过程,从而促进了容器技术的大流行。虽然最初的实现是基于LXC项目的,但Docker在后来的0.7版本转为使用自行开发的libcontainer容器引擎,而1.11版本又将其换做了runC和containerd。

真正的生产型应用会涉及多个容器,这些容器必须跨多个服务器主机进行部署。Docker本身非常适合用于管理单个容器,不过,一旦开始使用越来越多的容器封装和运行应用程序,必将会导致其管理和编排变得越来越困难。最终用户不得不对容器实施分组,以便跨所有容器提供网络,安全,监控等服务。Kubernetes可以提供所需的编排和管理功能,以便用户针对这些工作负载轻松完成大规模容器部署。而且,借助Kubernetes的编排功能,用户可以构建出跨多个容器的应用服务,并且可以实现跨集群调度,扩展容器,以及长期持续管理这些容器的健康状况等。使用中,Kubernetes还需要与网络,存储,安全性,监控及其他服务进行整合,以提供全面的容器基础架构,如下图:

Kubernetes利用容器的扩缩机制解决了许多常见的问题,它将容器归类到一起,形成“容器集”(Pod),为分组的容器增加了一个抽象层,用于帮助用户调度工作负载(workload),并为这些容器提供所需的联网和存储等服务。Kubernetes的其他部分可帮助用户在这些Pod之间达成负载均衡,同时确保运行正确数量的容器,以充分支持实际的工作负载。

无论是公有云,私有云抑或混合云,Kubernetes都将作为一个为任何应用,任何环境提供的容器管理框架而无处不在。

Kubernetes是一种用于在一组主机上运行和协同容器化应用程序的系统,旨在提供可预测性,可扩展性与高可用性的方法来完全管理容器化应用程序和服务的生命周期平台。

Kubernetes:舵手,飞行员,参考谷歌内部的大规模内部容器调度系统Borg实现,使用Go语言开发。代码托管在github上,链接:https://github.com/kubernetes/kubernetes

k8s特性如下:

自动装箱:基于资源依赖及其他约束能够自动完成容器的部署而且不影响其可用性

自我修复:一旦某一个容器崩溃,由于容器轻量级的特点,kubernetes能够在1秒中左右迅速启动新的容器。

自动水平扩展:只要物理平台的资源支撑是足够得到,kubernetes就可以无限制的增加容器。

服务发现和负载均衡:当我们需要在k8s上运行很多应用程序的时候,一个服务可以通过自动发现的形式找到它所依赖的服务,而且每一种服务如果起了多个容器,他能实现自动负载均衡。

自动发布回滚

密钥和配置管理:k8s通过配置中心的方式来保存所有应用的配置信息,当容器启动时,会去配置中心加载对应的配置信息。

存储编排:根据容器自身的需求自动创建存储卷。

任务批处理运行

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200824A0JTI200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券