1. 容器编排技术
容器编排是指对多个容器的部署,管理和监控。
之所以有容器编排技术,其实是和业务量与系统复杂度与日俱增推动服务部署的演进方式息息相关的,下图是服务部署方式的演进过程。
更高效地利用系统资源、一致的运行环境、更轻松的迁移和拓展等诸多优点,使容器部署方式越来越成为主流。
Docker 是开源的被广泛应用的容器引擎,在实际生产环境中,在多台物理主机中协调容器资源成为首要要解决的问题,这一问题被统称为容器编排。
容器领域现阶段争论的重点也正在于为容器主机群管理提供怎样的容器编排功能。
目前比较流行的容器编排工具包括 Docker Swarm,Kubernetes 和 Mesos+Marathon。容器使用的最核心问题也恰是容器编排及如何部署和管理容器。Docker Swarm,Kubernetes,Mesos+Marathon 都可用于容器的部署、管理以及实现容器的扩容,但这三种编排工具着重处理的问题和使用场景也是不同的。
2. 初识 Kubernetes
2.1 Kubernetes 概述
Kubernetes 也简称为 k8s,它可以提供⽤户所需的容器部署,管理和扩缩容等编排功能。
借助 Kubernetes 的编排功能,⽤户可以构建多个容器的应⽤服务,跨集群调度、扩展这些容器,并长期持续管理这些容器和检测健康状况 。
2.2 Kubernetes 能做什么?
Kubernetes 为⽤户主要提供了以下功能:
- 服务发现和负载均衡:Kubernetes 可以使⽤DNS 名称或集群的 IP 公开容器,如果进⼊容器的流量很⼤, Kubernetes 可以用负载均衡并均衡分配流量使服务稳定。
- 存储编排:Kubernetes 允许你⾃动挂载选择的存储系统,例如本地存储、公共云提供商等。
- ⾃动部署和回滚:你可以使⽤Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为期望状态。例如,你可以⾃动化的方式来部署创建新容器, 删除现有容器并将它们的所有资源⽤于新容器。
- ⾃动完成装箱计算:Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。 当容 器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。
- ⾃我修复:Kubernetes 能重启容器、替换容器、杀死不符合定义运⾏状况检查的容器,并且这些功能对客户端都是无感知的。
- 密钥与配置管理:Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应⽤程序配置,也⽆需 在堆栈配置中暴露密钥。
2.3 为什么是 Kubernetes?
回归根本问题:why Kubernetes?
- 可扩展性
Kubernetes 具有很好的可扩展性。K8s 内置一组资源,例如 Pod,Deployment、StatefulSets、Secrets、ConfigMaps 等,用户和开发人员也可以以“Custom Resource Definition”的形式添加更多自定义资源。 Kubernetes 可扩展性的另一种形式是开发人员具有编写自己的能力 Operators 的能力,operator 允许用户通过与 Kubernetes API 进行对话来自动管理 Custom Resource Definition。
- 强大的社区
Kubernetes 受欢迎的另一个重要方面是其强大的社区。Kubernetes 于 2015 年在 1.0 版本时就捐赠给了与供应商无关的基金会,Kubernetes 是活跃在 Github 中前几名的项目之一:占有在所有项目前 0.01%的排名。 随着项目的推进,还有各