Kubernetes的10个基本事实!你知道几个?k8s与Docker又有何不同?

无论您是Kubernetes的新手还是只是想获得更多知识,这篇文章都会帮到您!

Kubernetes是一个增长的趋势。近年来,K8s技术经历了从小型开源Google项目到Cloud Native Computing Foundation(CNCF)的主要项目的飞速发展。

如今,许多组织和公司正在使用它来自动化容器化应用程序的管理。但是,有关Kubernetes的问题很多,在本文中,我将尝试回答最受欢迎的问题

什么是Kubernetes?

Kubernetes是一个集群编排系统。它是从头开始设计的,是一个用于从容器构建分布式应用程序的环境。

Kubernetes的主要任务是构建和管理分布式系统。Kubernetes的目标是简化整个应用程序的组织和调度。从总体上讲,这是集群的操作系统。

基本上,它使您不必担心数据中心中的哪些特定计算机运行应用程序的组件。

此外,它提供了用于在这些计算机上测试和复制应用程序的通用原语。以及将应用程序连接到微服务的服务,以便应用程序中的每一层都与其他层分开,以便您可以彼此独立地扩展/更新/维护它们。

尽管您可以在应用程序级别执行许多这些功能,但此类解决方案通常是一次性的且不可靠;当业务流程系统负责运行应用程序并且您只考虑应用程序代码时,最好将问题分开。

Kubernetes为什么缩写为K8?

您是否想知道Kubernetes为什么称K8?

在80年代末期出现了所谓的数字代名词。关于人们实际上是如何开始使用它们的,有很多不同的故事。

但是所有这些故事都具有相同的想法,即简化沟通,IT公司的人们开始使用数字缩写形式来缩短单词:以第一个和最后一个字母为准,并在它们之间放多个其他字母。

例如,术语“ i18n”源自“国际化”的拼写,即字母“ i”加18个字母加字母“ n”。与Kubernetes类似,“ k”加8个字母加字母“ s”。

Kubernetes与Docker Swarm有何不同?

Docker Swarm由Docker Inc.创建,成长为Docker的协调器。Kubernetes最初是由Google制造供内部使用(Borg项目),现在整个开放源代码世界都在为此工作。Docker Swarm是一个封闭的系统。

两者都试图解决同一问题-在大量主机上进行容器编排。这是两个根本相似的系统,仍然存在差异。

  • Kubernetes的发展速度更快,并且占据了大部分市场(Kubernetes 51%和Docker Swarm 11%)。
  • Docker Swarm的可扩展性较差,并且没有K8s内置的负载平衡支持。实际上,Docker Swarm仅提供一种负载均衡方法,该方法基于为集群中包含的每台服务器上的每个服务打开一个固定端口。
  • 与Docker Swarm不同,K8s为内部(东西方)和外部负载平衡(南北)提供了内置实现。内部平衡由Service对象提供,使您可以通过引用Service对象从群集中的一个应用程序访问另一应用程序的所有活动实例。该服务是一个内部负载平衡器,它每时每刻都知道应用程序的哪个后端处于活动状态,哪个不起作用,仅将请求发送到活动副本。
  • NodePort概念(在负载均衡器上打开固定端口)以及内置的LoadBalancer原语提供了Kubernetes中的外部负载均衡,如果Kubernetes在云环境中工作,它可以在云中自动创建负载均衡器。 ,例如AWSGoogle CloudMS AzureOpenStackHidora等。
  • Docker Swarm不支持​​自动扩展,也不支持自动扩展容器或自动扩展节点。
  • Kubernetes支持所有可能的自动缩放器:归因于Vertical Pod Autoscaler的垂直缩放,水平自动缩放应用程序(Horizo​​ntal Pod Autoscaler)以及基于Cluster AutoScaler的群集本身的自动缩放(节点数)。仅当您在云中运行Kubernetes时,Cluster Autoscaler才有效。
  • Docker Swarm难以监控。您只能在专有工具的帮助下监视容器。
  • Docker Swarm本身不支持有状态应用程序的永久存储。您需要使用网络连接存储,这不适用于所有类型的工作负载。
  • Docker Swarm仅适用于Docker容器,而K8s可以适用于许多容器运行时选项,例如Docker,Rocket,ContainerD等。这一点非常重要,因为它不依赖于特定的Docker功能(某些功能仅在Docker EE中可用)。

为什么需要容器编排?

  • 将应用程序部署到服务器,而不必担心特定的服务器。

当您有一个包含多个服务(由容器组成)的微服务应用程序时,需要容器编排器。还有另一部分–该应用程序可以在其上运行的服务器。

容器协调器执行许多任务。第一项任务是,首先考虑到服务器的负载,将应用程序的容器放置在所需数量的服务器上,以防止容器到达过载的服务器,同时还要考虑服务器的内存和处理器要求。特定的容器。

  • 上下水平缩放应用程序。

还有另一种情况,当应用程序需要水平缩放时,将添加更多相同类型的容器。

容器编排器考虑到每个目标服务器上消耗的资源以及每个应用程序的资源需求,执行按比例缩放应用程序的任务。

在这种情况下,协调器可以支持所谓的亲和力和反亲和力原则。最后一个允许我们保证,例如,所有相同类型的容器将在不同的物理服务器上启动。

  • 如果应用程序所在的服务器发生故障,请还原该应用程序。

这称为容器自动修复或重新计划。

