For faster navigation, this Iframe is preloading the Wikiwand page for Kubernetes.

Kubernetes

此条目需要精通或熟悉相关主题的编者参与及协助编辑。 (2017年6月17日)请邀请适合的人士改善本条目。更多的细节与详情请参见讨论页
Kubernetes
首次发布2014年6月7日,​10年前​(2014-06-07[1]
当前版本
  • 1.30.2 (2024年6月12日;稳定版本)[2]
编辑维基数据链接
原始码库 编辑维基数据链接
编程语言Go
操作系统跨平台
类型集群管理
许可协议Apache许可证 2.0
网站kubernetes.io

Kubernetes(常简称为K8s)是用于自动部署、扩展和管理“容器化(containerized)应用程式”的开源系统。[4]该系统由Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用。

它旨在提供“跨主机集群的自动部署、扩展以及运行应用程式容器的平台”。[5] 它支持一系列容器工具,包括Docker等。

历史

Google Container Engine演示稿

Kubernetes(在希腊语意为“舵手”或“驾驶员”)由Joe Beda、Brendan Burns和Craig McLuckie创立,[6]并由其他谷歌工程师,包括Brian Grant和Tim Hockin等进行加盟创作,并由谷歌在2014年首次对外宣布 。[7] 该系统的开发和设计都深受谷歌的Borg系统[8][9]的影响,其许多顶级贡献者之前也是Borg系统的开发者。在谷歌内部,Kubernetes的原始代号曾经是Seven,即星际迷航中的Borg(博格人)。[10]Kubernetes标识中舵轮有七个轮辐就是对该项目代号的致意。

Kubernetes v1.0于2015年7月21日发布。[11] 随着v1.0版本发布,谷歌与Linux基金会合作组建了Cloud Native Computing Foundation(CNCF)[12]并将Kubernetes作为种子技术来提供。

Rancher Labs在其Rancher容器管理平台中包含了Kubernetes的发布版。[13]Kubernetes也在很多其他公司的产品中被使用,例如Red HatOpenShift[14][15] CoreOS的Tectonic, IBM的IBM私有云产品,[16],精灵云的EcOS[17],KubeSphere[18],以及 VMware的PKS等等。

而现今资讯界常见的缩写手法“K8s”则是将“ubernete”八个字母缩写为“8”而来。

设计

Kubernetes在设计结构上定义了一系列的构建模块,其目的是为了提供一个可以共同提供部署、维护和扩展应用程式的机制。组成Kubernetes的组件设计概念为松耦合和可扩展的,这样可以使之满足多种不同的工作负载。可扩展性在很大程度上由Kubernetes API提供,此API主要被作为扩展的内部组件以及Kubernetes上运行的容器来使用。[19]

Pod

Kubernetes的基本调度单元称为“pod”。通过该种抽象类别可以把更高级别的抽象内容增加到容器化组件。一个pod一般包含一个或多个容器,这样可以保证它们运行在同一主机节点上,并且可以共享资源。[19]Kubernetes中的每个pod都被分配一个唯一的(在集群内的)IP地址这样就可以允许应用程式使用同一端口,而避免了发生冲突的问题。[20] Pod可以定义一个卷,例如本地磁碟目录或网络磁碟,并将其暴露在pod中的一个容器之中。[21]。pod可以通过Kubernetes API手动管理,也可以委托给控制器来实现自动管理。[19]

标签和选择器

Kubernetes使客户端(用户或内部组件)将称为“标签”的键值对附加到系统中的任何API对象,如pod和节点。相应地,“标签选择器”是针对匹配对象的标签的查询方法。[19]

标签和选择器是Kubernetes中的主要分组机制,用于确定操作适用的组件。[22]

例如,如果应用程式的Pods具有系统的标签 tier (比如"front-end"、"back-end") 和一个 release_track (比如"canary"、"production"),那么对所有"back-end" 和 "canary" 节点的操作可以使用如下所示的标签选择器:[23]

tier=back-end AND release_track=canary

控制器

控制器是通过管理一组pod来实现来将实际集群状态转移到所需集群状态的对帐循环机制[24]。一种控制器指的是一组具有相同特征的“复制控制器”,控制器通过在集群中运行指定数量的pod副本来处理复制和缩放。在基础节点出现故障的情况下,它还可以用于处理创建替换pod。[24]其它控制器也是核心Kubernetes系统的一部分,包括“DaemonSet控制器”为每台机器(或机器的一些子集)上运行的单个pod,和用于运行pod的“作业控制器”。[25] 控制器管理的pod组由作为控制器定义的部分的标签选择器来确定。[23]

服务

Kubernetes服务本质是一组协同工作的pod,类同多层架构应用中的一层。构成服务的pod组通过标签选择器来定义。[19]Kubernetes通过给服务分配静态IP地址和域名来提供服务发现机制,并且以轮循调度英语Round-robin DNS的方式将流量负载均衡到能与选择器匹配的pod的IP地址的网络连接上(即使是故障导致pod从一台机器移动到另一台机器)。[20] 默认情况下,服务任务会暴露在集群中(例如,多个后端pod可能被分组成一个服务,前端pod的请求在它们之间负载平衡);除此以外,服务任务也可以暴露在集群外部(例如,从客户端访问前端pod)。[26]

建构

Kubernetes architecture diagram

Kubernetes遵循主从式架构设计。Kubernetes的组件可以分为管理单个的 node 组件和控制平面部分的组件。[19][27]

Kubernetes Master是集群的主要控制单元,其用于管理其工作负载并指导整个系统的通信。Kubernetes控制平面由各自的进程组成,每个组件都可以在单个主节点上运行,也可以在支持高可用性集群[27]的多个主节点上运行。是Kubernetes控制平面的各种组件如下:

etcd

etcd页面存档备份,存于互联网档案馆 是由CoreOS开发,用于可靠地存储集群的配置数据的一种持久性,轻量型的,分布式的键-值数据存储组件。该组件可表示在任何给定时间点处的集群的整体状态。其他组件在注意到存储的变化之后,会变成相应的状态。[27]

API伺服器

API伺服器是一个关键组件 并使用 Kubernetes APIJSON over HTTP来提供了Kubernetes的内部和外部接口。[19][28] API伺服器处理和验证 REST请求并更新 API 对象的状态etcd页面存档备份,存于互联网档案馆),从而允许客户端在Worker节点之间配置工作负载和容器。

