kubernetes官方对自己的定义是:“生产级别的容器编排系统:用于自动部署,扩展和管理容器化应用程序”。但是我们能从这样一个“容器编排系统”中获得什么呢?不同的角色恐怕会得到不同的答案,我们先将一个公司IT系统中人员做一个简单的划分:
- 基础运维:负责基础平台的建设,为所有业务应用提供运行环境
- 业务开发:负责业务应用的开发、交付、运维
- 微服务架构:全局掌控微服务的状态
对基础运维工程师来讲,Kubernetes是一个可以管理众多机器的系统,如果没有合适的工具辅助,单人管理的机器数量上百台就快要接近极限了,而Google的SRE可以依靠kubernetes的前身(Borg)每人管理上万台机器,那么对基础运维工程师来说,Kubernetes为我们的工作带来了哪些便利?
- 云上快速的创建/销毁集群和上/下线节点的能力
- 在云上提供计算资源的自动伸缩能力,兼顾任务的执行效率和资源的利用率
- 在一个集群内给不同的团队逻辑上的资源隔离和限制
- 将云上的基础设施能力暴露给上层的业务人员,比如SLB、云盘、NAS等
随着Devops理念的盛行,越来越多的开发人员职责发生转变,逐渐从“编码”过渡到“交付可用的服务”,那么对业务开发人员来讲,Kubernetes这样一个“应用运行平台”又有什么过人之处呢?
- Application as Code:改变一切的声明式API
- 提供故障自愈的能力
- 提供水平伸缩的能力
- 提供自定义调度的能力
- 提供自定义健康检查的能力
- 提供自定义服务暴露的能力
- ......
- Pod的设计提供了进程组间隔离,进程组内共享的能力
随着服务规模的扩大,利用微服务理念重构几乎是所有企业的必经之路,在这方面Kubernetes又提供了哪些能力呢?
- 天然的进程隔离
- 无成本的多语言支持
- 自带基于DNS的服务注册发现
当然上面这些能力还不足以称之为一个完备的微服务平台,通常要配合Service Mesh的领域的工具,比如Istio来做微服务的实现
另外,对于AI/大数据领域的人员来讲,Kubernetes也是一个很好的任务调度和资源管理平台