kubernetes架构之二
一、概述
IaaS:即基础设施即服务,通过虚拟化和分布式存储等技术,实现对包括服务器、存储设备、网络设备等各种物理资源的抽象;从而形成了一个可扩展、可按需分配的虚拟资源池。最具代表性的IaaS产品有Amazon AWS,提供虚拟机EC2和云存储S3等服务;
PaaS:平台即服务,为开发者提供了应用的开发环境和运行环境,将开发者从繁琐的IT环境管理中解放出来;PaaS主要面向的是软件专业人员;
SaaS:软件即服务,面向使用软件的终端用户。比如:在线使用的邮箱系统
二、架构和组件
kubernetes API Server: 作为k8s系统的入口,其封装了核心对象的增删改查的操作,以REST API接口方式提供给外部客户和内部组件调用,它维护的REST对象将持久化到Etcd中。
kubernetes Scheduler:负责集群的资源调度,为新建的Pod分配host。这部分工作独立成一个组件,意味着可以很方便地替换成其他的调度器;
kubernetes Controller Manager:负责执行各种控制器,目前已经实现很多控制器来保证kubernetes的正常运行,主要的控制器如下:
控制器 | 说明 |
Replication Controller | 管理维护Replication Controller,关联Replication Controller 和Pod,保证Replication Controller定义的副本数量与实际运行Pod的数量是一致的 |
Node Controller | 管理维护Node,定期检查Node的健康状态,标识出失效的Node |
Namespace Controller | 管理维护Namespace,定期清理无效的Namespace,包括Namespace下的API对象,像Pod、Service和Secret等 |
Endpoint Controller | 管理维护Endpoints,关联Service和Pod,创建Endpoints作为Service的后端,当Pod发生变化时,实时刷新Endpoints |
Service Account Controller | 管理维护Service Account,为每个Namespace创建默认的Service Account,同时为Service Account创建Service Account Secret |
Persistent Volume Controller | 管理维护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配Persistent Volume进行绑定,为释放的Persistent Volume执行清理回收 |
Daemon Set Controller | 管理维护Deamon Set,负责创建Daemon Pod,保证指定的Node上正常运行Daemon Pod |
Deployment Controller | 管理维护Deployment,关联Deployment和Replication Controller,保证运行指定数目的Pod,当Deployment更新时,控制实现Replication Controller和Pod的更新 |
Job Controller |
管理维护Job,为Job创建一次性任务Pod,保证完成Job指定完成的任务数目 |
Pod Autoscaler Controller |
实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作 |
kubernetes Node是运行节点,用于运行管理业务的容器,包含以下组件:
Kubelet: 负责管控容器,kubelet会从kuberenetes API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes API Server
Kubernetes Proxy:负责为Pod创建代理服务,Kuberenetes Proxy会从Kubernetes API Server获取所有的Service,并根据Service 信息创建代理服务,实现Service 到Pod的请求路由和转发,从而实现kubernetes曾经的虚拟转发网络;
Docker: k8s Node是容器运行节点,需要运行Docker服务,目前k8s也支持Rocket(一款CoreOS开发的类Docker的开源容器引擎);
三、k8s网络:
k8s的网络模型要求每一个Pod都拥有一个扁平化共享网络命名空间的IP,成为PodIP, Pod能够直接通过PodIP跨网络与其他物理机和Pod进行通信。要实现k8s网络模型,需要在k8s集群中创建一个覆盖网络(Overlay Network),联通各个节点,目前可通过第三方网络插件来创建覆盖网络,例如:Flannel和Open vSwitch。
Flannel为不同Node的Docker网桥配置不同的IP网段以保证Docker容器的IP在集群内唯一,所以Flannel会重新配置Docker网桥,需要先删除原先创建的Docker网桥;
四、k8s深入:
k8s是容器集群管理系统,为容器化的应用提供资源调度、部署运行、容灾容错和服务发现等功能。其中涉及Pod、Replication Controller和Service这k8s基本要素的功能展示;