K8S的基本架构及结构设计解读

举报
大数据小粉 发表于 2017/03/23 16:03:04 2017/03/23
【摘要】 本文先对Kubernetes的基本架构进行简述,并对各主要组件进行功能描述。然后再针对kubernetes的设计进行分析,主要对Pod结构、service对象层以及独立的scheduler的设计原理和意图进行解读。

1 Kubernetes的基本架构及组件功能
Kubernetes是由Google开发的开源容器集群管理系统。作为一个引领潮流的集群管理技术,它开创性地引入了众多新的功能特性,主要有以下几点:
资源调度
自动伸缩
服务发现
部署运行

由于它的强大集群管理功能,K8S目前十分受欢迎,Kubernetes是一个典型的master/slave结构。

1.1 master运行三个组件:
· apiserver:kubernetes系统的入口,封装了核心对象的增删改查操作,以RESTFul接口方式提供给外部客户和内部组件调用。它维护的REST对象将持久化到etcd(一个分布式强一致性的key/value存储)。
· scheduler:负责集群的资源调度,为新建的pod分配机器。
· controller-manager:负责执行各种控制器,目前有两类:
· endpoint-controller:定期关联service和pod(关联信息由endpoint对象维护),保证service到pod的映射总是最新的。
· replication-controller:定期关联replicationController和pod,保证replicationController定义的复制数量与实际运行pod的数量总是一致。

1.2 slave(称作minion)运行两个组件:
· kubelet:负责管控docker容器,如启动/停止、监控运行状态等。它会定期从etcd获取分配到本机的pod,并根据pod信息启动或停止相应的容器。同时,它也会接收apiserver的HTTP请求,汇报pod的运行状态。
· proxy:负责为pod提供代理。它会定期从etcd获取所有的service,并根据service信息创建代理。当某个客户pod要访问其他pod时,访问请求会经过本机proxy做转发。

2 结构设计意图解读

为什么要有单个Pod包含多个容器的结构?

Pod是kubernetes的最小部署和操作单元,单个Pod可以包含一个或多个容器。Pod对外暴露,逻辑上是一个应用实例,而其中的容器不对外暴露,外部无法直接访问。从我的理解来看,k8s把基本操作单元设计成Pod这种豌豆荚形式,可以更好地对接容器时代倡导的微服务架构。在微服务模式下,传统的一体化结构的服务被分解成能独立运行的几个微服务(要了解什么是微服务结构,可以参看http://microservices.io/patterns/microservices.html)。Pod内各容器运行微服务的各个组成模块,各组成模块组合统一对外提供服务,而Pod本身提供如监控等其他辅助功能。所以,从外界的角度来看,一个pod即为一个服务。

为什么要有抽象的Service对象?

Service定义了一个Pod的逻辑集合和访问这个集合的策略,通过后端pod的集合向外提供服务。使用service对象的好处有:
后端pod可以多实例,提供更大的访问容量,以及更好的可靠性(防止机器切换或缩容造成无法连接的情况发生);前端Pod不必关心哪个后端pod在给它提供服务,只需通过Service抽象层和label selector选择后端pod多实例中的一个。Service这一抽象层把外部使用者(前端pod)和后端pod有效隔离开来。即使组成这个后端的Pod变化,前端Pod不会意识到这个变化,也不会跟踪后端。此外,service抽象层可以保证大访问容量下多个后端pod之间的负载均衡。

为什么把Scheduler从Master中剥离,单独成为一个组件?
在Kubernetes中,调度器Scheduler的工作从master剥离出来成为了一个独立的组件。这样至少有两点好处:
1. 脱离了耦合,现有的调度器(调度算法)可以方便地替换为其他调度器。
2. Scheduler成为独立组件,可以方便调度器进行自动伸缩:调度高峰,Scheduler可以多实例化并行处理调度任务,提高响应速度;调度峰谷,可以减少Scheduler实例,减少资源的占用。

作者 | 单海军

转载请注明出处:华为云博客 https://portal.hwclouds.com/blogs

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200