[摘要]引子 作为一名程序员,设计程序架构、优化算法已经是一件很头疼的事了,然而,还有更让人烦躁的,那就是环境配置,想必各位同学们都深有体
引子
作为一名程序员,设计程序架构、优化算法已经是一件很头疼的事了,然而,还有更让人烦躁的,那就是环境配置,想必各位同学们都深有体会。每个人的电脑都不一样,不管是软件还是硬件,或者是要依赖的环境,因此同样的安装流程在别人那里是好使的,在你这就处处 bug,在电脑 a 上能顺利安装,在电脑 b 上就遇到问题了。于是有人就想出了一个办法,大家何不把自己配置好的环境打包成镜像呢?当需要配置同样的环境时,就把别人的镜像拿过来,进入镜像之后,就进入了别人搭建好的环境,而我们只需要提供硬件支持即可,而这个镜像就是 docker 容器。什么是镜像呢?简单来说,镜像就类似操作系统光盘介质,docker 容器相当于通过光盘安装后的系统。通过光盘(镜像),我们能在不同机器上部署系统(容器),系统内的操作只会保留限制在当前的系统(容器)中。需要了解的是,像 docker 这样的容器有很多种,而 docker 只是其中之一,但它是最受欢迎的,也因此占据了大半的市场份额。其他容器还有 coreos rkt、mesos、lxc 等。
openstack 的诞生
我们都知道,全球云市场被三大巨头垄断,分别是亚马逊(amazon)、微软(microsoft)和 阿里巴巴(alibaba),而亚马逊正是云计算的开山鼻祖。
早在 2003 年,amazon 向客户推出了一项全新的业务——包括存储空间、计算能力等资源服务的 web service,这就是大名鼎鼎的 aws(amazon web service)。说白了,就是给大家提供了远程电脑,上面配置了各种满足你需求的服务,你可以远程使用它,这就是云计算最早的形式。到了 2006 年,亚马逊又推出了一种配置更简单、方便的弹性计算云(elastic compute cloud),又称 ec2 。而在同年的 8月9日,google首席执行官埃里克·施密特在搜索引擎大会上首次提出“云计算”(cloud computing)的概念。从此,云计算进入了高速发展阶段。时间转到了 2010 年,一家名叫 rackspace 的公司,同样在做云主机和云储存服务,和 amazon pk 了多年,但是在竞争中一直处于下风。最终,他们把云服务代码给开源了。随后,nasa 也步后尘,开放了其在云领域多年的研究成果,并与 rackspace 联手共同成立了一个开源项目。这个项目,就是 openstack,也是云计算发展的里程碑。
openstack 是什么
现在的云上资源(计算、存储、网络等)都是以集群的形式存在,这些集群里的物理机(host)可以放在一个机房里,也可以分布式放在各个地方,而一个 host 上又可以虚拟出多个虚拟机(vm)。关于虚拟化技术,可以参考我之前的文章。而 openstack 从一开始,就是为了云计算服务的,它就是一套软件,一套 iaas 软件,用来管理集群里所有 host(物理机)上的所有 vm(虚拟机)。什么是 iaas?infrastructure as a service,基础设施即服务。这里的关键字是“基础设施”,也就是物理机。各大公司在 openstack 上进行了二次开发,形成了自己的 iaas 软件,比如华为的 fusionsphere平台 和中兴的 tecs 平台。openstack 的安装部署非常快速,兼容性和适用性极强,而且便宜,一直很受市场欢迎。
docker 的出现
按理说,host 虚拟化出来了许多 vm,云上资源粒度划分已经很细了,也已经能做到资源的充分利用。然而,虚拟机的性能开销很严重。主要由于两点原因:一是虚拟层的引入;其二是因为 vm 的操作系统和 host 的操作系统不一致,导致与操作系统有关的性能优化手段不能应用到所有的 vm 上。如果说虚拟机技术开启了云计算时代,那么 docker 容器作为下一代虚拟化技术,将云计算推向了高潮。
虚拟机和 docker 的区别
首先,你要明确一点:docker 容器不是虚拟机,但你可以把它近似看成一种轻量级的虚拟机。
一个 vm 里可以创建多个 docker 容器。
docker 比虚拟机更节省内存,启动更快,数量级上”虚拟机需要数分钟启动,而 docker 只需要50毫秒”,这是因为 docker 是利用宿主(vm)的系统内核。
k8s – 为 docker 而生
当只需要一个 容器时,你可以手工部署,没有问题。然而在集群里要部署海量的 docker,还要管理它们时,手工显然不现实了,于是 kubernetes 这种更高维度的容器编排工具应运而生。kubernetes 简称 k8s, 它抽象了所有物理机资源,将所有云主机抽象成一个资源池,而这个池子里装的就是一个个容器。容器就是孩子,而 k8s 就是这些孩子们的亲妈,为啥这么说呢?比如,应用程序发现 cpu 不够用时,k8s 就将其调度到另一台 cpu 足够用的机器上,内存不满足要求时,k8s就会帮忙寻找一台有足够内存的机器,并在上面创建对应的容器。更重要的是,一旦应用层序由于某些原因挂掉了, k8s 还会帮它自动迁移重启, 照顾得简直无微不至。而开发者只关心自己的代码,容灾备份、服务资源扩充则由 k8s 保证。
说到这里,你可能认为”k8s“的调度单位是一个容器(container)。事实上,k8s 调度的基本单位为 pod, 一个 pod 表示一个或多个容器。引用一本书里所说“之所以没有使用容器作为调度单位,是因为单一的容器没有构成服务的概念;例如 web 应用做了前后端分离,需要一个 nodejs 与 tomcat 才能组成一个完整的服务,这样就需要部署两个容器来实现一个完整的服务,虽然也可以把他们都放到一个容器里,但这显然违反了一个容器即一个进程的核心思想 –《service mesh实战 – 用 istio软负载实现服务网格》”
网站挂马清理-虚拟主机/数据库问题你认为AI会因一时挫折导致衰退吗跟着搜狐学内容运营域名进入删除期怎么购买?购买过期被删除的域名合法吗?阿里云服务器个人网站周口 静怡工贸有限公司核验单已经修改超市连锁云服务器配置什么域名值钱?怎么看域名是否值钱?