Kubernetes(简称K8s)是一个开源(遵循Apache2.0协议)的容器集群管理系统,源自Google15年生产环境的运维经验,用于实现自动部署,扩展和管理容器化应用程序。K8s提供了容器编排,资源调度,弹性伸缩,部署管理和服务发现等一系列功能,使容器化应用的部署工作更加简单和高效。
1.K8s特性
1、自我修复在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端的请求,确保线上服务不中断。
2、弹性收缩使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。
3、自动部署和回滚采用滚动更新策略更新应用,一次更新一个Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级升级过程中不影响业务运行。
4、服务发现和负载均衡能够为多个容器提供统一访问入库(内部IP地址和一个DNS名称),并且负载均衡关联所有容器,使用户无需考虑容器IP的问题。
5、机密数据和配置管理能够管理机密数据和应用程序配置,不需要把敏感数据暴露在镜像里,提高敏感数据安全性,并可以存储一些常用的配置,方便应用和使用。
6、存储编排能够挂载外部存储系统,无论是来自本地存储,公有云(如:AWS),还是网络存储(如:NFS、ClusterFS、Ceph)都可以作为集群资源的一部分使用,极大提供存储使用的灵活性。
7、批处理提供一次性任务、定时任务;满足批量数据处理和分析的场景。
2、核心概念
1、PodPod是在K8s集群中运行部署应用或服务的最小单元,它是可以支持多容器的。Pod的设计理念是支持多个容器在一个Pod中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。Pod对多容器的支持是K8s最基础的设计理念,如:运行一个操作系统发行版的软件仓库,一个Nginx容器用来发布软件,另一个容器专门用来从源仓库做同步,这两个容器的镜像不太可能是一个团队开发的,但是他们一块儿工作才能提供一个微服务;这种情况下,不同的团队各自开发构建自己的容器镜像,在部署的时候组合成一个微服务对外提供服务。
2、副本集(ReplicaSet,RS)RS是K8s集群中保证Pod高可用的API对象。通过监控运行中的Pod来保证集群中运行指定数目的Pod副本。指定的数目可以是多个也可以是1个;少于指定数目,RS就会启动运行新的Pod副本;多于指定数目,RS就会杀死多余的Pod副本。即使在指定数目为1的情况下,通过RS运行Pod也比直接运行Pod更明智,因为RS也可以发挥它高可用的能力,保证永远有1个Pod在运行。
3、部署(Deployment)Deployment表示用户对K8s集群的一次更新操作。部署是一个比RS应用模式更广的API对象,可以是创建一个新的服务,更新一个新的服务,也可以是滚动升级一个服务。滚动升级一个服务,实际是创建一个新的RS,然后逐渐将新RS中副本数增加到理想状态,将旧RS中的副本数减小到0的复合操作;这样一个复合操作用一个RS是不太好描述的,所以用一个更通用的Deployment来描述。
4、服务(Service)RS和Deployment只是保证了支撑服务的微服务Pod的数量,但是没有解决如何访问这些服务的问题。一个Pod只是一个运行服务的实例,随时可能在一个节点上停止,在另一个节点以一个新的IP启动一个新的Pod,因此不能以确定的IP和端口号提供服务。要稳定地提供服务需要服务发现和负载均衡能力,服务发现完成的工作,是针对客户端访问的服务,找到对应的的后端服务实例。在K8s集群中,客户端需要访问的服务就是Service对象。每个Service会对应一个集群内部有效的虚拟IP,集群内部通过虚拟IP访问一个服务。在K8s集群中微服务的负载均衡是由Proxy实现的,Proxy是K8s集群内部的负载均衡器。它是一个分布式代理服务器,在K8s的每个节点上都有一个,需要访问服务的节点越多,提供负载均衡能力的Proxy就越多,高可用节点也随之增多。
5、任务(Job)和定时任务(Cronjob)Job是K8s用来控制批处理型任务的API对象。批处理业务与长期伺服业务的主要区别是批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。Job管理的Pod根据用户的设置把任务成功完成就自动退出了。成功完成的标志根据不同的策略而不同:单Pod型任务有一个Pod成功就标志完成;定数成功型任务保证有N个任务全部成功;工作队列型任务根据应用确认的全局成功而标志成功。任务可以设置成定时执行的模式。
6、后台支撑服务集(DaemonSet)长期伺服型和批处理型服务的核心在业务应用,可能有些节点运行多个同类业务的Pod,有些节点上又没有这类Pod运行;而后台支撑型服务的核心