Kubernetes

维基百科,自由的百科全书
跳到导航 跳到搜索
Kubernetes
Kubernetes logo.svg
初始版本 2014年6月7日,​4年前​(2014-06-07[1]
穩定版本
穩定版本
1.10.3[2]
(2018年5月21日,​2個月前​(2018-05-21
開發狀態 活跃
编程语言 Go
操作系统 跨平台
类型 集群管理
许可协议 Apache许可证 2.0
網站 kubernetes.io
源代码库 github.com/kubernetes/kubernetes

Kubernetes(常简称为K8s)是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。[3]Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用的。它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。[4] 它支持一系列容器工具, 包括Docker等。CNCF於2017年宣布首批Kubernetes認證服務提供商(KCSPs),包含IBM華為、MIRANTIS、inwinSTACK迎棧科技等[5]服務商。

历史[编辑]

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 Hat在OpenShift产品中,[14][15] CoreOS的Tectonic产品中, 以及IBM的IBM云私有产品,[16]以及 VMware 的 PKS 產品中。

设计[编辑]

Kubernetes定义了一组构建块,它们可以共同提供部署、维护和扩展应用程序的机制。组成Kubernetes的组件设计为松耦合和可扩展的,这样可以满足多种不同的工作负载。可扩展性在很大程度上由Kubernetes API提供——它被作为扩展的内部组件以及Kubernetes上运行的容器等使用。[17]

Pod[编辑]

Kubernetes的基本调度单元称为“pod”。它可以把更高级别的抽象内容增加到容器化组件。一个pod一般包含一个或多个容器,这样可以保证它们一直位于主机上,并且可以共享资源。[17]Kubernetes中的每个pod都被分配一个唯一的(在集群内的)IP地址这样就可以允许应用程序使用端口,而不会有冲突的风险。[18] Pod可以定义一个卷,例如本地磁盘目录或网络磁盘,并将其暴露在pod中的一个容器之中。[19]。pod可以通过Kubernetes API手动管理,也可以委托给控制器来管理。[17]

标签和选择器[编辑]

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

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

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

tier=back-end AND release_track=canary

控制器[编辑]

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

服务[编辑]

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

建构[编辑]

Kubernetes architecture diagram

Kubernetes遵循master-slave architecture。Kubernetes的组件可以分为管理单个的 node 组件和控制平面的一部分的组件。[17][25]

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

etcd[编辑]

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

API服务器[编辑]

API服务器是一个关键组件 并使用 Kubernetes APIJSON over HTTP它提供了Kubernetes的内部和外部接口。[17][26] API服务器处理和验证 REST请求并更新 API 对象的状态etcd,从而允许客户端在Worker节点之间配置工作负载和容器。

调度器[编辑]

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

控制器管理[编辑]

控制器管理器是核心的Kubernetes控制器如DaemonSet控制器和复制控制器的进程。控制器与API服务器通信以创建,更新和删除他们管理的资源(pod,服务端点等)[26]

Kubernetes 节点[编辑]

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

Kubelet[编辑]

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

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

容器[编辑]

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

Kube代理[编辑]

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

cAdvisor[编辑]

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

参考文献[编辑]

  1. ^ First GitHub commit for Kubernetes. github.com. 2014-06-07. 
  2. ^ GitHub Releases page. github.com. 2018-05-21. 
  3. ^ kubernetes/kubernetes. GitHub. [2017-03-28] (英语). 
  4. ^ What is Kubernetes?. Kubernetes. [2017-03-31]. 
  5. ^ inwinSTACK. inwinSTACK官方網站. 
  6. ^ Google Made Its Secret Blueprint Public to Boost Its Cloud. [2016-06-27] (美国英语). 
  7. ^ Google Open Sources Its Secret Weapon in Cloud Computing. Wired. [24 September 2015]. 
  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. 
  9. ^ Borg, Omega, and Kubernetes - ACM Queue. queue.acm.org. [2016-06-27]. 
  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]. 
  12. ^ Cloud Native Computing Foundation. 
  13. ^ Deploy and Manage Kubernetes Clusters | Rancher Labs. Rancher Labs. [2017-04-15] (美国英语). 
  14. ^ OpenShift v3 Platform Combines Docker, Kubernetes. blog.openshift.com. [14 August 2014]. 
  15. ^ Why Red Hat Chose Kubernetes for OpenShift. blog.openshift.com. [7 November 2016]. 
  16. ^ IBM Spectrum Conductor for Containers. ibm.com/developerWorks. [2017-05-19] (美国英语). 
  17. ^ 17.0 17.1 17.2 17.3 17.4 17.5 17.6 17.7 17.8 An Introduction to Kubernetes. DigitalOcean. [24 September 2015]. 
  18. ^ 18.0 18.1 Langemak, Jon. Kubernetes 101 – Networking. Das Blinken Lichten. 2015-02-11 [2015-11-02]. 
  19. ^ Strachan, James. Kubernetes for Developers. Medium (publishing platform). 2015-05-21 [2015-11-02]. 
  20. ^ Surana, Ramit. Containerizing Docker on Kubernetes. LinkedIn. 2015-09-16 [2015-11-02]. 
  21. ^ 21.0 21.1 Intro: Docker and Kubernetes training - Day 2. Red Hat. 2015-10-20 [2015-11-02]. 
  22. ^ 22.0 22.1 Overview of a Replication Controller. Documentation. CoreOS. [2015-11-02]. 
  23. ^ Sanders, Jake. Kubernetes: Exciting Experimental Features. Livewyer. 2015-10-02 [2015-11-02]. 
  24. ^ Langemak, Jon. Kubernetes 101 – External Access Into The Cluster. Das Blinken Lichten. 2015-02-15 [2015-11-02]. 
  25. ^ 25.0 25.1 25.2 Kubernetes Infrastructure. OpenShift Community Documentation. OpenShift. [24 September 2015]. 
  26. ^ 26.0 26.1 Marhubi, Kamal. Kubernetes from the ground up: API server. kamalmarhubi.com. 2015-09-26 [2015-11-02]. 
  27. ^ The Three Pillars of Kubernetes Container Orchestration - Rancher Labs. rancher.com. 18 May 2017 [22 May 2017]. 
  28. ^ Marhubi, Kamal. What [..] is a Kubelet?. kamalmarhubi.com. 2015-08-27 [2015-11-02]. 

外部链接[编辑]