docker和Kubernetes是云计算市场的热点技术,而且总被拿来比较,他们的受欢迎程度在整个开发社区中不断增长。那么你是否会关注它们二者之间的竞争,实际情况到底如何?
了解Docker和Kubernetes:容器编排
在过去几年中,容器改变了软件开发和部署的面貌。因此,任何在DevOps空间工作的人,迟早都会遇到“Kubernetes vs Docker”的讨论。最初的讨论可能令人困惑,因为Docker和Kubernetes不是直接竞争对手。正如我们所知,讨论应该更多地针对“Kubernetes vs Docker Swarm”。
但是,对于任何DevOps从业者来说,理解Docker和Kubernetes的细节是很重要的。这两种技术都在迅速改进并改变了DevOps的做法。因此,充分了解这些技术的现状将有助于你获得竞争优势。
Docker和容器的崛起
容器是轻量级可执行程序包,作为独立软件运行。它们包含所有必需的组件,如代码,run time,系统工具,库和配置设置,以便一致地执行。
Docker是一个容器的开放平台,但它不是最早的。自20世纪70年代以来,容器平台一直存在。他们的开发可以追溯到Unix中的chroot系统调用。在2000年代早期,FreeBSD Jails和Linux服务器的开发导致了2008年的Linux容器(LXC)。Docker在2013年左右出现在容器领域,并立即取得了成功。原因是Docker使得运行容器变得简单;使用Docker,开发人员可以轻松启动,停止和销毁容器。而且带来的低学习曲线和易用性,使其成为软件开发过程中的主要方向。
最初,由于安全问题,IT运营团队并不热衷于在生产环境中使用容器。当时,他们已经在使用虚拟机(VM)。但与VM不同,主机的内核在容器之间共享。因此,通过容器拿下主机的风险更高。使用此漏洞,黑客可以轻松启动拒绝服务(DoS)和其他形式的攻击。此外,容器是根据常见镜像创建的,团队对使用可能会使整个生产管道面临风险的不良镜像持谨慎态度。
尽管生产团队担心,Docker仍然获得了发展势头,因为它让开发人员变得更轻松。随着技术的成熟,Docker开源社区更加重视解决安全问题。不久,docker容器开始出现在生产环境中。
Kubernetes和容器编排
Kubernetes的发展独立于Docker。2003年左右,谷歌创建了Borg系统来应对日益增长的集群管理问题。这是一个内部工具。2014年年中,Google推出Kubernetes作为Borg系统的开源版本。不久,微软,红帽,IBM和Docker加入,以支持Kubernetes社区。
Kubernetes是一个容器编排解决方案。当开发人员在开发环境中处理少量容器时,管理服务并不是什么大问题。但是,当应用程序部署到生产环境并且有数百或数千个容器和服务时,管理任务变得复杂。Kubernetes简化了大规模部署的容器管理问题。
在Kubernetes环境中,开发人员使用pod的概念创建他们的应用程序。Pod是集群在一起的容器,就像单个单元一样工作。这些pod已部署到Kubernetes主节点以及配置要求,如pod数和网络设置。主节点管理工作节点。在部署pod之后,主节点负责跟踪容器。Kubernetes使生产团队易于进行容器管理和编排。
了解Kubernetes和Docker的交叉点
从上面的讨论中可以看出,Docker容器是使用Kubernetes管理的。所以不应该有任何“Docker vs. Kubernetes”讨论。但Docker有一款名为Docker Swarm的产品。它是一个集群和调度工具。它类似于Kubernetes,所以任何正在研究容器编排工具的人都应该研究“Kubernetes vs. Docker Swarm”比较。
由于Docker的普及,许多开发团队使用Docker Swarm启动容器编排。这似乎是自然的下一步。这很容易学习,Kubernetes的学习曲线更加陡峭。但是使用Minikube学习它变得越来越容易,Minikube是一个运行单节点Kubernetes集群的工具。
另一个重要因素是Kubernetes拥有比Docker Swarm更强大的社区,所有主要的云提供商都支持它。亚马逊AWS已经为Kubernetes(Amazon EKS)启动了Amazon Elastic Container Service,Google Cloud拥有Kubernetes Engine,微软Azure拥有Azure Kubernetes服务(AKS)。所以目前看来,主要的市场力量正在将Kubernetes作为一个容器编排解决方案。
Docker和Kubernetes的主要趋势
管理Docker和Kubernetes环境的DevOps团队应该关注这些关键趋势:
微服务的使用:微服务架构是容器使用兴起的主要原因之一。在这种架构中,应用程序被分解为更小的独立服务。容器非常适合在生产环境中支持这些类型的应用程序。因此,期望支持更多使用Docker和Kubernetes的基于微服务的应用程序。
多云环境的增加:企业越来越担心使用单云解决方案。因此,他们正在寻求多云环境以获得更多选择并减少对单个供应商的依赖。这意味着DevOps团队必须具备在多云环境中运行Docker和Kubernetes所需的技能,这将带来新的挑战。
对Docker和Kubernetes的支持越来越多:Docker和Kubernetes都拥有强大的社区。Docker Hub拥有一个活跃的用户群,可以定期更新各种应用程序的镜像。Kubernetes也得到了开源社区和亚马逊,谷歌,微软和IBM等大公司的大力支持。所以Docker和Kubernetes将在企业和小企业中变得更加普遍。
结语
所以其实并不是“Kubernetes vs Docker”,讨论应该集中在“Kubernetes vs. Docker Swarm”上。这两种技术在今天的软件环境中都扮演着重要的角色。Docker容器改进了开发过程,Kubernetes容器编排改进了部署过程。DevOps团队可以利用这些技术的强大功能构建更强大的持续集成和持续交付(CI/CD)管道,以实现更快,更可靠的软件开发周期。