容器运行时硬核技术内幕 (1) 特朗普感染新冠背后的内情

2022-08-04 15:07:38 浏览数 (1)

在这个专题的开篇中提到,妹子小X由于错误地回答了关于容器运行时(docker runtime)的一个问题,在应聘H厂云计算相关的岗位时,倒在了第一轮。

由于小X贿赂了方老师若干好吃的,方老师想办法问到了导致小X挂掉的面试评价:对Kubernetes的核心理念缺乏基本认知。

方老师为了让大家更好地理解容器运行时的概念,决定还是从基础讲起。

我们知道,如果小X想在Linux下,启动一个运行着ubuntu的容器,只需要如此这般——

代码语言:javascript复制
tianjifang@ubuntu:~$ sudo docker pull ubuntu
tianjifang@ubuntu:~$ sudo docker run -it ubuntu

这两条命令的作用是,从镜像仓库拉取ubuntu的镜像,并运行该镜像。

这样,在Linux上就启动了一个运行了ubuntu的实例。

同样地,我们还可以从docker hub拉取busybox、elasticsearch、apache httpd、mysql等不同的中间件的镜像,并在本地启动一个运行在容器中的实例。

重点:

docker等容器运行时引擎,交付的是应用的单个实例,及其所依赖的运行时库。

让我们与虚拟机进行一个对比:

如果小X希望启动一个在虚拟机环境中运行的MySQL实例,小X需要做以下步骤:

1、通过操作系统镜像创建虚拟机(假设是CentOS 8.0);

2、给操作系统打所需的补丁,将Selinux、iptables等安全设置配置妥当;

3、部署并配置MySQL;

4、运行MySQL;

这些冗长的重复性工作通常是无法避免的。因为,虚拟机运行时系统,实际上交付的是这些东西的叠加:

应用;

应用所依赖的运行时库;

操作系统;

显然,容器比起虚拟机来,无需交付最重量级的操作系统,类似把带着包装盒的精装书变成了可以存储在kindle里面的电子书,可以方便地带着出差啦。

而有了docker后,小X只需要在Linux服务器上执行两条命令即可快速启动MySQL实例了。

类似地,小X还可以快速部署前端的nginx, 应用servlet等,从而快速交付一个B/S架构的APP。

显然,docker及docker hub生态,大大地提升了应用交付的生产力水平。

然而,让我们再次回味这句话——

docker等容器运行时引擎,交付的是应用的单个实例,及其所依赖的运行时库。

实际上,我们真正需要为用户交付的是“应用”,而并不是“应用的单个实例”!

让我们举一个栗子。

以P站为例,假设P站由nginx, tomcat和mysql三种组件构成。

某天,某条香艳而劲爆,涉及娱乐八卦和国际局势交叉领域的消息,冲上了P站的热搜榜。

这件事情导致P站的访问量飙升10倍,显然,前端运行着Nginx的容器性能显著不足,响应迅速变慢。

警报传来,工程师们本来在温泉度假村享受着长假的美好,赶紧不顾一切地穿着只有精通容器技术的人才能看见的衣服,趴在池沿,拉起更多的Nginx容器,帮助P站handle这个突发的issue。

由于小X是妹子,不方便在这种工作环境下保证快速响应前端需求,虽然哭求希望留下,还是被淘汰了。

这是一场悲剧。让我们把时光机倒回到特没谱感染新冠的前一星期——

假设小X学习了Kubernetes并且在P站部署了基于Kubernetes的生产系统,小X的心情肯定是不一样的:

明天,让我们详解为什么Kubernetes能让小X元气满满地应对xiaozhan把trump那啥了以后引发的国际形势危机——

0 人点赞