**Kubernetes**（常简称为**K8s**）是用于自动部署、扩展和管理「容器化（containerized）应用程序」的开源系统。該系統由Google设计并捐赠给Cloud Native Computing Foundation（今属Linux基金会）来使用。

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

历史
--

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

Kubernetes v1.0于2015年7月21日发布。 随着v1.0版本发布，谷歌与Linux 基金会合作组建了Cloud Native Computing Foundation（CNCF）并將Kubernetes作为种子技术来提供。

Rancher Labs在其Rancher容器管理平台中包含了Kubernetes的发布版。Kubernetes也在很多其他公司的产品中被使用，例如Red Hat的OpenShift， CoreOS的Tectonic， IBM的IBM私有雲产品，，精灵云的EcOS，KubeSphere，以及 VMware的PKS等等。

而現今資訊界常見的縮寫手法「K8s」則是將"ubernete"八個字母縮寫為"8"而來。

设计
--

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

### Pod

Kubernetes的基本调度单元称为"pod"。通過該種抽象類別可以把更高级别的抽象内容增加到容器化组件。一个pod一般包含一个或多个容器，这样可以保证它们运行在同一主机节点上，并且可以共享资源。Kubernetes中的每个pod都被分配一个唯一的（在集群内的）IP地址这样就可以允许应用程序使用同一端口，而避免了發生冲突的問題。 Pod可以定义一个卷，例如本地磁盘目录或网络磁盘，并将其暴露在pod中的一个容器之中。。pod可以通过Kubernetes API手动管理，也可以委托给控制器来實現自動管理。

### 标签和选择器

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

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

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

> `tier=back-end AND release_track=canary`
> 
> 

### 控制器

控制器是通过管理一组pod来实现來将实际集群状态转移到所需集群状态的对帐循环機制。一种控制器指的是一組具有相同特徵的"复制控制器"，控制器通过在集群中运行指定数量的pod副本来处理复制和缩放。在基础节点出现故障的情況下，它还可以用於处理创建替换pod。其它控制器也是核心Kubernetes系统的一部分，包括"DaemonSet控制器"为每台机器（或机器的一些子集）上运行的單個pod，和用于运行pod的"作业控制器"。 控制器管理的pod組由作为控制器定义的部分的标签选择器來确定。

### 服务

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

建构
--

Kubernetes architecture diagram
Kubernetes遵循主從式架構設計。Kubernetes的组件可以分为管理单个的 node 组件和控制平面部分的组件。

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

### etcd

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

### API服务器

API服务器是一个关键组件 并使用 Kubernetes API 和 JSON over HTTP來提供了Kubernetes的内部和外部接口。 API服务器处理和验证 REST请求并更新 API 对象的状态etcd （页面存档备份，存于），从而允许客户端在Worker节点之间配置工作负载和容器。

### 调度器

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

### 控制器管理

控制器管理器是核心Kubernetes控制器，其包括DaemonSet控制器和复制控制器等。該控制器可与API服务器進行通信以在需要時创建，更新和删除他们管理的资源（pod，服务端点等）

### Kubernetes 节点

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

#### Kubelet

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

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

#### 容器

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

#### Kube代理

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

#### cAdvisor

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

參見
--

* Kubectl

参考文献
----

1. ↑ . github.com. 2014-06-07  [2017-06-17]. （原始内容存档于2017-03-01）.
2. ↑ . 2023年9月13日  [2023年9月18日].
3. ↑ . GitHub.  [2017-03-28]. （原始内容存档于2017-04-21） （英语）.
4. ↑ . Kubernetes.  [2017-03-31]. （原始内容存档于2019-05-30）.
5. ↑ .  [2016-06-27]. （原始内容存档于2016-07-01） （美国英语）.
6. ↑ . Wired.  [24 September 2015]. （原始内容存档于2015-09-10）.
7. ↑  Abhishek Verma; Luis Pedrosa; Madhukar R. Korupolu; David Oppenheimer; Eric Tune; John Wilkes.. Proceedings of the European Conference on Computer Systems (EuroSys). April 21–24, 2015  [2017-06-17]. （原始内容存档于2017-07-27）.
8. ↑ . queue.acm.org.  [2016-06-27]. （原始内容存档于2016-07-09）.
9. ↑ .  [2016-12-06]. []
10. ↑ . TechCrunch.  [24 September 2015]. （原始内容存档于2020-11-17）.
11. ↑ .  [2017-06-17]. （原始内容存档于2017-07-03）.
12. ↑ . Rancher Labs.  [2017-04-15]. （原始内容存档于2017-04-16） （美国英语）.
13. ↑ . blog.openshift.com.  [14 August 2014]. （原始内容存档于2015-07-06）.
14. ↑ . blog.openshift.com.  [7 November 2016]. （原始内容存档于2017-02-21）.
15. ↑ . ibm.com/developerWorks.  [2017-05-19]. （原始内容存档于2021-01-28） （美国英语）.
16. ↑ . www.ghostcloud.cn.  [2019-07-24]. （原始内容存档于2020-11-27） （美国英语）.
17. ↑ . kubesphere.io.  [2022-02-21]. （原始内容存档于2022-05-04） （美国英语）.
18. 1 2 3 4 5 6 7 8 9 . DigitalOcean.  [24 September 2015]. （原始内容存档于2015-10-01）.
19. 1 2  Langemak, Jon.. Das Blinken Lichten. 2015-02-11  [2015-11-02]. （原始内容存档于2015-10-25）.
20. ↑  Strachan, James.. Medium (publishing platform). 2015-05-21  [2015-11-02]. （原始内容存档于2015-09-07）.
21. ↑  Surana, Ramit.. LinkedIn. 2015-09-16  [2015-11-02].
22. 1 2 . Red Hat. 2015-10-20  [2015-11-02]. （原始内容存档于2015-10-29）.
23. 1 2 . Documentation. CoreOS.  [2015-11-02]. （原始内容存档于2015-09-22）.
24. ↑  Sanders, Jake.. Livewyer. 2015-10-02  [2015-11-02]. （原始内容存档于2015-10-20）.
25. ↑  Langemak, Jon.. Das Blinken Lichten. 2015-02-15  [2015-11-02]. （原始内容存档于2015-10-26）.
26. 1 2 3 . OpenShift Community Documentation. OpenShift.  [24 September 2015]. （原始内容存档于2015-07-06）.
27. 1 2  Marhubi, Kamal.. kamalmarhubi.com. 2015-09-26  [2015-11-02]. （原始内容存档于2015-10-29）.
28. ↑ . rancher.com. 18 May 2017  [22 May 2017]. （原始内容存档于2017-06-24）.
29. ↑  Marhubi, Kamal.. kamalmarhubi.com. 2015-08-27  [2015-11-02]. （原始内容存档于2015-11-13）.