如果服务器出现故障,则需要正确还原应用程序。K8可以监视应用程序的每个容器/容器,以查看该容器/容器是否处于活动状态。如果没有,Kubernetes将重新启动它。

实际上,在K8s中,此功能称为“保持正确数量的副本”。

对于Kubernetes,您可以说:“我想有5个WordPress容器”,而K8s将确保您始终有5个容器。

如果突然少于5个容器,Kubernetes将启动一个新容器以保持数量。这对于处理应用程序和预测负载很重要。

K8s还监视应用程序在其上运行的服务器的状态,如果服务器已死,它将在其他服务器上重新计划其所有容器。

K8与OpenStack相比如何?

Kubernetes旨在管理容器编排,而OpenStack最初旨在管理虚拟机。换句话说,OpenStack用于管理传统的虚拟基础架构,而Kubernetes用于容器化。

这是两个不同的系统,都是社区开发的开源系统。不同之处在于Kubernetes最初是由Google以Borg的名义长期开发的,在此期间它已成为稳定的服务;即使第一个版本也具有丰富的功能并且相当稳定。

OpenStack几乎是由社区从零开始开发的,而且OpenStack十分零散。

社区和大约30个不同的公司都制作了自己的版本。K8s更像苹果,而OpenStack更像Android。在生产中运行Kubernetes的开销成本和上市时间要比OpenStack低得多。

同时,OpenStack管理虚拟机,例如KVM。Kubernetes可以在OpenStack之上运行,这是云提供商的典型方案。

Kubernetes是否仅适用于无状态应用程序?

Kubernetes不仅适用于无状态应用程序。无状态应用程序的一个示例通常是执行某些功能,提供HTTP页面并且不自行存储其状态的Web应用程序。

它最初是为无状态应用程序制作的,并且对有状态应用程序的支持非常有限且不可靠。

Kubernetes支持持久卷和持久卷声明的概念。它还支持各种类型的卷,例如可以以独占模式安装到Pod的块存储,以及可以使用NFS协议同时安装到多个Pod的文件存储。

因此,您可以在Kubernetes中安全地放置数据库或持久性消息队列。

我可以将其用于混合云部署吗?

最初,K8仅支持部署在一个数据中心中,无法以混合模式工作。

之后,开发了Kubernetes联合会,当在不同数据中心中有多个由一个控制面板控制的Kubernetes集群时,它可以组织一种混合方案。

实际上,其中一个集群成为主要的联合集群,并且在其上安装了混合云控制面板。使用它,您可以管理彼此远离的多个群集中的部署。

但是在多云场景中也是可能的。如果您有一个本地群集,一个在Amazon上的群集,另一个在Google Cloud上,则将全部支持。

对于多个云提供商,您无需使应用程序适应于可在Google,Amazon中运行的多个远程集群同时工作,因为Kubernetes会正确地为每个云解释其资源中的注释。

Kubernetes federation v1项目已经开发了很长时间,并且陷入僵局,而Kubernetes federation v2目前正在开发中,它从根本上以不同的方式与混合云一起工作。

我是否需要管理一个外部负载均衡器才能在Kubernetes中运行我的应用程序?

在Docker Swarm的情况下,有必要管理一个外部负载平衡器以平衡负载。

K8s包含基于服务概念的自动负载平衡,此外,还包含一个入口控制器,该入口控制器支持按DNS名称和路径进行负载平衡。

支持许多选项。云负载平衡器还集成了:如果您在Amazon,Google Cloud或OpenStack中工作,则可以与这些负载平衡器进行集成。

Pod和容器之间有什么区别?

问题在于,来自Docker世界的人们只能使用容器。

他们正在尝试转移使用Docker Swarm和容器与Kubernetes一起工作时获得的知识。但是这种方式行不通。在Kubernetes中,控制单元是容器,而不是容器。

容器是一组执行相同功能的一个或多个容器。这是单个应用程序的组件。Kubernetes管理吊舱,秤和监视其状况。Kubernetes中的应用程序按Pod的数量(而不是容器)进行缩放。

通常在一个吊舱中只有一个容器,但是可能有多个容器,并且这组容器被严格固定。内部pod容器不会以任何方式缩放,因此在设计应用程序时应考虑这一点。

Kubernetes如何简化容器化部署?

Kubernetes开箱用的几个优点

  • 在Kubernetes中,内置了服务发现功能。换句话说,当新服务出现时,会为其分配一个唯一的域名,其他服务可以在etcd中获取有关该服务的信息。
  • 第二点是,Kubernetes为支持容器应用程序不同部署策略的应用程序部署提供了灵活的清单。Kubernetes具有针对A / B测试的canary部署支持。还内置了运行状况检查和基于Prometheus的监视。
  • Kubernetes使用滚动更新策略来推出Pod版本更新。滚动更新策略通过在执行更新时随时保持某些实例的运行并运行,有助于从停机中节省应用程序。当新部署版本的新Pod准备好处理流量时,系统会先将其激活,然后再关闭旧Pod。

福利分享:

马哥教育2020持续更新Linux学习教程视频实战进阶提升(学习路线+课程大纲+视频教程+面试题+学习工具+大厂实战手册)

目前马哥更新了2020年部分福利课程,多数课程限时免费,点击链接:https://wx7dcc75bb5e655e9b.h5.xiaoe-tech.com 小伙伴们可以随时随地学习,利用碎片化时间提升自己!

你可能感兴趣的:(Kubernetes的10个基本事实!你知道几个?k8s与Docker又有何不同?)