调度器

T调度程序是可插拔式组件,其基于资源可用性来选择未调度的pod(由调度程序管理的基本实体)应该运行哪个节点。调度程序跟踪每个节点上的资源利用率,以确保工作负载不会超过可用资源。为此,调度程序必须知道资源需求,资源可用性以及各种其他用户提供的约束和策略指令,例如服务质量,亲和力/反关联性要求,数据位置等。实质上,调度程序的作用是将资源“供应”与工作负载“需求”相匹配以维持系统的稳定和可靠。 [29]

控制器管理

控制器管理器是核心Kubernetes控制器,其包括DaemonSet控制器和复制控制器等。该控制器可与API伺服器进行通信以在需要时创建,更新和删除他们管理的资源(pod,服务端点等)[28]

Kubernetes 节点

Node也称为Worker或Minion,是部署容器(工作负载)的单机器(或虚拟机)。集群中的每个节点都必须具备容器的运行环境(runtime) ——比如 Docker,以及下面提到的其他组件,以便与这些容器的网络配置进行通信。

Kubelet

Kubelet负责每个节点的运行状态(即确保节点上的所有容器都正常运行)。它按照控制面板的指示来处理启动,停止和维护应用程式容器(按组织到pod中)。[19][30]

Kubelet会监视pod的状态,如果不处于所需状态,则pod将被重新部署到同一个节点。节点状态每隔几秒就会传递消息至中继主机。主控器检测到节点故障后,复制控制器将观察此状态更改,并在其他健康节点上启动pod。[来源请求]

容器

容器从属于pod。在运行应用、库及其依赖的微服务中,容器是最低层级的。通过绑定一个外部IP,容器可以被外网访问。

Kube代理

Kube代理是网络代理负载均衡的实现,支持服务抽象以及其他网络操作。[19]根据传入请求的IP和端口,该组件会将流量转发到指定的合适的容器中。

cAdvisor

cAdvisor 是监视和收集例如每个节点上的容器的CPU,内存,文件和网络使用情况等的资源使用情况和性能指标的代理组件。

参见

  • Kubectl

