容器技术的背景——k8s与docker系列

容器技术的背景

容器的本意是帮助我们更快地应用进行标准化部署

应用程序生命周期管理形态的演化

一个标准的商用软件生命周期应该包含源码开发编译测试打包安装升级备份回滚运行监控卸载

1. 物理机时代

我们的应用程序,本来想让所有的机器上都能跑,这就造成了这个时代的特点是:

  • 成本高
    物理服务器配置都不低,而且伴之程序设计、测试、实施、运维的成本呈倍数增长。

在这里插入图片描述

  • 部署慢
    需要对系统进行安装、环境检测、安装各种各样的组件、运行配置。比如运行期tomcat就必须安装jvm,要运行.net程序就必须运行.net runtime等。

  • 资源浪费
    应用程序对资源的需求是不平衡的,比如一些是计算密集型存储密集型网络IO密集型等等,在这种情况下,闲置资源并没有得到充分利用。

  • 难于扩展与迁移
    物理机在横向扩展是比较麻烦的事,如果是内存不够就需要停机增加内存。如果遇到主机迁移,想将windows向linux迁移的时候就比较麻烦。

2. 虚拟化时代

在这里插入图片描述

物理机时代所带来的问题,就产生了虚拟化技术。通过硬件底层虚拟化支持,来运行多个虚拟机。虚拟化技术出现后可以让我们的硬件资源得到更充分的利用。

这个时代的特点有:

  • 多部署
    每个虚拟机都像是一台独立的主机,每台虚拟机都是相互隔离的,都有自己硬件资源软件资源,比如CPU、内存、硬盘、网卡,同时也要有对应的操作系统应用程序。任何一台虚拟机的故障都不会对其他虚拟机的造成影响。

  • 资源池
    我们把硬件资源看成一个池子,这个池子里的资源可以被共享。主机上会安装主操作系统,并安装hypervisor,hypervisor提供主机资源分配虚拟机管理的工作。
    常见的hypervisorHyper-V(Windows)KVM(Linux 内核)VMwareVirtual Box

  • 资源隔离
    hypervisor为虚拟机分配的资源是独享的。

  • 易于扩展
    如果内存不够,则通过hypervisor命令去调整即可,这个过程是动态完成的,不需要像物理机一样停机增加内存等。

  • 统一目标平台
    我们的应用程序可以选定一个目标操作系统平台,这样应用程序生命周期就只需要一份配套成本即可。

  • 操作系统资源浪费
    虚拟技术的缺点也明显,每台虚拟机都需要安装操作系统。比如我们是一个很小的几百K的应用,却需要运行庞大的操作系统来支持。目前再小的操作系统也要几百M,同时占用的硬件资源要比微小的应用程序要多的多。

  • 硬件信息抽象不统一或虚假
    某些商业软件需要限制运行在具体的硬件上时,需要对真实的硬件特征进行获取,这时可能获取失败或者是伪造的。

3. 容器化时代

针对虚拟化技术带来的问题,如果我们借助虚拟化技术的设计,把虚拟机的操作系统剥离出来,只按照应用程序,那么虚拟化技术的缺点是不是得到解决了?于是,容器化时代到来了!

在这里插入图片描述

  • 灵活小巧
    容器没有内置操作系统,是轻量级的,所以尺寸都非常的小。大部分是兆字节(1兆字节 = 1MB)大小的。

  • 部署快
    尺寸小可以加快程序分发、迁移的速度,目标平台统一的同时可以统一部署标准。

  • 占用资源小
    没有内置操作系统,也就不需要额外的操作系统资源,我们的应用程序只需要在容器内安装即可。

  • 启停快
    容器属于应用层面虚拟化,可以立即启停,虚拟机需要启动Guest OS再运行应用程序。

  • 应用层面隔离
    应用程序出现的问题不会对其他应用造成影响。

  • 物理资源共享
    容器化只是应用层面的隔离,物理资源是共享的,物理资源出现问题会相互影响。

因此,容器化和虚拟化解决的问题不一样,两者会长期存在~!

容器解决什么问题?

由于容器化技术的出现,让我们的应用程序研发的协同产生了巨大的变化。
在这里插入图片描述

真实场景:项目开发完了,准备上线。作为开发工程师要把应用打包数据库导出数据、以及各种参数配置文件整理在一起。然后交给运维同事,运维同事再根据各种各样的安装配置文档,把每一个节点、每一个数据导入进去。但是中间有一个数据可能产生问题,就会导致我们整体的部署失败或者无法按照预期运行

容器化的技术可以让开发人员把所做好的所有东西,把所有的资源打包成一个文件,这个文件可以方便的发布到运维同事,由运维同事展开后立即进行还原。就可以完成一个标准化的应用部署。这个文件就是容器镜像

运维同时带来极大便利。如果公司采购了一百台服务器,通过容器编排工具很方便的发布标准应用。容器编排工具往往提供集群管理能力。如果其中一个容器故障了,还可以自动重新发布容器。

容器化技术的应用场景

  1. 标准化的迁移方式,我们把应用需要的资源一起打包成一个文件,比如静态网站文件、数据库以及其他相关资源等,部署时自动将文件展开便可以得到一个与之前完全相同运行环境。
  2. 统一的参数配置,与应用程序相关的各种配置参数在打包的时候也进行了设置,非常方便我们对参数的统一管理。
  3. 自动化部署,进行镜像还原的过程是自动的,无需人为参与。
  4. 应用集群监控,可以帮助我们实时了解到集群情况。
  5. 开发与运维之间的沟通桥梁,正式因为提供了标准化的迁移方式,让开发和运维不会因为各种环境安装问题而苦恼。

阿里/腾讯云的容器化应用

阿里云和腾讯云是采用了虚拟化技术和容器化技术结合的方案。
在这里插入图片描述
我们在阿里云买的EC2服务器就是一台虚拟机,虚拟机上再安装容器。除此之外我们也可以用自行搭建私有云。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
k8s中的containerd和docker是两种不同的容器运行时组件。containerd是一个轻量级的容器运行时,它是k8s的默认容器运行时。而docker是一个功能更为丰富的容器平台,它提供了更多的功能,如swarm cluster、docker build、docker API等。\[1\]\[2\]在k8s中,如果使用docker作为容器运行时,那么K8S需要经过dockershim-》docker-》containerd这样的调用链;而如果直接使用containerd作为容器运行时,K8S将跳过前置步骤,直接调用containerd。\[3\]因此,containerd相对于docker来说更加轻量级,更适合在k8s集群中使用。 #### 引用[.reference_title] - *1* *2* [containerd与docker的联系、区别是什么](https://blog.csdn.net/Jerry00713/article/details/124837241)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [杂项文章——K8S使用docker作为容器运行时与使用containerd作为容器运行时的结构差异](https://blog.csdn.net/weixin_43860783/article/details/122838824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

名栩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值