Kubernetes(简称K8S)是2014年10月由Google开源的生产级容器编排系统,是Google多年大规模容器管理技术Borg的开源版本
- 基于容器的应用部署、维护和滚动升级
- 负载均衡和服务发现
- 跨机器和跨地区的集群调度
- 自动伸缩
- 无状态服务和有状态服务
- 广泛的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:谷歌开源的容器编排工具
网友评论