K8S是谷歌在2014年开源的容器化集群管理系统,使用K8S的目标是让部署容器化应用更加简洁和高效。
Kubernetes(简称K8S)是2014年10月由Google开源的生产级容器编排系统(容器管理系统),是Google多年大规模容器管理技术Borg的开源版本
功能
1.自动装箱
基于容器对应用运行环境的资源配置要求自动部署应用容器
2.自我修复(自愈能力)
当容器失败时,会对容器进行重启
当所有部署的Node节点有问题时,会对容器进行重新部署和重新调度
当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务
3.水平扩展
通过简单的命令、用户UI界面或基于CPU资源使用情况,对应用容器进行规模扩大或规模裁剪(高峰期增加副本数,高峰期过了减少副本数)
4.服务发现
用户不需要使用额外的服务发现机制,就能基于Kubernetes自身能力实现服务发现和负载均衡(节点不直接对外提供服务,对外有个统一的入口叫ApiServer,平均分担请求-负载均衡)
5.滚动更新
可以根据应用的变化,对应用容器运行的应用进行一次性或批量更新
(加应用时,k8s先检测应用有没有问题,没有问题的时候才对外提供服务)
6.版本回退
可以根据应用部署情况,对应用容器运行的应用,进行历史版本及时回退
7.密钥和配置管理
在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署(不需要重启集群,自动加配置直接运行)
8存储编排
自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要。存储系统可以来自本地目录、网络存储(NFS、Cluster、Ceph等)、公共存储服务(支持访问外部的挂载应用)
9批处理
提供一次性任务,定时任务,满足批量数据处理和分析的场景
(每天某个时段进行操作)
【这些单纯用docker做不到,使用K8S更加方便、简洁、高效】
- 基于容器的应用部署、维护和滚动升级
- 负载均衡和服务发现
- 跨机器和跨地区的集群调度
- 自动伸缩
- 无状态服务和有状态服务
- 广泛的Volume支持
-
插件机制保证扩展性
Kurbernets的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。它的目的就是实现资源管理的自动化,主要提供了如下的主要功能:
- 自我修复:一旦某一个容器崩溃,能够在1秒钟左右迅速启动新的容器
- 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整
- 服务发现:服务可以通过自动发现的形式找到它所依赖的服务
- 负载均衡: 如果一个服务启动了多个容器,能够自动实现请求的负载均衡
- 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本
- 容器编排:可以根据容器自身的需求自动创建存储卷
产生背景
微服务和容器的流行。微服务是把原来一体化的应用转换为一个个相互独立(高内聚低耦合)的小应用,这些小应用就叫微服务。一个应用如果有成千上万的微服务,那么微服务的部署会很麻烦。一台机器可能部署多个微服务。对微服务进行隔离和资源控制(微服务的支持调度计划)就需要用到容器。
容器
容器是一系列隔离运行的进程,提供了一种轻量操作系统层面的虚拟化技术。
- 每个容器都有自己的PID(进程号),User,UTS,Network栈命名空间等
- 与传统虚拟机比具有启动快,性能损耗小,更轻量化的特点
K8S默认使用Docker引擎
- Docker最创新的地方:引入了镜像分层的机制,可以让镜像比较小,使隔离技术在操作系统层面也可以用,docker提供命令行的方式对容器进行增删改查,提供了镜像机制把环境打包到镜像中,使得使用容器技术变得非常简单
- 也可使用Rkt(coreos),或其他遵循CRI(container runtime interface)标准的容器引擎,如Containerd等
容器化系统面临的挑战
容器虽然解决了应用打包、部署、运行的问题(一次构建、随处运行Build,Ship and Run Any App,Anywhere),但是也面临了跨机器的部署、资源调度、负载均衡、自动伸缩、容错处理、服务发现的挑战。
容器编排(Container Orchestration)
- 以容器为基本对象进行管理
- 协同容器共同实现应用功能
容器编排的主要功能:1容器调度(Placement容器放到哪个机器上,health checking..)【docker-compose需要起哪几个容器、容器之间有什么依赖、先启动哪个后启动哪个,只是在本机伸缩不能跨机器调度】2资源管理(CPU、GPU、Memory...)3服务管理(Service Discovery服务发现、Load Balance...)
容器编排系统
Mesos:Apache的一个资源统一管控的工具,需要和Marathon结合使用(Spark最初依赖的资源集群管理系统,并不特定于容器,在应用的层面来看几百台机器是一台大的机器由Mesos分配)
Docker Swarm:Docker自己的容器编排工具
Kubernetes:谷歌开源的容器编排工具