参考文献

  1. ^ First GitHub commit for Kubernetes. github.com. 2014-06-07 [2017-06-17]. (原始内容存档于2017-03-01). 
  2. ^ Release 1.30.2. 2024年6月12日 [2024年6月22日]. 
  3. ^ GitHub Releases page. github.com. 2022-10-13 [2022-10-13]. (原始内容存档于2017-03-01). 
  4. ^ kubernetes/kubernetes. GitHub. [2017-03-28]. (原始内容存档于2017-04-21) (英语). 
  5. ^ What is Kubernetes?. Kubernetes. [2017-03-31]. (原始内容存档于2019-05-30). 
  6. ^ Google Made Its Secret Blueprint Public to Boost Its Cloud. [2016-06-27]. (原始内容存档于2016-07-01) (美国英语). 
  7. ^ Google Open Sources Its Secret Weapon in Cloud Computing. Wired. [24 September 2015]. (原始内容存档于2015-09-10). 
  8. ^ Abhishek Verma; Luis Pedrosa; Madhukar R. Korupolu; David Oppenheimer; Eric Tune; John Wilkes. Large-scale cluster management at Google with Borg. Proceedings of the European Conference on Computer Systems (EuroSys). April 21–24, 2015 [2017-06-17]. (原始内容存档于2017-07-27). 
  9. ^ Borg, Omega, and Kubernetes - ACM Queue. queue.acm.org. [2016-06-27]. (原始内容存档于2016-07-09). 
  10. ^ Early Stage Startup Heptio Aims to Make Kubernetes Friendly. [2016-12-06]. [失效链接]
  11. ^ As Kubernetes Hits 1.0, Google Donates Technology To Newly Formed Cloud Native Computing Foundation. TechCrunch. [24 September 2015]. (原始内容存档于2020-11-17). 
  12. ^ Cloud Native Computing Foundation. [2017-06-17]. (原始内容存档于2017-07-03). 
  13. ^ Deploy and Manage Kubernetes Clusters | Rancher Labs. Rancher Labs. [2017-04-15]. (原始内容存档于2017-04-16) (美国英语). 
  14. ^ OpenShift v3 Platform Combines Docker, Kubernetes. blog.openshift.com. [14 August 2014]. (原始内容存档于2015-07-06). 
  15. ^ Why Red Hat Chose Kubernetes for OpenShift. blog.openshift.com. [7 November 2016]. (原始内容存档于2017-02-21). 
  16. ^ IBM Spectrum Conductor for Containers. ibm.com/developerWorks. [2017-05-19]. (原始内容存档于2021-01-28) (美国英语). 
  17. ^ Ghostcloud Enterprise Container OS. www.ghostcloud.cn. [2019-07-24]. (原始内容存档于2020-11-27) (美国英语). 
  18. ^ Open Source Enterprise Kubernetes Platform | KubeSphere. kubesphere.io. [2022-02-21]. (原始内容存档于2022-05-04) (美国英语). 
  19. ^ 19.0 19.1 19.2 19.3 19.4 19.5 19.6 19.7 19.8 An Introduction to Kubernetes. DigitalOcean. [24 September 2015]. (原始内容存档于2015-10-01). 
  20. ^ 20.0 20.1 Langemak, Jon. Kubernetes 101 – Networking. Das Blinken Lichten. 2015-02-11 [2015-11-02]. (原始内容存档于2015-10-25). 
  21. ^ Strachan, James. Kubernetes for Developers. Medium (publishing platform). 2015-05-21 [2015-11-02]. (原始内容存档于2015-09-07). 
  22. ^ Surana, Ramit. Containerizing Docker on Kubernetes. LinkedIn. 2015-09-16 [2015-11-02]. 
  23. ^ 23.0 23.1 Intro: Docker and Kubernetes training - Day 2. Red Hat. 2015-10-20 [2015-11-02]. (原始内容存档于2015-10-29). 
  24. ^ 24.0 24.1 Overview of a Replication Controller. Documentation. CoreOS. [2015-11-02]. (原始内容存档于2015-09-22). 
  25. ^ Sanders, Jake. Kubernetes: Exciting Experimental Features. Livewyer. 2015-10-02 [2015-11-02]. (原始内容存档于2015-10-20). 
  26. ^ Langemak, Jon. Kubernetes 101 – External Access Into The Cluster. Das Blinken Lichten. 2015-02-15 [2015-11-02]. (原始内容存档于2015-10-26). 
  27. ^ 27.0 27.1 27.2 Kubernetes Infrastructure. OpenShift Community Documentation. OpenShift. [24 September 2015]. (原始内容存档于2015-07-06). 
  28. ^ 28.0 28.1 Marhubi, Kamal. Kubernetes from the ground up: API server. kamalmarhubi.com. 2015-09-26 [2015-11-02]. (原始内容存档于2015-10-29). 
  29. ^ The Three Pillars of Kubernetes Container Orchestration - Rancher Labs. rancher.com. 18 May 2017 [22 May 2017]. (原始内容存档于2017-06-24). 
  30. ^ Marhubi, Kamal. What [..] is a Kubelet?. kamalmarhubi.com. 2015-08-27 [2015-11-02]. (原始内容存档于2015-11-13). 

外部链接

{{bottomLinkPreText}} {{bottomLinkText}}
Kubernetes
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?