导读:Linux 基金会执行董事 Jim Zemlin 曾说道:“我见证了开源圈子的两大事件:一个是 Linux 的胜利,一个就是 Kubernetes 和云原生的大暴发。开源是历史上最胜利的寰球翻新推动形式之一,Linux 曾经成长为世界上最重要的软件平台,而云原生则在新时代以长驱直入之态暴发。”
2019 年,随着云原生架构的相干探讨逐渐热烈,云 +AI 已成为时代支流。在衰亡的这股云原生潮流中,中国奉献微小:中国的 Kubernetes 贡献者在全球排名第二,有超过 10% 的 CNCF 会员来自中国、26% 的 Kubernetes 认证服务供应商来自中国;云原生理念曾经被国内的开发者宽泛承受,进入到企业践行的阶段。
百度智能云云原生团队 2015 年 开始了 Kubernetes 方向的投入,对于 Kubernetes 社区的开源奉献,百度在 2019 年 进入寰球前 10。然而纵观百度外部,支流服务是基于 matrix 的容器化部署,Kubernetes + Docker 尚未失去成熟利用。在企业服务畛域,基于 Kubernetes + Docker 的开源生态曾经成为支流技术架构。爱番番携手基础架构部云原生团队,深度单干了公司外部服务基于 Kubernetes + Docker 部署的推动,将全副爱番番线上流量切换到 Kubernetes,通过 2 周多的察看,运行稳固。
全文 4834 字,预计浏览工夫 14 分钟
如果浏览此文的你是一名研发侧的同学,正好也在打算将产品的技术栈往云原生方向去降级,那么你可能会关怀爱番番为什么会抉择 Kubernetes?谁来帮我搞定 Kubernates 集群?迁徙的工作量大么?有什么收益?那么接下来,咱们将现身说法,针对大家可能关怀的问题做个概述。
一、爱番番为什么要抉择 Kubernetes
在 ToB 这个方向上,咱们始终强调“以客户为核心”、“技术为产品服务、产品为客户服务”,而 Kubernetes 则是技术达成为产品服务的基石。
随着爱番番业务的深入和推动的减速,原有技术框架裸露的一些问题越来越显著,咱们从三个方面来论述:
疾速交付:
- 如何编排 200+ 模块的上线依赖并在 1 个小时 内实现上线?
- 如何实现两周一迭代,一周两公布指标?
维稳降本:
- 如何实现长期保持稳定性 4 个 9 以上的指标?
- 如何缩小上线期间的 pvlost?
- 如何实现 2000+ 服务实例的全面可察看性与治理?
- 自研的局部微服务基础设施性能 / 稳定性 / 吞吐量存在有余,是该继续投入更多人力去革新还是想方法引入开源计划?
开箱即用:
- 如何实现爱番番 (toB 产品) 多样化售卖需要?
- 如何规模化,可复制的部署与运维,升高环境差别与心智老本?
咱们的答案是采纳 云原生架构,建设云上爱番番,缩小反复造轮子,减速客户价值点交付。
Kubernetes + Docker 的技术在业界曾经十分成熟,CNCF 有十分全面的云原生技术来撑持咱们对于容器化、CICD、利用编排、监控剖析等方面的诉求,基于已有的开源组件和联合公司内的基础设施,咱们能以较少的研发老本疾速晋升根底技术的能力,以达到撑持产品疾速迭代的指标。
二、爱番番和基础架构部合作形式
单干的模式为基础架构部(INF)的云原生团队提供 Kubernetes 的技术研发和反对,爱番番进行服务的降级革新和部署。咱们的单干大抵分为 2 个阶段:
- 第一阶段:Kubernates 的技术研发和集群部署,基础架构云原生团队实现 Kubernetes 适应内网环境的技术研发和集群部署。
- 第二阶段:爱番番服务部署和流量迁徙,爱番番实现 100+ 个模块 Kubernetes 环境部署;按客户维度进行小流量,逐渐实现 100% 正式客户流量迁徙。
三、爱番番迁徙 Kubernetes 计划
迁徙 kubernetes 面临的关键问题及解决方案。
3.1 多种类型和泛滥服务如何高效的部署
难点:差异化的基础设施对继续交付能力的挑战
- 基础设施:基础设施如何运维,保障高可用?镜像仓库如何治理?
- 部署状态:如何零侵入业务的容器化?容器如何治理反对不同类型利用?
- 利用治理:k8s 平台上如何保护 10+ 资源?利用如何疾速部署回滚?
- CICD 流:CICD 流如何对接新的基础设施?CICD 流如何进一步晋升研发效力?
计划:标准化,自动化,云原生的 CICD 流程
名词解释:
agile : 撑持百度麻利开发的企业级继续集成平台
archer3 : 对立的部署协定标准
适应内网环境的 Kubernetes + Docker 技术调研与方案设计,实现原平台 /Kubernetes 两套同时部署,保障服务一致性,晋升研发效率。
为达到疾速交付的指标,首先要实现研发全生命周期的标准化,须要制订对立的规范与标准,反对多种类型利用。为了实现标准化,爱番番联合公司继续集成平台,并扩大实现三个外围环节,实现全自动化的 CICD 流程。
- 对立打包:基于对立的脚手架创立规范的利用包,通过对立打包服务实现利用包标准化为公司的 archer3 部署协定,能够无缝部署于其余平台。
- 对立容器化:将利用容器化的规定上移,防止容器化的规定散落在各个利用中,便于管理与保护。docker image build 的规定文件与业务源码齐全解耦,定义到 CI 的流程环节中,依据利用的元数据信息,抉择不同的 Dockerfile 模板文件构建镜像,docker image tag 的版本号依据 pipeline 的不同,辨认 git commit log 并取前 6 位做镜像与源码的可追溯。
- 对立利用包:基于标准化的 helm chart 集成容器化镜像和治理对立利用 k8s 资源,在 CICD 侧筹备对立且带版本号的 helm chart template,在利用集成时,通过上一环节容器化的名称与 image tag 进行有关联,实现了 deployment.yaml 的初步化,另一方面,借助于 helm chart 动静渲染模板和弱小的配置能力,实现利用以不同的状态部署到不同的集群中。
除了关注标准化与自动化带化效率的晋升,同时提供对立利用包治理,涵盖镜像、k8s 资源、以及环境等相干周边资源,进一步晋升继续集成能力。
收益:业务零侵入,均匀 10.6min 编译部署
实现 150+ 的利用基于流水线零老本的降级革新,实现容器化与对立利用包的部署,在利用覆盖面上,反对利用类型全笼罩,同时反对一键秒级回滚的策略,能够零老本疾速扩大集群与环境。
3.2 平滑稳固的 k8s 迁徙计划
难点:业务在高速增长,如何低成本且灰度迁徙生产流量至 k8s 平台?
计划:对立流量入口、灰度引流、逐渐转全和监控回切兜底
名词解释:
- BFE : 百度对立应用层流量接入转发平台
- BNS : 百度名字服务,用于满足服务间交互中常见的的资源定位、ip 白名单保护等需要,也能够用于机器列表查问,应用场景包含机器列表查问、服务定位、白名单保护、数据库智能受权等
- access gateway : 基于 OpenResty 构建的 k8s 集群的 API Gateway
- BOS : 百度对象存储 BOS (Baidu Object Storage) 提供稳固、平安、高效以及高扩大存储服务
构建 k8s 对立流量入口为 access gateway,作为内部流量入 k8s 集群入口,集群内通过 k8s service 做服务发现,有打算按节奏逐渐扩充灰度比例,直至转全。
通过公司对立的 BFE,实现客户粒度小流量和多版本的管制与路由,分钟级流量回滚计划以及正式流量逐渐迁徙的计划。
流量迁徙到 k8s 关键步骤阐明
- k8s 部署预公布环境,验证通过
- 利用部署 k8s 和原平台同构的线上环境
- 配置 k8s Access gateway,将全副流量转发至原平台,Access gateway 验证通过
- 如果验证失败,在 k8s 环境中调试零碎,直到验证通过,此过程不影响原平台流量
- 调整 Access gateway 的 sample 配置,将内部测试的客户 ID 流量下发至 k8s 集群,验证通过
- 如果验证失败,反复步骤 5,直到验证通过
- 将 Access gateway 的 BNS 集群增加到网关 BFE
- 减少转发规定,手动种 cookie,对于命中指定 cookie 规定的流量转发到 Access gateway,验证通过
- 将网关的 BFE 切换到 k8s 的 Access gateway,验证通过
- 如果验证失败,将 BFE 切回原平台的 API gateway 进行止损,剖析起因,反复步骤 7,直到验证通过
- 察看零碎稳定性,直到验证稳固,须要确定同一用户流量,稳固落在同一集群
- 调整 sample 配置,进行租户粒度的小流量
- 逐步扩充小流量比重,直至转全
收益:线上周稳定性放弃 99.99% 以上
四个月工夫内实现 150+ 利用,2K+ 服务接口革新以及线上服务全量转全。
部署架构进一步优化,对立收敛多个域名以及起源的流量,对立治理。
四、迁徙 Kubernetes 的收益
通过容器技术解决资源标准化,为前面服务化、自动化奠定了根底,同时业界对立的 kubernetes 平台,减速根底设计降级,具体收益次要包含:
- 迭代速度晋升:实现两周一迭代,一周两公布指标。实现爱番番 100+ 利用及其依赖的技术组件在 Kubernetes + Docker 环境的运行革新,实现了从开发、测试、部署、运行、察看的全流程买通。
- 疾速构建监控体系:突破之前基于 5-6 个公司外部自研产品对服务进行监控的现状,通过引入 Prometheus + grafana,疾速建设对立的产品衰弱度监控 / 察看平台。
- 低成本降级基础设施:云原生的微服务基础设施降级与落地,包含基于 config map 的配置核心解决方案、基于 EFK/Skywalking 的日志采集解决方案、基于 ElasticAlert 的日志预警计划,基于 Kubernetes 的对立流量入口,进步了零碎稳定性和排查问题的效率。
五、爱番番在云原生方向的布局
- 扩大服务类型:推动更多类型的服务迁徙至 Kubernetes,实现基于 Golang 的在线沟通、基于脚本语言的定时工作迁徙至 Kubernetes。
- 开释红利:基于云原生架构的高可用,引入 Kubernetes 原生的服务注册、发现机制、主动扩缩容和自愈等能力。
- 高可用服务:多地区多集群部署,为不同地区的客户提供更好的客户体验,同时可进一步实现服务的单元化部署,进步零碎的容灾能力。
- 高效服务治理:基于 Service Mesh 的微服务架构,可实现零碎全链路的可察看,在服务的调用、重试、熔断、限流、降级等方面提供更强的控制能力。反对服务多版本,通过部署隔离、租户隔离,实现多版本公布、灰度公布。
- 自动化继续集成:基于 Kubernetes 的 CICD 工具链平台,实现多环境隔离、疾速部署、一键公布、可视化运维治理等。
六、基础架构部在云原生方向的布局
打造具备竞争力的云原生利用平台产品矩阵,反对更多产品接入。
他山之石,可以攻玉。爱番番始终秉持“技术为产品服务”的理念,拥抱开源,踊跃引入业界成熟、先进的技术解决方案,撑持产品的倒退。在云原生方向,爱番番走出了第一步,将来,咱们还将持续致力,充分利用 CNCF 开源社区的力量,继续晋升产品的研发效率及零碎稳定性,同时也心愿看到更多的产品从云原生技术中受害。
七、结语:拥抱云原生,减速价值发明
云原生是面向云利用设计的理念,帮忙企业构建弹性牢靠、松耦合、易治理可观测的利用零碎,晋升交付效率,升高运维复杂度,次要体现为三个方面:
- k8s 平台红利的开释,充分发挥平台劣势,将服务自治、故障自愈、疾速弹性,主动扩缩容等能力落实到理论生产实践,升高运维复杂度。
- 引入与整合 service mesh 能力,打造服务治理平台,提供丰盛弱小的流量管控和服务路由的能力。
- 交融各项监控指标,建设对立的监控体系,将 metric , tracing 和 log 整合为一体,提供一站式的解决方案与服务能力。
围绕云原生体系,爱番番将持续在云原生方向上倒退,根底技术一直变革演进新的技术体系,逐渐打磨适宜团队的根底技术产品与服务,继续引入云原生技术以反对产品的倒退,秉持“技术为产品服务”的理念减速客户价值点的交付。
作者介绍:
chhoho , 百度爱番番根底技术负责人,领有多年 CRM 行业架构教训,善于分布式系统、微服务架构、CICD、Cloud Native 等技术畛域。
举荐浏览:
|百度文库新一代文档阅读器!核心技术点全解析!
|详解预训练模型在信息检索第一阶段的利用
|疾速剪辑 - 助力度咔智能剪辑提效实际
———- END ———-
百度 Geek 说
百度官网技术公众号上线啦!
技术干货 · 行业资讯 · 线上沙龙 · 行业大会
招聘信息 · 内推信息 · 技术书籍 · 百度周边
欢送各位同学关注