Kubernetes 设计概要 已翻译 100%

oschina 投递于 2014/06/11 07:14 (共 12 段, 翻译完成于 06-17)
阅读 3800
收藏 7
2
加载中

概述

Kubernetes基于Docker,其构建了一个集群容器的调度服务。该项目的目标是运行用户在Kubernetes集群上运行一系列容器。系统会自动在这些容器上选择一个工作节点。

由于基于容器的应用和系统不断变大,一些提供便捷智能的工具出现了。这包括容器间发现和彼此的沟通方式,以及与容器管理集的协作方法等类似工作。

当审视系统的架构时,我们希望将架构打破,将其变为那些运行在工作节点和服务上的“master”角色。

Garfielt
Garfielt
翻译于 2014/06/11 10:38
3

关键概念:Pod容器

Docker本身是一个独立的容器,然而Kubernetes则基于一个pod容器。所谓的pod是指一组被安排到相同的物理节点上的容器。除了定义运行在pod的容器,pod中的容器都使用相同的网络命名空间/IP并且定义了一组存储卷。端口则基于每个pod基础上进行部署。

Kubernetes节点

Kuberneter节点包含运行Docker容器的必须服务,并且可以被主系统管理。

Kuberneter节点是基于容器优化的谷歌计算引擎图像的扩展而设计的。随着时间的推移,该计划主要为了对这些图像/节点进行合并,使之以不同的方式使用同样的事情。它包含运行Docker容器的必须服务,并且可以被主系统管理。

当然,每一个节点都运行着Docker。Docker关注下载图像和运行容器的详细信息。

0x0bject
0x0bject
翻译于 2014/06/12 15:29
1

Kubelet

节点上的第二个组件叫做kubelet。Kubelelet是容器代理的逻辑后继者(用Go重写),它是计算引擎图像的一部分。

Kubelet工作于容器清单。容器清单是一个描述了pod的YAML文件(定义在这儿)。Kubelet采用了一组不同机制提供的清单,并确保这些清单描述的容器已启动并继续运行。

容器清单可以为Kubelet提供四种方式:

  • 文件 传递路径作为命令行上的标志。文件每20秒重新检查一次(用标签配置)。

  • HTTP端点 传递HTTP端点作为命令行上的参数。端点没20秒检查一次(也是用标签配置)。

  • etcd服务器 Kubelet将在etcd服务器上做一个看守。查看etcd路径/registry/hosts/$(hostname -f)。因为这是一个看守,所以变动将被注意到并迅速的采取行动。

  • HTTP服务器 kubelet也能监听HTTP并响应简单的API提交的新清单。

地狱星星
地狱星星
翻译于 2014/06/15 16:23
1

Kubernetes代理

每个节点此外还运行着一个简单的网络代理。它反射了定义在 Kubernetes API 中每个节点上的service,并且可以在一组后端做简单的 TCP流转发或TCP循环转发。

Kubernetes Master

Kuberneters 控制被分到了一系列的组件中。这些组件工作在一起,提供统一的集群视图。

etcd

所有持久化的控制状态都被存储在一个etcd的实例中。这提供了一中非常可靠的存储配置数据的方式。通过watch支持,各个协调组件的变更通知可以是非常快速的查看到。



0x0bject
0x0bject
翻译于 2014/06/12 15:43
1

Kubernetes API服务器

此服务器提供了主要的 Kubernetes API。

它将验证和配置3种对象类型的数据:

  • pod:每一个 pod 在 Kubernetes API 级别具有一个描述。

  • service:一个服务是运行在每一个工作节点的代理配置单元。它被命名和指向一个或多个pod。

  • replicationController:一个复制控制器需要一个模板,并确保在任何一个时间运行该模板的是指定的数量的”副本“。如果副本过多,则启动更多控制器;如果副本过少,则杀掉一些replicationController。

除了仅仅服务“其他”操作,校验和在etcd中存储,API服务器还要做其他两件事情:

  • 将pod附着在工作者节点上。目前,调度器相对比较简单。

  • 与服务配置同步pod信息(如pod部署在哪,哪些端口是打开的)。

0x0bject
0x0bject
翻译于 2014/06/16 12:09
1

Kubernetes控制管理服务器

对于Kubernetes的使用来说,repliationController的类型描述并非严格必需。它实际是一个基于简单pod API的服务。在这一层上执行,其逻辑定义的repliationController实际上是被划分到其他的服务器上的。在服务器上查看etcd是为了改变repliationController对象和使用公共的KubernetesAPI去实现响应算法。


溪边九节
溪边九节
翻译于 2014/06/12 22:57
1

关键概念:标签

pod用标签进行组织。每个pod具备一个key/value键值映射的标签。

通过“标签查询”,用户可以识别一系列的pod集合。这个简单的方法是services和replicationControllers如何工作的关键部分。一个service指向的pod集合由一个标签查询定义。类似的,由replicationController监听的pod的数量同样也是由标签查询定义。

标签查询通常会用于,我们讲,在一个应用程序层次上面识别和分组的pod。同样可以用来识别栈,例如dev、staging或者production。

0x0bject
0x0bject
翻译于 2014/06/16 13:03
1

这些设置可以重复。举例来说,一项服务可能会通过tier in (frontend), stack in (pod)来指向所有的pod。那如果现在,你说你有10个pod的副本组成了这一层,但是你希望能够创建一个新的"canary"版本的组件,你可以通过标签 tier=fronted, stack=prod, canary=no 来为 大部分副本设置一个replicationController,另外通过标签tier=fronted, stack=prod, canary=yes为canary设置一个replicationController。现在服务就能够覆盖canary和非canary的pod。但因此你可能会搞混两个replicationController单独进行测试和监测得到的结果。

0x0bject
0x0bject
翻译于 2014/06/16 21:27
1

网络模型

Kuberneters扩展了默认的Docker网络模型。其目标是实现每一个pod都能在一个可通过网络与其他物理电脑和容器进行充分沟通的共享网络空间中有自己的Ip地址。通过这种方式,可以尽可能的减少部署端口。

对于谷歌计算引擎群集配置脚本,通过配置高级路由,使每个 VM 都有额外256个IP地址可以寻址到它。当然,这里面出去了为VM分配的主Ip地址,这个地址是用来接入互联网的。以区别于docker0的网络桥cbr0,通过正确设置Docker,仅作Nat功能,用来疏散网络流量,这里的网络不是指的虚拟网络。

0x0bject
0x0bject
翻译于 2014/06/13 14:00
1

从 '主要 IP'(确保互联网防火墙被正确的配置)进行的端口映射都是Docker在用户模式下实现的。将来,这项工作应该由Kubelet或者Docker通过iptables实现:Issue#15

发布过程

现在"building"或者"releasing"Kubernetes由一些脚本(在release/下)组成,通过创建一个tar包来包含所需的数据,然后将它上传到谷歌云存储。在将来,我们将生成以上描述组件的大部分Docker图像:Issue#19

0x0bject
0x0bject
翻译于 2014/06/16 10:47
1
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(1)

lateron
lateron
一个Pod是有一组工作于同一物理工作节点的容器构成的。
返回顶部
顶部