360SDN.COM

Kubernetes的主要组件概述

来源:容器时代  2017-11-29 09:05:22    评论:0点击:

概述

Kubernetes作为自动化部署、管理、扩展容器化应用程序的开源系统,现在在云计算时代已经占据越来越重要的地位了。

本文与大家分享一下Kubernetes的一些重要组件,Kubernetes就是依靠这些组件进行工作的。

Kuberntes部署在一个集群系统上。像一般的集群系统,Kubernetes也有Master节点与Slave节点。Master中的重要组件有API Server、Controller Manager、Scheduler。Slave中的重要组件有Kuberlet、Kube-proxy。接下来对这些组件进行分别介绍。

API Server

Kubernetes API Server通过kube-apiserver进程提供服务,该进程运行于Master节点上。

API Server是Kubernetes的核心组件,是各个组件的通信的渠道,有如下特性:


1.集群管理的API入口
我们如果要创建一个资源对象如Deployment、Service、RC等,都是要通过API Server的。当然,我们可能是通过命令行的kubectl命令将一个yaml/json格式的文件进行创建,还可能是通过写代码的方式使用如client-go这样的操作Kubernetes的第三包来操作集群。

总之,我们最终都是通过API Server对集群进行操作的。通过API Server,我们就可以往Etcd中写入数据。Etcd中存储着该集群的各种数据。

2.资源配额控制的入口
Kubernetes可以从各个层级对资源进行配额控制。如容器的CPU使用量、Pod的CPU使用量、namespace的资源数量等。这也是通过API Server进行配置的。将这些资源配额情况写入到Etcd中。

3.提供了完备的集群安全机制

Controller Manager

Replication Controller

副本控制器。是用来保证Deployment或者RC中副本的数量的。

Node Controller

通过API Server监控Etcd中存储的关于节点的各类信息,这些信息是kubelet定时推给API Server的,由API Server写入到Etcd中。这些节点信息包括:节点健康状况、节点资源、节点名称、节点地址信息、操作系统版本、Docker版本、kubelet版本等。监控到节点信息若有异常情况,则会对节点进行某种操作,如节点状态变为故障状态,则删除节点与节点相关的Pod等资源的信息。

ResourceQuota Controller

将期望的资源配额信息通过API Server写入到Etcd中。然后ResourceQuota Controller会定时的统计这些信息,在系统请求资源的时候就会读取这些统计信息,如果不合法就不给分配该资源,则创建行为会报错。

Namespace Controller

用户是可以通过API Server创建新的namespace并保存在Etcd中的。Namespace Controller会定时通过API Server读取这些Namespace信息并做对应的对于Namespace的一些操作。

Service Controller

Service Controller属于Kubernetes集群与外部云平台之间的一个接口控制器。Service Controller监听Service的变化,如果是一个LoadBalancer类型的Service,则Service Controller确保外部的云平台上该Service对应的LoadBalancer实例被相应地创建、删除及更新路由转发表(会根据Endpoints的条目)。

Endpoints Controller

负责生成和维护所有Endpoints对象的控制器。Endpoints表示了一个Service对应的所有Pod副本的访问地址。一个Service可能对应了多个Endpoints,那么,在创建一个新的Service时Endpoints Contrioller就会生成对应的Endpoints。在Service被删除时,Endpoints Controller就会删除对应的Endpoints。等等。

Scheduler

Kubernetes的调度器。Scheduler监听API Server,当需要创建新的Pod时。Scheduler负责选择该Pod与哪个Node进行绑定。将此绑定信息通过API Server写入到Etcd中。若此时与Node A进行了绑定,那么A上的Kubelet就会从API Server上监听到此事件,那么该Kubelet就会做相应的创建工作。

此调度涉及到三个对象,待调度的Pod,可用的Node,调度算法。简单的说,就是使用某种调度算法为待调度的Pod找到合适的运行此Pod的Node。

Kubelet

每个Node节点上都会有一个Kubelet负责Master下发到该节点的具体任务,管理该节点上的Pod和容器。而且会在创建之初向API Server注册自身的信息,定时汇报节点的信息。它还通过cAdvisor监控容器和节点资源。

节点管理

Kubelet在创建之初就会向API Server做自注册,然后会定时报告节点的信息给API Server写入到Etcd中。默认为10秒。

Pod管理

Kubelet会监听API Server,如果发现对Pod有什么操作,它就会作出相应的动作。例如发现有Pod与本Node进行了绑定。那么Kubelet就会创建相应的Pod且调用Docker Client下载image运行container。

容器健康检查

有三种方式对容器做健康检查:1.在容器内部运行一个命令,如果该命令的退出状态码为0,则表明容器健康。2.TCP检查。3.HTTP检查。

cAdvisor资源监控

Kubelet通过cAdvisor对该节点的各类资源进行监控。如果集群需要这些监控到的资源信息,可以安装一个组件Heapster。Heapster会进行集群级别的监控,它会通过Kubelet获取到所有节点的各种资源信息,然后通过带着关联标签的Pod分组这些信息。如果再配合InfluxDB与Grafana,那么就成为一个完整的集群监控系统了。

Kube-Proxy

负责接收并转发请求。Kube-proxy的核心功能是将到Service的访问请求转发到后台的某个具体的Pod。

无论是通过ClusterIP+Port的方式还是NodeIP+NodePort的方式访问Service,最终都会被节点的Iptables规则重定向到Kube-proxy监听服务代理端口,该代理端口实际上就是SocketServer在本地随机打开的一个端口,SocketServer是Kube-proxy为每一个服务都会创建的“服务代理对象”的一部分。当Kube-proxy监听到Service的访问请求后,它会找到最适合的Endpoints,然后将请求转发过去。具体的路由选择依据Round Robin算法及Service的Session会画保持这两个特性。

结束语

Kurnetes的这些组件各自分别有着重要的功能。它们之间协同工作,共同保证了Kubernetes对于容器化应用的自动管理。其中API Server起着桥梁的作用,Controller Manager像是集群的大管家,Scheduler就像是一个调度亭,负责Pod的调度工作。Kubelet则在每个节点上都有,像是一个执行者,真正创建、修改、销毁Pod的工作都是由它来具体执行。Kube-proxy像是负载均衡器,在外界需要对Pod进行访问时它作为代理进行路由工作,将具体的访问分给某一具体的Pod实例。

这些组件缺一不可,无论少了哪一个Kubernetes都不能进行正常的工作。当然,Kubernetes的组件不只这些,本文只是对一些重要的组件进行了简单描述。希望对想简单了解Kubernetes组件的朋友有所帮助。

加入容器时代

 

容器时代公众号的目的是希望能够传播容器技术和理念,让更多的人能够享受到这场技术革命带来的好处。虽然我们不是大牛,对容器技术生态的了解和认识也还不够深刻,但是我们乐于分享,乐于交流。不管读者的你是学生,还是工程师,甚至都不是,我们都欢迎你加入进来,可以一起写文章、翻译文章,也可以一起分享经验、聊聊踩过的那些坑!为此特意建立了一个微信群,长按识别下方二维码加入,我们以梦为马,一起前行! 

 

 

阅读原文

为您推荐

友情链接 |九搜汽车网 |手机ok生活信息网|ok生活信息网|ok微生活
 Powered by www.360SDN.COM   京ICP备11022651号-4 © 2012-2016 版权