kubernetes实战一

一、kubernetes是什么
kubernetes是Google开源的容器集群管理系统。它构建在Docker技术之上,为容器化的应用提供资源调度、部署运行、服务发现、扩容缩容等一整套功能,本质上可看作是基于容器技术的Micro—PaaS平台,即第三代PaaS的代表性项目。
kubernetes有着如下的优秀特性:
1.强大的容器编排能力
kubernetes可以说是同Docker一起发展起来的,深度集成了Docker,天热适应容器的特点,设计出强大的容器编排能力,比如容器组合、标签选择和服务发现等,可以满足企业级需求。
2.轻量级
kubernetes遵循微服务架构理论,整个系统划分出各个功能独立的组件,组件之间边界清晰,部署简单,可以轻易地运行在各种系统和环境中。同时,kubernetes中的许多功能都实现了插件化,可以非常方便地进行扩展和替换。
3.开放开源
kubernetes顺应开放开源的趋势,吸引了大批开发者和公司参与其中,协同工作共同构建生态圈。同时,kubernetes同Openstack、Docker等开源社区积极合作、共同发展,企业和个人都可以参与其中并获益。

二、kubernetes的核心概念
1.Pod
Pod是若干相关容器的组合,Pod包含的容器运行在同一台宿主机上,这些容器使用相同的网络命名空间、IP地址和端口,相互之间能通过localhost来发现和通信。另外,这些容器还可共享一块存储卷空间。在kubernetes中创建、调度和管理的最小单位是Pod,而不是容器,Pod通过提供更高层次的抽象,提供了更加灵活的部署和管理模式。
2.Replication
Replication Controller用来控制管理Pod副本(Replica,或者称为实例),Replication Controller确保任何时候kubernetes集群中有指定数量的Pod副本在运行。如果少于指定数量的Pod副本,Replication Controller会启动新的Pod副本,反之会杀死多余的副本以保证数量不变。另外,Replication Controller是弹性伸缩、滚动升级的实现核心。
3.Service
Service是真实应用服务的抽象,定义了Pod的逻辑集合和访问这个Pod集合的策略。Service将代理Pod对外表现为一个单一访问接口,外部不需要了解后端Pod如何运行。这给扩展和维护带来了很多好处,提供了一套简化的服务代理和发现机制。
4.Label
Label是用于区分Pod、Service、Replication Controller的key/value对,实际上,kubernetes中的任意API对象都可以通过Label进行标识。每个API对象可以有多个Label,但是每个Label的key只能对应一个value。Label是Service和Replication Controller运行的基础,它们都通过Label来关联Pod,相比于强绑定模型,这是一种非常好的松耦合关系。
5.Node
kubernetes属于主从分布式集群架构,kubernetes Node运行并管理容器。Node作为kubernetes的操作单元,用来分配给Pod(或者说容器)进行绑定,Pod最终运行在Node上,Node可以认为是Pod的宿主机。

三、kubernetes的架构和组件
kubernetes属于主从分布式架构,节点在角色上分为master和node。架构示意图如下所示:


kubernetes使用etcd作为存储中间件,etcd是一个高可用的键值存储系统。kubernetes使用etcd作为系统的配置存储中心,kubernetes中的重要数据都是持久化在etcd中的,这使得kubernetes架构的各个组件属于无状态,可以更简单地实施分布式集群部署。

kubernetes master作为控制节点,调用管理整个系统,包含以下组件:
1.kubernetes API Server:作为kubernetes系统的入口,其封装了核心对象的增删改查操作,以rest api接口方式提供给外部客户和内部组件调用。它维护的rest对象将持久化到etcd中。
2.kubernetes scheduler:负责集群的资源调度,为新建的pod分配机器。这部分工作分出来变成一个组件,意味着可以很方便地替换成其他的调度器。
3.kubernetes controller manager:负责执行各种控制器,目前已经实现很多控制器来保证kubernetes的正常运行,主要包含的控制器如下所示:
3.1.Replication Controller:管理维护Replication Controller,关联Replication Controller和Pod,保证Replication Controller定义的副本数量与实际运行Pod的数量是一致的。
3.2.Node Controller:管理维护Node,定期检查Node的健康状态,标识出失效的Node。
3.3.Namespace Controller:管理维护Namespace,定期清理无效的Namespace,包括Namespace下的API对象,如Pod、Service和Secret等。
3.4.Service Controller:管理维护Service,为LoadBalancer类型的Service创建管理负载均衡器。
3.5.Endpoints Controller:管理维护Endpoints,关联Service和Pod,创建Endpoint作为Service的后端,当Pod发生变化时,实时刷新Endpoint。
3.6.Service Account Controller:管理维护Service Account,为每个Namespace创建默认Service Account,同时为Service Account创建Service Account Secret。
3.7.Persistent Volume Controller:管理维护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配Persistent Volume进行绑定,为释放的Persistent Volume执行清理回收。
3.8.Daemon Set Controller:管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正常运行Daemon Pod。
3.9.Deployment Controller:管理维护Deployment,关联Deployment和Replication Controller,保证运行指定书目的Pod。当Deployment更新时,控制实现Replication Controller和Pod的更新。
3.10.Job Controller:管理维护Job,为Job创建一次性任务Pod,保证完成Job指定完成的任务数目。
3.11.Pod Autoscaler Controller:实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。

kubernetes node是运行的节点,用于运行管理业务的容器,包含以下组件:
1.kubelet:负责管控容器,kubelet会从kubernetes API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给kubernetes API Server。
2.kubernetes proxy:负责为pod创建代理服务,kubernetes proxy会从kubernetes API Server获取所有的Service,并根据Service信息创建代理服务,实现Service到Pod的请求路由和转发,从而实现kubernetes层级的虚拟转发网络。
3.Docker:kubernetes node是容器运行节点,需要运行docker服务。

posted @ 2017-12-07 11:00  牛头人  阅读(172)  评论(0)    收藏  举报