之前做了一个相关分享,总结了k8s的架构、安装等相关工作,有兴趣的可以去
https://ppt.baomitu.com/d/d7b3bcb2 观看。
kubernetes 的总体架构如下

为什么要使用kubernetes?

调度
目前默认的调度是随机的,但是基于资源的调度很快就将实现了。在写作本文的时候,基于内存和CPU利用率的调度还有一些没有修复的问题。还有整合Apache Mesos的调度也在紧锣密鼓的进行中。Apache Mesos是一款分布式系统的框架,提供了资源管理的API,和跨整个数据中心或云环境的调度。

自愈
使用Kubernetes的一大好处就是其能够自动管理和修复容器。
如果运行Jenkins服务的容器由于某些原因宕机了,比如说进程崩溃了,那么Kubernetes就会得到通知,并会在几秒钟之后创建一个新的容器。

清理
k8s还提供了一些命令来停止和删除复制控制器、pod、以及服务等。

Master组件

API-Server


kubernetes API Server的功能:

提供了集群管理的REST API接口(包括认证授权、数据校验以及集群状态变更);
提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd);
是资源配额控制的入口;
拥有完备的集群安全机制.
如何访问kubernetes API
k8s通过kube-apiserver这个进程提供服务,该进程运行在单个k8s-master节点上。默认有两个端口。

2.1. 本地端口
该端口用于接收HTTP请求;
该端口默认值为8080,可以通过API Server的启动参数“–insecure-port”的值来修改默认值;
默认的IP地址为“localhost”,可以通过启动参数“–insecure-bind-address”的值来修改该IP地址;
非认证或授权的HTTP请求通过该端口访问API Server。
2.2. 安全端口
该端口默认值为6443,可通过启动参数“–secure-port”的值来修改默认值;
默认IP地址为非本地(Non-Localhost)网络端口,通过启动参数“–bind-address”设置该值;
该端口用于接收HTTPS请求;
用于基于Tocken文件或客户端证书及HTTP Base auth的认证();
用于基于策略的授权;
默认不启动HTTPS安全访问控制。

controller-manager

kubernetes-architecture-and-introduction-42-638.jpg
Controller Manager作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。

scheduler.jpg

Node组件

kubelet.png

参考
http://www.huweihuang.com/article/kubernetes/core-principle/kubernetes-core-principle-api-server/
http://www.infoq.com/cn/articles/scaling-docker-with-kubernetes