Kubernetes中的“部署”和“服务”有什么区别?


回答 1:

两者都是Kubernetes中的抽象。

部署:

部署是集群中的一个对象,代表一组正在运行的Pod的集合,这是一个逻辑组,具有一些绑定的管理功能。 部署具有有关群集状态的语义。

例如,假设需要支持集群中一组服务的监视指标。 ops团队开发了一个称为metrics-analyzer 1.0.0的docker映像,该映像接收以下配置:需要收集所有代理的位置,组件应收集的频率以及每个代理提供哪些端点的度量。

现在,如果团队只是编写一个Pod ma.yml并将其部署到kubernetes,那么他们很可能最终会在kubernetes可以调度的任何节点上运行单个pod。 如果操作失败,或者需要升级指标分析器,或者kubernetes需要重新分配资源(或者我遗漏了许多其他事件),则需要将pod驱逐,从而导致指标收集停机。 该事件可能导致服务弃用,高管可能会打电话给团队说:我们需要度量标准,只需对其进行修复。

部署可以帮助您创建一组带有标签的指标分析器容器,以使它们能够管理您的指标分析器,而无需关心每个副本的运行情况。

本质上,部署告诉Kubernetes如何使用标签匹配容器,运行所需的副本数量以及如何升级它们。 升级是本文比我更好地讨论的一个主要主题。Kubernetes部署策略-Container Solutions

同样,在部署规范中,也可以指定pod规范,以避免为同一目标而处理不同的资源文件。 最后,团队只需要部署指标分析器,对吗?

服务:

另一方面,服务允许将Pod分组,以实现网络通信的主要目的。

服务领域是为一组Pod的可访问性提供一组规则。 在指定服务时设置的规则的一些示例如下:

  1. 哪些Pod与服务组匹配。服务将使用哪种类型的网络地址?Nodeport。 集群中的所有节点都有一个专用于转发到与该服务匹配的Pod的端口。集群IP。 有一个专用的群集IP,用于访问与service.Load Balancer匹配的Pod。 使用外部网络LB将网络外部的Pod公开。外部名称。 在群集中公开具有限定名称的外部URI源(例如db-service转到32dfs-324qa.domain.com)。协议和端口。 请求服务名称时应将流量重定向到何处实际的服务网络名称,例如metrics-analyzer。

服务允许其他Pod与集群的组件进行通信,而无需知道集群中的实际IP。

因此,如您所见,部署具有交付语义,当您需要增加副本或减少副本以交付新版本时,它们就很重要,它们指定了升级吊舱的工作方式。

服务主要是一种网络结构。 他们模拟了如何通过群集网络以及从外界访问群集中的Pod。


回答 2:

我只是想添加其他答案,并尝试将部署和服务与人们习惯于容器管理系统出现之前所使用的东西联系起来。

部署:

从概念上讲,部署定义了如何部署应用程序。 它将定义在Kubernetes中部署应用程序时应运行多少个应用程序实例。 它还定义了用于帮助正在运行的应用程序的其他参数和设置。

在Kubernetes中运行部署时,它将创建Pod。 一个Pod由一个或多个容器组成(最受欢迎的是Docker)。 在许多情况下,每个吊舱只有一个容器,并且通常以正在运行的Docker映像的形式来作为您的应用程序。 为了将容器与传统服务器部署相关联,容器的操作类似于虚拟机(VM)或物理服务器。

如果您的部署指出应运行的应用程序数量不止1个(高可用性或HA),则将创建更多的容器,直到满足应用程序规模要求为止。

现在,您有一个或多个应用程序实例正在运行,您需要一种连接到那些正在运行的应用程序的方法。 这就是“服务”发挥作用的地方。

服务:

Kubernetes中的服务定义实际上只是Kubernetes内部的负载均衡器。 发出应用程序请求后,该请求将传递到应用程序服务,该服务知道哪些应用程序(吊舱)可用以及如何向该应用程序发送流量。 通常,服务以循环方式发送流量,这意味着请求分散在所有正在运行的应用程序(窗格)中。

以我的经验,Docker和Kubernetes都减少了软件团队的开发时间,并使应用程序管理比过去更轻松。 如果正确编写软件,它将可以与Kubernetes很好地扩展。

如果您希望Docker容器与Kubernetes一起工作,可以在http://BroadIQ.com上对其进行测试。 另外,请阅读“运行Rocket.Chat的简单指南”(https://medium.com/@jlutz_72580 / ...)文章,它引导您完成在Kubernetes上部署Docker容器应用程序的步骤。


回答 3:

并不是那么困难:

  • Kubernetes部署是一个抽象,描述了您的Kubernetes集群,如何部署您的应用程序.Kubernetes Service是一个抽象,描述了您的Kubernetes集群,如何将应用程序公开(使其可用)到外部(网络) ,您的集群已连接到)