外部链接
----

* 官方网站 在维基数据上编辑此内容
* GitHub上的kubernetes頁面
* Kubernetes（K8s）是什麼？基礎介紹+3大優點解析 （页面存档备份，存于）

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
虛擬化技術 |
| --- |
|  |
| 平台虛擬化軟體比較（英语：） |
|  |
| 硬體虛擬化（Hypervisor） | 

|  |  |
| --- | --- |
| 原生虛擬化 | 
* Adeos（英语：）
* CP/CMS（英语：）
* Hyper-V
* KVM
	+ Red Hat Enterprise Virtualization（英语：）
* LDoms / Oracle VM Server for SPARC（英语：）
* LynxSecure（英语：）
* SIMMON（英语：）
* VMware ESX（英语：）
	+ VMware vSphere（英语：）
	+ VCloud Air
* VMware Infrastructure（英语：）
* Xen
	+ Oracle VM
	+ XenClient（英语：）
* XtratuM（英语：）
* z/VM（英语：）

 |
|  |
| 需要宿主作業系統 | 

|  |  |
| --- | --- |
| 專用 | 
* Basilisk II（英语：）
* bhyve（英语：）
* Bochs
* Cooperative Linux
* DOSBox
* DOSEMU（英语：）
* L4Linux（英语：）
* Mac-on-Linux（英语：）
* Mac-on-Mac（英语：）
* PCem（英语：）
* SheepShaver
* SIMH（英语：）
* Windows on Windows
	+ DOS虚拟机（英语：）
* Win4Lin（英语：）

 |
|  |
| 獨立 | 
* Microsoft Virtual Server（英语：）
* Parallels Workstation（英语：）
* Parallels Desktop
* Parallels Server（英语：）
* PearPC
* QEMU
* VirtualBox
* Virtual Iron（英语：）
* VMware Fusion
* VMware Workstation Player
* VMware Server
* VMware Workstation
* Windows Virtual PC

 |

 |
|  |
| 工具 | 
* Ganeti（英语：）
* oVirt（英语：）
* Virtual Machine Manager

 |

 |
|  |
| 作業系統層虛擬化 | 
* 基於Cgroups
	+ Container Linux
	+ lmctfy（英语：）
	+ Linux-VServer（英语：）
	+ LXC
	+ Docker
	+ OpenVZ
		- Virtuozzo（英语：）
* FreeBSD jail
* iCore Virtual Accounts（英语：）
* Kubernetes
* Linux namespaces（英语：）
* Solaris Containers
* Workload Partitions（英语：）

 |
|  |
| 桌面虛擬化 | 
* Citrix XenApp（英语：）
* 思杰系统
* 遠端桌面
* VMware Horizon
* Ulteo

 |
|  |
| 應用程式虛擬化（英语：）（沙盒） | 
* Ceedo（英语：）
* Citrix XenApp（英语：）
* Dalvik
* InstallFree（英语：）
* 微軟App-V（英语：）
* 遠端桌面
* Spoon（英语：）
* Symantec Workspace Virtualization（英语：）
* VMware ThinApp（英语：）
* ZeroVM（英语：）

 |
|  |
| 网络虚拟化（英语：） | 
* DOVE（英语：）
* Network Virtualization using Generic Routing Encapsulation‎（英语：）
* Open vSwitch（英语：）
* Virtual security switch（英语：）
* 虛擬局域網擴展 (VXLAN)

 |
|  |
| 參見: 模擬器軟體列表（英语：） |

 |


|  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
Linux容器 |
| --- |
|  |
| 作業系統層虛擬化 |
|  |
| 容器宿主操作系统 | 
* Linux
* Container Linux
* RancherOS

 |
|  |
| 容器引擎 | 
* Docker
* rkt

 |
|  |
| 容器集群管理器 | 
* Apache Mesos
* Kubernetes
* Rancher
* Nomad
* Amazon EC2 Container Service
* Docker UCP
* Docker Swarm
* StackEngine
* Tutum

 |

 |