概述
在传统的虚机/物理机环境里, 如果我们想要对一个有状态应用扩容, 我们需要做哪些步骤?
- 申请虚机/物理机
- 安装依赖
- 下载安装包
- 按规范配置主机名, hosts
- 配置网络: 包括域名, DNS, 虚ip, 防火墙...
- 配置监控
今天虚机环境上出现了问题, 是因为RabbitMQ资源不足. 手动扩容的过程中花费了较长的时间.
但是在K8S上, 有状态应用的扩容就很简单, YAML里改一下replicas
副本数, 等不到1min就扩容完毕.
当然, 最基本的: 下镜像, 启动pod(相当于上边的前3步), 就不必多提. 那么, 还有哪些因素, 让有状态应用可以在k8s上快速扩容甚至自动扩容呢?
原因就是这两点:
- peer discovery peer discovery的 相关实现(通过hostname, dns, k8s api或其他)
- 可观察性 自动伸缩
我们今天选择几个典型的有状态应用, 一一梳理下:
- Eureka
- Nacos
- Redis
- RabbitMQ
- Kafka
- TiDB
K8S上有状态应用扩容
在Kubernetes上, 有状态应用快速扩容甚至自动扩容很容易. 这得益于Kubernetes 优秀的设计以及良好的生态. Kubernetes就像是一个云原生时代的操作系统. 它自身就具有:
- 自动化工具;
- 内部服务发现 负载均衡
- 内部DNS
- 和Prometheus整合
- 统一的声明式 API
- 标准, 开源的生态环境.
所以, 需要扩容, 一个yaml搞定全部. 包括上边提到的: 下载, 安装, 存储配置, 节点发现, 加入集群, 监控配置...