大家好,今天来介绍k8s和docker的关系(k8s和dockerswarm)的问题,以下是渲大师小编对此问题的归纳和整理,感兴趣的来一起看看吧!
kubernetes和Docker关系简单说明
最近项目用到kubernetes(以下简称k8s,k和s之间有8个字母)。虽然之前也有简单使用过,但最近发现k8s概念较多,命令也有些不够用了,故想借此机会写点东西,更全面认识并使用k8s。本篇文章目的:让你更全面了解k8s概念,以及学到在工作中常用的操作。整体更偏向于原理和应用。在正式开始k8s之前,我们先看看k8s和Docker的关系,分别从虚拟化角度、部署方式角度叙述why use容器,话不多说,开干。
目前发现并没有将kubernetes和Docker技术产生背景和需求进行比较的文章,本文从最纯正的官方定义角度出发并展开,阐述二者产生背景及与传统技术对比。
简要介绍:
官方定义1:Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。
官方定义2:k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
与传统技术对比:
接下来我们看两张经典的图:
一、从虚拟化角度:
图1
上图是Docker容器(可用k8s管理的玩意儿)与传统虚拟化方式的不同之处,传统的虚拟技术,在将物理硬件虚拟成多套硬件后,需要再每套硬件上都部署一个操作系统,接着在这些操作系统上运行相应的应用程序。而Docker容器内的应用程序进程直接运行在宿主机(真实物理机)的内核上,Docker引擎将一些各自独立的颂晌应用程序和它们各自的依赖打包,相互独立直接运行于未经虚拟化的宿主机硬件上,同时旁森各个容器也没有自己的内核,显然比传统虚拟机更轻便。 每个集群有多个节点,每个节点可,我们的kuberbete就是管理这些应用程序所在的小运行环境(container)而生。
二、从部署角度
图2
注意,大家别把这幅图与上面Docker的那张图混淆了,图1是从虚拟化角度,说明了为应用提供必要的运行环境所需要做的虚拟化操作(即:传统野启锋:虚拟出的虚拟机装操作系统、Docker:容器引擎管理下的容器)。
而图2是在这些具体运行环境上进行真实应用部署时的情况,传统方式是将所有应用直接部署在同一个物理机器节点上,这样每个App的依赖都是完全相同的,无法做到App之间隔离,当然,为了隔离,我们也可以通过创建虚拟机的方式来将App部署到其中(就像图1上半部分那样),但这样太过繁重,故比虚拟机更轻便的Docker技术出现,现在我们通过部署Container容器的技术来部署应用,全部Container运行在容器引擎上即可。既然嫌弃虚拟机繁重,想用Docker,那好,你用吧,怎么用呢?手动一个一个创建?当然不,故kubernetes技术便出现了,以kubernetes为代表的容器集群管理系统,这时候就该上场表演了。
说白了,我们用kubernetes去管理Docker集群,即可以将Docker看成Kubernetes内部使用的低级别组件。另外,kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。希望我这篇文章中简单的描述能让你对两者有所理解和认识。
docker和k8s的关系
概念:
官方定义1: Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。
官方定义2: k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
docker一般是和传统的虚拟技术对比
传统的虚拟技术:将物理硬件虚拟成多套硬件后,需要在每套硬件上都部署一个操作系统,接着在这些操作系统上运行相应的应用程序,非常重。
docker:Docker容器内的应用程序进程直接运行在宿主机(真实物理机)的内核上,Docker引擎将一些各自独立的应用程序和它们各自的依赖打包,相互独立直接运行于未经虚拟化的宿主机硬件上,同时各个容器也没有自己的内核,显然比传统虚拟机更轻便。
K8s:每个集群嫌局有多个节点,每个节点可创建多个容器,kuberbete就是管理这些应用程序所在的小运行环境(container)而生。
在一般的认知中,Kubernetes 和 Docker 是互补关系:
Docker 源于 Linux Container,可以将一台机器的资源分成升逗 N 份容器,做到资源的隔离,并将可运行的程序定义为标准的 docker image;Kubernetes 则可以把不同机器的每份容器进行编排、调度,组成分布式系统。
近几年,Kubernetes 已经成为自有机房、云上广泛使用的容器编排方案,最广泛的使用方式是 Kubernetes+Docker。从 DevOps 人员的角度,一面用 kubectl 命令、k8s API 来操作集群,一面在单机用 docker 命令来管理镜像、运行镜像。
单独用 docker 的情况,在一些公芹笑让司的场景里面也是有的。一种场景是“只分不合”,把一台机器用 docker 做资源隔离,但是不需要将多容器“编排”。
[1] https://xie.infoq.cn/article/3b9f38da1d4bf49d56d1d1938
[2] https://www.cnblogs.com/softidea/p/12803655.html
[3] https://zhuanlan.zhihu.com/p/87186261
[4] https://cloud.tencent.com/developer/article/1688212
docker、dockercompose、docker swarm和k8s的区别
Docker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Docker创建,运行在Docker中,其他相关的容器技术都是以Docker为基础,它是我们使用其他容器技术的核心。
Docker-Compose 是用大此来管理你的容器的,有点像一个容器的管家,想象一下当你的Docker中有成百上千的容器需要启动,如果一个一个的启动那得多费时间。有了Docker-Compose你只需要编写一个文件,在这个文件里面声明好要启动的容器,配置一些参数,执行一下这个文件,Docker就会按照你声明的配置去把所有的容器启动起来,只需docker-compose up即可启动所有的容器,但是Docker-Compose只能管理 当前主机 上的Docker,也就是说不能去启动 其他主机 上的Docker容器
Docker Swarm 是一款用来管理 多主机 上的Docker容器的工具,可以负责帮你 启动容器,监控容器状态,如果容器的状态不正常它会帮你重新帮你启动一个新的容器,来提供服务,同时也提供服务之间的负载均衡 ,而这些东西Docker-Compose 是做不到的
Kubernetes它本身的 角色定位是和Docker Swarm 是一样的 ,也就是说他们负责的工作在容器领域来说是相同的部分,都是一个 跨主机的容器管理平台 ,当然也有自己一些不一样的特点,k8s是谷歌公司根据自身的多年的运维经验研发的一款容器管理平台。而Docker Swarm则是由Docker 公司研发的。
既然这两个东西是一样的,那就面临选择的问题,应该学习哪一个技术呢?实际上这两年Kubernetes已经成为了很多大公司的默认使用的容器管理技术,而Docker Swarm已经在这场与Kubernetes竞争中已经逐渐失势,如今容器管理领域已经开始已经逐渐被Kubernetes一统天下了。所以建议大家学习的时弯仿搜候,应该多考虑一下这门技术埋历在行业里面是不是有很多人在使用。
需要注意的是,虽然Docker Swarm在与Kubernetes的竞争中败下阵来,但是这个跟Docker这个容器引擎没有太大关系,它还是整个容器领域技术的基石,Kubernetes离开他什么也不是。
总结
Docker是容器技术的核心、基础,Docker Compose是一个 基于Docker的单主机容器编排工具.而k8s是一个跨主机的集群部署工具 ,功能并不像Docker Swarm和Kubernetes是基于Dcoker的跨主机的容器管理平台那么丰富
k8s和docker区别
k8s和docker区别:
1、技术原理不同
Dockers是容器化技术,K8S是一套自动化部署工具,可全生命周期管理Dockers容器。K8S是谷歌开发的激陆容器集群管理系统。在Dockers技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一些列完整功能,提高了大规模容器集群管理的便捷性。
2、平台不同
K8S是一个完备的分布式系统支撑平台,具备完善的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、内建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机拿铅宽制以及多粒度的资源配额管理能力。
Docker是一个开源的应用容器引擎,让开发者可以打包它们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。
3、架构模式不同
Docker使用客户端——服务器架构模式,使用远程API来管理和创建Docker容器。Dockeif容晟网通过Docker镜像来创建,容器与镜像的关系类似于面向对象编程中的对象与类。
k8s和docker简介:
k8s的全称kubernetes。它是一个完整的分布式系统支消亮撑平台,集群管理功能齐全。Kubernetes同时提供完善的管理工具,涵盖了开发、部署、测试、运行监控等各个环节。k8s是一种开放源码的容器集群管理系统,能够实现自动化部署、扩展容器集群、维护等功能。
Docker是一种开放源码的应用容器引擎,允许开发人员将其应用和依赖包打包成可移植的镜像,然后发布到任何流行的Linux或Windows机器上,也能实现虚拟化。该容器完全使用沙箱机制,彼此之间没有任何接口。Docker是一种开放源码的应用容器引擎,开发者可以将他们的应用和依赖打包在一个可移植的容器中 ,发布到流行的Linux机器上,也可以实现虚拟化。
既然有了 Docker为什么还要 Kubernetes
“一千个读者眼里有一千个哈姆雷特”。同样的话也适用于 Kubernetes,同样的系统在不同的开发人员眼中也是不同的,甚至在不同阶段对于它的理解也截然不同。
在尚未开始使用Kubernetes之前,我认为它是一套非常复杂的系统,各种抽象概念以及复杂的安装过程。差点因为安装不顺,打算就此放弃。理由很简单: 既然有了 Docker,为什么还要 Kubernetes ?
之所以觉得Kubernetes系统复杂、难,关键是不知道它到底是干啥的?再加上老版本繁琐的安装过程,愿意啃它是需要一点毅力的。现在,就通过一张简单的对比图告诉你,它到底干了啥!
单看图示上部分,发生的变化仅仅是HOST换成了POD,底层网络由真实网络换成了覆盖网络,即虚拟网络。对于APP应用开发者而言, 即使你完全不懂容器技术也没关系.这是Kubernetes的厉害之处,它提供的抽象层对于APP应用开发者而言兄前模是完全透明的。应用在POD中和在HOST主机上并没有本质悔耐区别。
还是老问题: 既然有了 Docker,为什么还要 Kubernetes ?
回答这个问题,得从为什么需要引入Docker这个问题先开始。你会说,因为需要 容器化部署 。那为什么需要 容器化部署 呢?就这个问题还可以走得更远一点。这里我就偷懒了,先打住。看看 容器化部署 后出现的新问题,即容器实例越来越多。因为容器实例羡缓越来越多,就像鸡蛋太多需要一个篮子来装一样,Kubernetes就是那个篮子。当然这不是一个简单的篮子,此处也不扩展了。
标准答案就是: 因为有了 Docker,所以才要Kubernetes 。是不是感觉进入一个loop,我也这感觉。
从图中也可以看出,Docker容器技术是Kubernetes平台的基础。容器技术主要作用是 隔离 ,通过对系统的关键资源的隔离,实现了 主机抽象 。Kubernetes平台则是在 抽象主机 的基础上,实现了 集群抽象 。
用一句话做个总结,就是:
一篇短文,希望可以帮到还徘徊在Kubernetes大门之外的初学者。当然,新版本Kubernetes已经非常容易安装了。
本文地址:https://gpu.xuandashi.com/72500.html,转载请说明来源于:渲大师
声明:本站部分内容来自网络,如无特殊说明或标注,均为本站原创发布。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。分享目的仅供大家学习与参考,不代表本站立场!