k8s和docker(k8s和docker哪个好用)
本篇文章给大家谈谈k8s和docker,以及k8s和docker哪个好用对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、2. Docker和k8s(Kubernetes)有什么关系
- 2、k8s为啥不建议用docker了
- 3、docker+k8s简介
- 4、kubernetes和Docker关系简单说明
- 5、k8s和docker区别
- 6、k8s和docker区别是什么?
2. Docker和k8s(Kubernetes)有什么关系
首先看看k8s[中间8个字母,数过了(逃](Kubernetes)是什么以及为啥会出现这个东西。
总的来说,k8s的出现和使用容器进行部署的趋势是分不开的。
总的来说,app的部署大致分为三个阶段。
最传统的方式中,所有段兄app公用一个物理系统哗衫,这种方式会造成很多资源分配上的冲突。
而后进入了虚拟机部署的时代,各个app运行在其自己的VM上,允许一个物理服务器上运行多个系统,并提供了一定的安全级别(各个VM相互隔离)。
现如今,更流行使用容器进行部署。容器类似于 VM(见前文详细比较),但是它们具有轻量级的隔离属性,可以在应用程序之间共享操作系统(OS)。因此,容器被认握芦袭为是轻量级的。容器与 VM 类似,具有自己的文件系统、CPU、内存、进程空间等。
在使用容器进行app部署的今天,需要一个平台对容器进行管理:
通俗一点,我理解的k8s就是对容器进行管理的工具。其中提供的很多功能能够提升部署的鲁棒性以及整体的运行效率:
至此,Docker和k8s的关系也就明了了:
Docker隔离并打包applications及依赖项。
Kubernetes部署协调管理容器,并提供一些其他的相关功能。
k8s为啥不建议用docker了
k8s不建议用docker的原因如下:
1、docker比k8s发布的早;
2、Docker 本身不兼容 CRI 接口,官方并没有实现 CRI 的打算,同时也不支持容器的一些新需渗首求,社区想要摆脱Dockershim的高维护成本,。
3、k8s不能直接与docker通信,只能与 CRI 运行时通信,要与 Docker 通信,就必须使用桥接服务(dockershim),k8s要与docker通信是通过节点代理Kubelet的Dockershim(k8s社区维护的)将请求转发给管理容器的 Docker 服务。
4、Dockershim 一直都是 Kubernetes 为了兼容 Docker 获得市场采取的临时方案(决定)。
5、k8s在过去因为 Docker 的热门而选择它,现前桥在又因为高昂的维护丛悔数成本而放弃它,我们能够从这个过程中体会到容器领域的发展和进步。
6、对于已经统治市场的k8s来说,Docker 的支持显得非常鸡肋,移除代码也就顺理成章。
7、在集群中运行的容器运行时往往不需要docker这么复杂的功能,k8s需要的只是 CRI 中定义的那些接口。
docker+k8s简介
容器是镜像的可运行实例。容器是您机器上的沙盒进程,与主机上的所有其他进程隔离。总而言之,一个容器:
运行容器时,它使用隔离的文件系统。此自定义文件系统由 容器映像 提供。由于镜像包含容器的文件系统,它必须包含运行应用程序所需的一切——所有依赖项、配置、脚本、二进制文件等。镜旦逗虚像还包含容器的其他配置,例如环境变量、运行的默认命令、和其他元数据。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器镜像中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
如果说以 Docker 为代表的容器引擎将软件的发布流程从分发二进制安装包转变为直接分发虚拟化后的整个运行环境,令应用得以实现跨机器的绿色部署;那以 Kubernetes 为代表的容器编排框架,就是把大型软件系统运行所依赖的集群环境也进行了虚拟化,令集群得以实现跨数据中心的绿色部署,并能够根据实际情况自动扩缩。
以容器构建系统
自从 Docker 提出“以封装应用为中心”的容器发展理念,成功取代了“以封装系统为中心”的 LXC 以后,一个容器封装一个单进程应用已经成为被广泛认可的最佳实践。然而单体时代过去之后,分布式系统里应用的概念已不再等同于进程,此时的应用需要多个进程共同协作,通过集群的形式对外提供服务,以虚拟化方法实现这个目标的过程就被称为容器编排(Container Orchestration)。
容器之间顺畅地交互通信是协作的核心需求,但容器协作并不仅仅是将容器以高速网络互相连接而已。如何调度容器,如何分配资源,如何扩缩规模,如何最大限度地接管系统中的非功能特性,让业务系统尽可能指银免受分布式复杂性的困扰都是容器编排框架必须考虑的问题,只有恰当解决了这一系列问题,云原生应用才有可能获得比传统应用更高的生产力
Docker 设计的 Dockerfile 只允许有一个 ENTRYPOINT,这并非无故添加的人为限制,而是因为 Docker 只能通过监视 PID 为 1 的进程(即由 ENTRYPOINT 启动的进程)的运行状态来判断容器的工作状态是否正常,容器退出执行清理,容器崩溃自动重启等操作都必须先判断状态。设想一下,即使我们使用了 supervisord 之类的进程控制器来解决同时启动 Nginx 和 Filebeat 进程的问题,如果因某种原因它们不停发生崩溃、重启,那 Docker 也无法察觉到,它只能观察到 supervisord 的运行状态,
在想要创建的 Kubernetes 对象对应的 .yaml 文件中,需要配置如下的字段:
也需要提供对象的 spec 字段。对象 spec 的精确格式对每个 Kubernetes 对象来说是不同的,包含了特定于该对象的嵌套字段。 Kubernetes API 参考 能够帮助我们找到任何我们想创建的对象的 spec 格式。
Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController 来方便的管理应用。典型的应用场景包括:
“Service” 简写 “svc”。如上文提到的,Pod不能直接提供给外网访问,而是应该使用service。Service就是把Pod暴露出来提供服务,Service才是真正的“服务”,它的中文名就叫“服务”。Service代理Pod集合,对外表现为一个访问入口,访问该入口的请求将经过负载均衡,转发到后端Pod中的容器。
k8s使用service还有一个原因。一般而言,k8s每创建一个新的Pod,它的ip地址都是不一样的,一个Service与特定的一个或者一组Pod挂钩,即使Pod挂掉了,k8s又创建了新的特定的Pod,Service仍然与这个新的Pod挂钩,这样,Pod的ip不模燃一样了,哪怕端口也不一样了,仍然能通过Service来获取Pod所提供的服务。
Service是如何保持这种与特定Pod绑定的关系的呢?那就是“Label”和“Label Selector”,可以给Pod分配特定的Label,然后配置Service,通过“Lable Selector”选择具有这些特定“Label”的Pod来接受请求、提供服务。
为容器设定最大的资源配额的做法从 cgroups 诞生后已经屡见不鲜,但你是否注意到 Kubernetes 给出的配置中有limits和requests两个设置项?这两者的区别其实很简单:requests是给调度器用的,Kubernetes 选择哪个节点运行 Pod,只会根据requests的值来进行决策;limits才是给 cgroups 用的,Kubernetes 在向 cgroups 的传递资源配额时,会按照limits的值来进行设置。
[img]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,这是另一种容器技术。希望我这篇文章中简单的描述能让你对两者有所理解和认识。
k8s和docker区别
k8s和 docker的区别是: docker是一种开放源码应用容器引擎,开发人员可以将其应用打包,发布到流行的 liunx系统或实现虚拟化。
1.k8s是一种开放源码的容器集群管理系统,可实现自动化部署、扩展容量、维护等容器集群功能。Docker容器有别于传统虚拟化方法,传统的虚拟技术,在将物理硬件虚拟为多套硬件之后,需要在每套硬件上分别斗此山部署一个操作系统,然后在这些操作系统上运行相应的应用程序。docker-compose up- d是一个容器。dockerfilebuild是一个空中镜像。dockerfile是自己定义自己的镜像功能。
2.传统的方法是直接在同一个物理机器节点上部署所有应用,因此,每个 App的依赖性是完全相同的,不能实现 App之间的隔离,当然,为了隔离,我们也可以通过创建虚拟机的方式将 App部署到其中,但是这样做过于繁琐,因此 Docker技术要比虚拟机更轻,现在我们通过部署 Container容器的技术来部署应用程序,让所有 Container运行在容器引擎上。容器集群管理系统以 kubernetes为代表,使用 kubernetes来管理 Docker集群,也就是说, Docker可以被看作是 Kubernetes内部使用的低级组件。此外, kubernetes不仅支持 Docker,也支持 Rocket,这是另一种容器技术。
3.而且 Docker容器中的应用程序进程直接运行在宿主机(真实的物理机)的内核上, Docker引擎将一些各自独立的应用程序打包,它们各自独立地独立扒磨地运行于未虚拟化的宿主硬件上,同时每个容器都没有自己的内核,显然比传统虚拟机更轻。
k8s和docker区别是什么?
Kubernetes(k8s)是Google开源的容器集群虚正管理系统(谷歌内部:Borg),它主要用于 容器编排 启动差弯悔容器、自动化部署、扩展和管理容器应用和回收容器。k8s的目标是让部署容器化的应用简单并且高效,k8s提供了应用部署、规划、更新、维护的一种机制。
用kubernetes去管理Docker集群,既可以将Docker看成Kubernetes内部使用的低级别组件;另外,kubernetes不仅仅支持Docker还支持Rocket,这是另一种容器技术。
扩展资料:
从背景上说,Kubernetes是由Google与RedHat公司共同主导的开源“容器编排”项目,它起源于Google公司的Borg系统。
所以它在超大规模集群管理方面的经验要明显优于其他容器编排技术,加上Kubernetes在社区管理方面的民主化,使得它很快打败了Docker公司推出的容器编排解闹渣决方案(Compose+Swarm),从而成为了容器编排领域事实上的标准。
而在功能上Kubernetes是一种综合的基于容器构建分布式系统的基础架构环境,它不仅能够实现基本的拉取用户镜像、运行容器,还可以提供路由网关、水平扩展、监控、备份、灾难恢复等一系列运维能力。
关于k8s和docker和k8s和docker哪个好用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。