多云多K8S多环境体系建设
如果无法正常显示,请先停止浏览器的去广告插件。
1.
2. 多云多K8S多环境体系建设
主讲人-程亮
2021 / 05 / 22
3. 程亮
开课吧 首席架构
负责公司微服务建设重构,多环境治理搭建,公司中长期技术规划
4. 目录
K8S 多环境二期优化实战
2018
K8S 多环境
• 基于jenkins的传统发布
• 一套代码,支持多种环境
• 物理隔离的多环境
• 共享资源的多环境
收益总结
2020
2019
K8S 多环境发布一期方案
• 一期通过K8S发布,一键master
• 新增服务模版,自动生成deployment
• 降低服务器使用成本40%
• 运维100%自动化
• 多云部署,高可用
2021
5. P-1
为什么要做多云多 K8S 多环境
‣ 标准的dev test pre prod环境
‣ 存在的问题
6. 标准的四套环境
DEV
TEST
PRE
PROD
7. 标准的 CICD 流程
开课吧 CI/CD 架构
Jenkins pipeline
构建
Git
LOCAL
DEV
Maven
Docker
kubectl
Jenkins
pull
install
deploy
push
get status
rolling update
云厂商 K8S
Developer
GitLab
Maven Repository(nexus)
Registry
8. 多云多 K8S 多环境平台建设的初衷
多环境平台建设的初衷
多云多 K8S 多环境平台
1
提升资源使用率
K8S 集群 ( 多个 )
01
02
2 多云冗余高可用
3 环境并行互不影响
管理后台
03
发布平台
9. P-2
线下多环境一期方案
‣ 一键拉起master镜像新环境
‣ 如何确保环境间资源互不影响
‣ 一期方案存在的问题与挑战
‣ 如何实现线下多环境
10. 一键拉起环境
原理
注意点
• 所有镜像自动生成
• 一键master镜像部署
1.
2.
3.
4.
注册中心
Mysql Redis ES
全链路微服务
自动数据同步
• 数据建设依赖于规划
• 数据如何切分
11. 一期多环境平台架构图
CDN / LB / WAF / NG
K8S 集群
namespace1
namespace…
namespaceN
service1 … service1
service2 … service2
service3 … service3
… … …
…
用户中心数据库
API网关数据库
应用中心数据库
基础服务数据库
基础服务数据库
…
…
jenkins
12. 多环境资源互不影响
微服务
• 全链路服务全部属
• 注册中心独立部署
流量隔离
• 多域名,泛域名解析匹配
数据
• 全量同步线上脱敏数据
• Mysql redis ES 全搭建
• 数据全部物理隔离
发布平台
• 按需分支发布
• 多环境完全并行
13. 一期方案的问题与挑战
1
多环境资源 “ 假 ” 隔离
Namespace 隔离,共享资源
2
挑战
3
数据依赖成本高
所有存储都是独立搭建的
集群规模大,运维工作量大
环境数目越多,资源成本,维护成本越高
14. P-3
二期多云多 K8S 多环境优化实战
‣ 多环境访问严格隔离
‣ 如何识别流量,智能路由
‣ 如何借助多云保证有状态服务高可用
‣ 如何做到激增流量时,全链路联动扩缩容
‣ 如何跨云服务调用治理
15. 资源隔离,逻辑隔离,物理隔离
问题 1
逻辑隔离多环境共享一个 K8S (线下)
推荐做法
• 资源严格隔离:独占K8S,根据引入流量区分线上,线下
• 资源逻辑隔离:线下环境,通过智能路由,解决多环境
问题 2
多环境物理隔离(线下,线上)
16. 基于 Istio 的智能路由
Istio 层
Kubernetes 层
POD-1
Gateway
pilot-agent
VirtualService
Container master
DestinationRule
Client
POD-2
v5897
IstioIngressGateway
Service
pilot-agent
Container v5897
v5897
…
Chrome
POD-n
jenkins
17. 多云部署的目的
目的三
降低成本
• 跟不同的云厂商有更多的议价空间
目的二
高可用
• 多云多冗余,包括数据的同步冗余
目的一
多 K8S 集群严格隔离
• 区分不同云承接不同流量(单元架构)
18. 多云部署架构图
kaikeba1
Kaikeba2
云CDN,LB
Axxx
Hxxx
Gateway
Gateway
注册
Eureka
注册
Eureka
负载均衡 负载均衡 负载均衡 负载均衡
Ribbon Ribbon Ribbon Ribbon
Redis
ES
Mysql
19. 无状态服务的扩缩容
Traffic
serviceA
serviceB
Pod A1
Pod A2
Pod B1
RC/Deployment
Pod B2
Pod B3
RC/Deployment
Scale
Horizontal Pod Autoscaler
Scale
metric 上报
Horizontal Pod Autoscaler
获取 metrics 获取 metrics
CPU Mem已经支持指标自定
义metrics(用户自定义指标) CPU Mem已经支持指标自定
义metrics(用户自定义指标)
服务画像 监控中台
metric 上报
20. 基于有状态服务链路的扩缩容
Redis 后端管理平台
定时给 Redis 客户端下发配置
应用 1
应用 2
get key1
set key1 abc
get key2
Redis 客户端( Jedis )
get namespace1:key1
Redis 客户端( Jedis )
get namespace2:key2
set namespace1:key1 abc
Redis 虚机节点
Redis Cluster1 Master 实例 1
namespace1
key namespace1:key1
namespace n
value(string)abc
namespace2
key namespace2:key2
sadd key2 aa bb cc
value(list)aa bb cc
Redis
Cluster2
Slave 实例 2
Sadd namespace2:key2 aa bb cc
21. 跨云跨 K8S 调用治理
nacos 2.0
同步
同步
kmos-eureka
同步
prod-nacos
nacos-hk
注册服务 获取服务列表
获取服务列表
集群 A
注册服务
集群 B
Feign
Feign
WEB 接口
API 接口
服务限流熔断
Hystrix
API 接口服务
WEB 接口
负载均衡
Ribbon
Business 业务层
Business 业务层
22. 多云多 K8S 多环境新挑战
1
3
多云发布一致性
多环境一套模板适配性
挑战
2 跨云数据同步保证
4 多 K8S 的监控
23. 扫码关注开课吧
官方网站 联系电话
www.kaikeba.com 400-996-0826
24.