Kubernetes

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

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

历史
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一般包含一个或多个容器,pod可以保证这些容器运行在同一主机节点上。 Pod可以定义存储的卷,例如本地磁盘目录或网络磁盘,并将其暴露给pod中的某个容器。。pod可以通过Kubernetes API手动管理,也可以委托给控制器来實現自動管理。

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

控制器
控制器是将集群的状态转移到所需集群状态的对帐循环機制。

举例而言,ReplicaSet控制器,通过在集群中运行指定数量的特定pod的副本,来实现对pod复制和缩放的管理。如果有节点出现故障,它还能够在其他节点创建pod的副本以替代被故障所影响的原来的pod。 控制器通常使用标签选择器来确定其管理的pod組。

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

控制平面
Kubernetes Master是集群的主要控制单元,其用于管理其工作负载并指导整个系统的通信。Kubernetes控制平面由各自的进程组成,每个组件都可以在单个主节点上运行,也可以在支持高可用性集群 API服务器处理和验证 REST请求并更新 API 对象的状态[https://github.com/coreos/etcd etcd] ,从而允许客户端在Worker节点之间配置工作负载和容器。

调度器
调度器(scheduler)是可扩展组件,它基于剩余可用的资源以及其他约束条件来选择节点,决定pod到哪个节点上运行。调度器跟踪每个节点上的资源利用率,以确保工作负载(workload)不会被分配到超过可用资源的量。为此,调度程其必须知道工作负载的资源需求、节点的可用资源量,以及用户提供的各种约束和策略指令,例如服务质量,亲和性/反亲和性要求,数据本地性等。简言之,调度器的作用是将资源的“供应”与工作负载的“需求”相匹配以維持系統的穩定和可靠。

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

Kubelet會监视pod的状态,如果不处于所需状态,则pod将被重新部署到同一个节点。而关于节点的状态监控,节点状态的消息每隔几秒就會被传送到控制面的API服务器。控制面上检测到节点故障后,会有一个高级的控制器监控到节点状态的变化,并在其他健康的节点上启动原本运行在故障节点上的pod。

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

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

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

注释
參見
*Kubectl

参考文献
外部链接
*
*

评论 (0)

  • 还没有评论,来抢沙发吧。