快速配置计算资源
基本监控
持续集成,持续交付,持续部署
易于配置存储
认证/授权
网络的问题
服务管理
资源调度
弹性伸缩
自动化部署
滚动发布,蓝绿发布,灰度发布
部署三个或更多对等节点
注册动作会传递
客户端同时向所有Eureka注册
节点A和C无法交换数据
选型方案1: K8S Headless + DaemonSets
K8S Headless Service
没有负载均衡
1个服务名标明集群
多个A记录对于此服务名
K8S DaemonSets(生产环境可选)
1个Node节点1个Pod
所有节点或部分节点
Eureka扩展
读取DNS信息,把1个服务名转化为多个节点的IP地址
服务器端:扩展EurekaClientConfigBean,同时过滤自身IP
客户端:扩展EurekaInstanceConfigBean
简洁的配置
K8S的便利
缺点 :
需要扩展Eureka
方案2: K8S StatefulSets
K8S StatefulSets
要求Headless
每个实例对应的网络ID
网络Id列表标明集群
持久的存储卷Volume
Eureka扩展(可选由于网络Id存在)
读取DNS信息,把1个服务名转化为多个节点的IP地址
服务器端:扩展EurekaClientConfigBean,同时过滤自身IP
简洁的配置
K8S的便利
需要扩展Eureka(可选)
ConfigMap到Pod环境变量
单个ConfigMap数据
多个ConfigMap数据
ConfigMap到存储卷
存储到文件
指定路径和权限
自动更新
AP系统(Consul, Eureka) or CP系统(Zookeeper, etcd)?
多语言支持?
只使用DNS?
弹性DNS,动态DNS
只使用Kubernetes服务?
客户端负载平衡? Ribbon
Turbine / Hystrix Dashboard
选型方案: K8S + spring-cloud-kubernetes
1. DiscoveryClient for Kubernetes
2. Ribbon discovery in Kubernetes
3. Zipkin discovery in Kubernetes
K8S提供的便利
多语言微服务
简化原有SpringCloud部署
代码的K8S依赖
需求转化:从Eureka高可用到K8S高可用
处理服务到服务通信的专用基础设施层
透过云原生应用程序的复杂拓扑结构,负责可靠地传递请求
实践中,Service Mesh通常被实现为与应用程序代码一起部署的一组轻量级网络代理,应用程序无需知道代理组的存在
选型方案:K8S + Service Mesh
K8S Ingress Controller
Istio [4]集成作为控制面板
K8S紧密集成
K8S Deployment作为管理单元
K8S部署