抽空学习了一下Kubernetes,感受和大数据领域内集群的资源管理、任务调度等有殊途同归之处,简单总结一下备忘。缓存
Kubernetes是一个工业级的容器编排平台,单词有点长,经常使用K8s代称。架构
其主要功能有:分布式
PS: 工具
Pod是一组关系很是密切的容器的集合,例如容器间须要进行直接文件交换、共享某些Namespace、之间有很是频繁的RPC调用等。Pod才是K8s的原子调度单位,而不是容器。学习
官方的这个图是K8s的技术架构,其实在技术架构以前,应该有个更简化的K8s的逻辑架构作基础。理解输出以下:大数据
是一个分布式存储组件,用来存储的集群全部状态,还具有事件订阅和监听、Leader 选举的能力。spa
事件订阅和监听:其余各个组件通讯,都并非互相调用API来完成的,而是把状态写入etcd,其余组件经过订阅etcd中的状态监听变化,而后作后续的处理,而后再一次把更新的数据写入etcd。命令行
Leader 选举:组件好比Scheduler,为了作实现高可用,经过etcd从多个(一般是3个)实例里面选举出来一个作Master,其余都是Standby。代理
上述etcd并非直接被访问,而是经过API Server代理后被访问。API Server至关于API网关,将对etcd接口的调用封装为标准的RESTFul API。对象
此外,API Server还实现了一些附加功能,例如身份认证、缓存等。
实现任务调度。直接请求Kubernetes作调度的都是任务,例如Deployment、Deamon Set或者Job,每个任务请求发送给Kubernetes 以后,都是由 Controller Manager 来处理的。
每一种任务类型对应一个 Controller Manager,例如:Deployment对应Deployment Controller,ReplicaSet对应ReplicaSet Controller。
实现资源调度。Controller Manager会把任务对资源Pod的要求,写入到etcd。Scheduler监听到有新的资源Pod要求被调度,会根据整个集群的各个节点的资源状况,将Pod分配到较为空闲合适的节点上。
是一个Agent,运行在每个节点上,它会监听etcd中的Pod的信息,发现有分配给它所在节点的Pod须要运行,就在节点上运行相应的Pod,而且把状态更新回到etcd。
是一个提供给用户的命令行工具,用户经过它调用API Server,发送请求写入状态到etcd,或者查询etcd中的状态。
假如要运行一个多个实例的Nginx,那么在 Kubernetes内部,流程以下: