小红书在Kubernetes容器环境的CD实践

  • 时间:
  • 浏览:0

最重要的是亲戚亲戚朋友有六个 叫 Canary 的发布过程,亲戚亲戚朋友在 Spinnaker 的基础上,开发了一套 Canary 的机制。Canary 和 Beta 差过多,但 Canary 是真实引入流量,它把线上用户分为几类:一是比较稳定的流量用户;二是有有哪些用户稍微还都可不可以牺牲许多,我要测试某六个 新版本,亲戚亲戚朋友的实现后来我先给公司、先给办公室的人来用,等办公室的人用得亲戚亲戚朋友的反馈都 OK,找不到有哪些问題,看看监控数据也真是找不到问題,才开使英文了了在线上做发布了。

Spinnaker 和 Kubernetes 有有哪些关系?它有统统概念是一对一的,Spinnaker 有六个 叫Account,Account 对应到 Kubernetes 是 Kubernetes Cluster,现在在亲戚亲戚朋友的生产环境,亲戚亲戚朋友的环境里有三组 Kubernetes 的 Cluster,分别对应到开发、测试和益产,它也是对应到Spinnaker 的 Account、Instance,在 Spinnaker 里 Instance 对应到 Kubernetes 里 Pod,六个 Pod 后来我六个 运行的单元,它有 Server Group,这些 Server Group 对应的是 Replica Set 意味是 Deepionment。许多 Load Balance,在 Spinnaker 里称之为 Load Balance 的东西在 Kubernetes 里后来我 Service。

刚才介绍了 Spinnaker,它有一种是六个 开源项目,是 Netflix 的开源项目。Netflix 的开源项目在社区经常有着不错的口碑。它有开放式的集成能力,它的整个设计里对于集成能力有非常好的实现。它原生就还都可不可以支持 Jenkins、Gitlab 所有东西的整合,有一种它还支持 webhook ,后来我说在某六个 环境里,意味里面的某个资源的控制组件,有一种是个 API,很容易就还都可不可以整合到 Spinnaker 里。

首先,亲戚亲戚朋友整个技术的团队,团队人数在增加,再再加技术栈在变。你会 全是纯 Python 的技术环境,现在不同的团队在尝试 JAVA、Go、Node。还有后来我亲戚亲戚朋友在做微服务的改造,你会 的单体应用正在加速拆分成各个微服务,统统应用的数量也增加统统。拆分微服务后, 团队也变得更细分了; 一块儿亲戚亲戚朋友还在做前后端的拆分,原本统统的 API 后来我在前端展现,现在在做前后端的拆分,后端系统进程运行是 API,前端是展示页面,各种应用的依赖关系也变得过多。以现在的模式基本上意味不太可行了,不难 持续下去。

为有哪些亲戚亲戚朋友用 Traefik 不让 Nginx 做反向代理呢?首先 Traefik 是六个 配置热加载,用Nginx时更新路由规则者是做后端服务器的上线、下线都时要重载,但 Traefik 不时要。还有它自带熔断功能,还都可不可以定义后端服务错误率超过比如 400% 的你会 ,主动熔断它,请求再后来我发给它了。还有动态的权重允许策略。一般的轮询策略是均摊,第六个 请求发给 A,第六个请求发给 B,第六个 请求发给 C,第六个请求发给 D,但在 Traefik 里的动态权重策略,它会记录 5 秒钟之内发给 A 的请求,是全是比发给 B 的请求变慢,意味 A 处里请求的速率快过B,那接下来的 5 秒钟有更多的请求发给 A ,有更少数的请求发给B。这些 过程在不断的调整,这是亲戚亲戚朋友时要的功能。意味上了容器你会 ,整个基础的硬件环境,不难 去保证所有的节点性能全是一致的。

如图 18 所示是线上真实的部署流程。首先是要设置六个 Canary 策略,这些 策略是完整篇 随机还是根据用户的特定来源。比如说是六个 办公室用户,还是上海的用户,还是北京的用户等等,许多去调整参数,是 1% 的北京用户,还是所有的北京用户。许多开使英文了了,亲戚亲戚朋友是部署在服务器。许多把这些 Canary 实例做扩展,在流量进来你会 ,实例的容量一定要跟着上线。进来你会 把流量做重新定向,把流量原本直接打给后端的 Pod,打到代理服务器。整个过程不断的迭代,有 1% 的线上用户,最后 2%,10%、400%、400%,最后后来我全量用户。在全量过程中是采用红黑版本,先把所有的新版本老版本的实例数生成出来,等所有的新版本通过健康检测,全是线了,旧的版本再下线,原本完成六个 灰度。意味不行句子,马上就还都可不可以回退,所谓的回退后来我把 Canary 下线,把流量打到线上版本去。

图 15

图 13

图 3

如图 10 是各种类型的表达式,从现在看起来,基本上各种要求都能满足了。Pipeline 还都可不可以自动触发(图 11),还都可不可以说每天、每周、每年、每月,某一天的你会 要执行 Pipeline,做六个 自动发布等等,也还都可不可以用今天新生成六个 镜像的你会 ,Pipeline 去做发布。

小红书运维团队负责人

再者它有比较强的 Pipeline 的能力,它的 Pipeline 还都可不可以错综复杂到无以复加,它还有很强的表达式功能,还都可不可以在任何的环节里用表达式来做替代静态参数和值。在整个Pipeline开使英文了了的你会 ,Pipeline 生成的过程变量都还都可不可以被 Pipeline 每个 stage 调用。比如说这些 Pipeline 是 cash 的你会 ,整个过程是为什会么会样,都还都可不可以访问这些 参数。它有很友好的界面,重点的是支持多种云平台。目前支持 Kubernetes,支持 open stack,支持亚马逊的云平台。

意味今天很有信心了,决定往生产发了,还都可不可以生成六个 tag,比如这些 tag 是 0.1.1,今天要发0.1.1版了,同样还都可不可以触发六个 镜像的构建。这六个 不同的阶段构建的镜像 tag 不一样,每生成六个 新tag, Spinnaker 会根据tag的命名规则触发不同的 pipeline, 做不同环境的部署。

小红书有一种是六个 社区做起来的。一开使英文了了是亲戚亲戚朋友在平台上发帖子,分享许多生活中的好东西,健身有哪些的。目前亲戚亲戚朋友意味有有 5 千万的用户,1 千万的图文,每日 有1 亿次笔记曝光,涉及彩妆、防衰老,健身,旅游等等各种领域。

小红目前还发生创业阶段,亲戚亲戚朋友的技术团队规模还不大, 当然运维有一种也是六个 小团队,现在整个运维是六个同学。小公司资源有限,六个 是人力资源有限,二是亲戚亲戚朋友统统业务往前赶,在怎样做好 CI/CD,为什会么会务实的落地方面, 亲戚亲戚朋友的策略后来我开源优先,优先选则开源的产品,在开源的基础上,发现匮乏的地方做补缺。

图 7

图 1

图 17

图 5 是发布系统的架构,是六个 微服务的架构。里面有统统组件,有面向用户界面的 Deck,许多有面向调用,还都可不可以完整篇 不让它的界面开发六个 封装,由后台它帮亲戚亲戚朋友执行发布等等任务。Gate 是它的六个 API 的网关,Rosco 是它做 beta 镜像构建的组件,Orca 是它的核心,所谓的流程引擎。Echo 是通知系统, igor是用来集成Jenkins等CI系统的六个 组件。Front52 是存储管理,Cloud driver 是它用来适配不同的云平台的,比如Kubernetes 全是专门的Cloud driver,全是亚马逊的 Cloud driver。Fiat 是它六个 鉴权的组件。

图 6

图上(图 19)是亲戚亲戚朋友的 Canary 策略。这是亲戚亲戚朋友每每所有人实现的一套东西。后来我说亲戚亲戚朋友把这些 网段一半的 IPhone 用户,首先它是 IPhone 用户,它的在这些 网段,这些 4000 和这些 4000 有每每所有人的权重,最终实现的结果在这些 网段里一半的 IPhone 用户进行灰度,整个灰度的维度还都可不可以有统统。现在亲戚亲戚朋友支持的是完整篇 随机,要线上的 1%、2%,不管是谁,反正是随机的,还都可不可以支持从 IP 来的,还都可不可以支持是有哪些设备,是 IPhone 还是安卓,维度还都可不可以组合起来。

图 19

如图 2 是现在应用上线的过程,开发向运维提需求,时要几次台服务器, 运维土法律法律依据需求去做初始化并交付给开发。小红书现在有六个 运维平台,所有服务器的部署全是有这些 平台来完成,平台调用腾讯云API生成服务器,做环境初始化,配置监控和报警,交付给开发的是六个 服务器。

图 8 是 Pipeline Stages 的类型。左上 Check Precondltions 前置条件满足的你会 才执行某个步骤。这类当前面的第一次发布里所有的实例都存活的你会 ,才执行某个步骤。意味当前面的步骤达到了某个请况,再执行下六个 步骤。deploy是在kubernetes环境里生成replicationSet, 还都可不可以在deploy里消灭六个 服务器组、禁用六个 集群、把集群的容量往下降、往上升等等。也还都可不可以跑某六个 脚本,这些 脚本是在某六个 容器里,有你会 意味有原本的需求,比如说 JAVA 来说,, 这些 JAVA 跑起来你会 并全是马上也能接入流量,意味要到 JAVA 里跑六个 job,加载初始数据并做些初始化工作后,才还都可不可以开使英文了了承接流量。

这些 是 Canary 的意思,线上用户还是线上特定用户分成两组,线上用户访问老版本,特定用户通过负载均衡转发到特定的版本里,在里面有监控及和比较六个 版本之间的差异。

图 9

最后总结一下: 亲戚亲戚朋友倾向于采用开源的土法律法律依据处里问題,意味开源匮乏句子,亲戚亲戚朋友再开发许多适配的功能。谢谢亲戚亲戚朋友!以上后来我我的讲解。

Pipeline 表达式很厉害,它的表达式是用 Grovvy 来做,亲戚亲戚朋友知道 Grovvy 是六个 动态语言。凡是 Grovvy 能用的语法,在字符串的地方都还都可不可以用。统统,有有哪些步骤中,还都可不可以说这些 步骤参数是来自表达式。也还都可不可以说有条件的执行,生成环境的你会 才做原本的东西。也还都可不可以有前置条件,当满足这些 条件的你会 ,这些 流程和 stage 还都可不可以继续走下去。

下一步亲戚亲戚朋友打算做几件事情:第一,亲戚亲戚朋友想做自动灰度分析,叫 ACA, 现在很流行所谓的 AIOps,自动灰度分析还都可不可以说是六个 最具体的 AIOps 落地了。在灰度的过程中,现在是人肉判断新版本是否正常,真意味日志分派够完整篇 句子,这些 判断还都可不可以由机器来做。比如说今天发布新版本,响应时间比旧版本增加了 400%,显然这些 灰度会失败,就还都可不可以终止这些 灰度,不让人去判断。第二,再往下还都可不可以做自动的容量管理,当然是基于 Kubernetes 的基础上,做自动容量管理。

图 15 是新发布的六个 流程意味是开发的流程。亲戚亲戚朋友有六个 环节:六个 是开发阶段,六个 是集成测试,六个 是上线。

线上发布是用 Jenkins 脚本的土法律法律依据:用 Jenkins 的脚本做测试,执行代码推送. 当有新加一台服务器意味下线一台服务器,要去修改这些 发布脚本。 发布流程共假如有一天原本的: jenkins脚本先往beta环境发,开发者在 beta 环境里做自测,自测环境找不到问題就全量发。

Traefik 和 Kubernetes 有有哪些关系呢?为有哪些在 Kubernetes 环境里选则了 Traefik?意味在 Kubernetes 是以 Ingress Controller 发生,亲戚亲戚朋友知道 Kubernetes 到 1.4 你会 就引进了 Ingress 的概念。Kubernetes 原本不还都可不可以六个 叫 service,service 是四层的负载均衡,Ingress是在 Kubernetes 里七层的实现,Kubernetes 有一种不去做七层的负载均衡,它是通过 Ingress Controller 实现的,后来我在Kubernetes 里后来我 Ingress Controller。它还都可不可以动态加载六个 Ingress 的路由规则。你会 说的,它根据 service 的定义,在 Kubernetes 里定义了统统 service 定义动态更显后端的 Pod,这些 service 比如说关联了这些 Pod,在 Traefik 就会把要访问的这些 service 的流量直接请求到后端的六个 Pod。

-traefik.backend.circuitbreaker:NetworkErrorRatio() > 0.5

图 6 是它的界面。界面一眼看上去很乱,实际上它还是有很好的逻辑性。这里每六个 块,每六个 难点,意味是红点意味是灰色的点,代表的是在 Kubernetes 的环境里的某个实例。浅蓝色是代表是活着的,右边是实例的信息。实例为什会么会起来的,在哪个环节里,是在哪个 group,右中是请况,是活着还是死了等等界面介绍。

你会 说了亲戚亲戚朋友作为创业公司全是是以开源为主,在新的环境里应用了原本的技术(图 4),Jenkins、Gitlab 和 Spinnaker。Jenkins 和 Gitlab 应该都听说,用得统统了,普罗米修斯、Docker 也全是很主流的。

亲戚亲戚朋友实现的灰度是业务要求,意味是灰度,这些 用户时要从头到尾,即使是随机,比如说 1%线上的随机。1% 的用户灰度句子,永远时要灰度,不让是说 1%的全局请求会去到灰度,后来我 1%的用户,这些 用户是固定的。

图 18

图 11

图 10

容器推出以来,给软件开发带来了极具传染性的振奋和创新,并获得了来自各个行业、各个领域的巨大的支持——从大企业到初创公司,从研发到各类IT人员等等。跨境知名电商小红书随着业务的铺开,线上部署单元的数量急剧增加,以 Jenkins 调用脚本进行文件推送的部署模式意味不还都可不可以适应需求。这些 期实践日,小红书运维团队负责人孙国清将为亲戚亲戚朋友带来小红书怎样以最小的投入,最低的开发量快速的实现容器化镜像部署,以及由此带来的收益。以下是此次演讲的分派。

开发者为什会么会访问这些 东西呢?比说 web 应用,意味这些 系统进程运行叫做 APP1,就通过 APP1-A.dev.xiaohongshu.com 就还都可不可以访问到 Feature A 的代码。整个过程在整个周期上也能不断的迭代,最后真是还都可不可以了,就进行推送到 release。一旦把代码推往 release 就触发构建,基本上差过多。最全是有六个 自动化的测试,基本上是由测试团队提供的自动化测试的工具,用 Spinnaker 调用它,看结果是有哪些样。

Traefik亮点:

这是在容器环境里实现的 Canary 的机制(图 17),用户请求原本面进来,首先打到 Traefik,意味找不到做 Canary 的过程,Traefik 是直接把请求打到组实例。意味要发布六个 新的版本,有六个 http 的 API 控制 project service,决定把有哪些样的流量还都可不可以打到这些 里面版本。亲戚亲戚朋友的策略意味是把办公室用户,还都可不可以通过 IP 就看 IP,意味把线上的安卓用户,意味线上 1% 的安卓用户打给它,有有哪些全是还都可不可以定义的。

图 16

现在小红书是最国内早践行社区电商这些 商业模式并获得市场认可的一家电商,亲戚亲戚朋友从社区把流量引入电商,现在在电商平台的 SKU 意味上到了十万级。亲戚亲戚朋友从社区里的用户创建的笔记生成相关的标签,关联相关商品, 一块儿在商品页面也展示社区内的用户相关笔记。

孙国清

根据 Pod 的 Liveness,Kubernetes 有六个 Liveness 的概念,去检查结果,检查这些 Pod 是全是活着,是全意味准备好也能接受请求了,许多做动态的调整。最后今天意味严肃的考虑 Kubernetes 的生产环境的使用,一定要考虑请求直接发送到 pod 这些 问題,意味Kubernetes,比如说刚才说的七层请求,是 http 的请求打过来,有统统的实例跑在里面。正常一般来说,Kubernetes 原生的实现是根据 service,定义六个 service。这些 叫 service 叫serviceA,service 后端的 Pod 有找不到六个,在最外层用户请求进来的你会 ,是进入任何容器的节点都还都可不可以,这些 节点访问的 service IP 和端口转发到 Pod,多六个 转发的过程。Traefik 就全是原本,Traefik 还都可不可以直接把打到 Traefik,它马上就发到后端的 Pod,意味它和 Pod 直接关联起来的。

本文转自中文社区-Kubernetes-小红书在Kubernetes容器环境的CD实践

统统团队就在两六个 月你会 就思考为什会么会处里有有哪些问題,为什会么会把线上环境和代码发布做得更加好许多。基本上亲戚亲戚朋友时要它做到这几点:

图 7是 Pipeline 的界面。首先,我真是这些 界面很好看。二是 Pipeline 还都可不可以做得非常灵活,还都可不可以说执行了前几次步骤你会 ,等所有的步骤执行完了再执行某个步骤。这些 步骤是某个用户做某个审批,再分别执行六个 步骤其中的六个 步骤,许多再执行某个环节。也还都可不可以说要发布还是回退,发布是走发布的流程,回退后来我回退的流程。总之在这些 Pipeline 里,你所期待的 Pipeline 的功能都还都可不可以提供。

第六个 Traefik,在亲戚亲戚朋友的环境里是用来取代Nginx反向代理. Traefik 是用 Go 写的六个 反向代理服务软件。第二是 Spinnaker,这是六个 我每每所有人认为非常优秀的开源的发布系统,它是由 Netflix在去年开源的,整个社区非常活跃,它对 Kubernetes 的环境支持非常好。接下来我会重点介绍这两块东西。

图 8

六个 月你会 亲戚亲戚朋友思考为什会么会实现原本的东西。真是一开使英文了了就考虑到容器化,一开使英文了了后来我用Kubernetes 的框架做容器化的管理。为有哪些是用 Kubernetes,这和运行环境和部署环境有关系。亲戚亲戚朋友是腾讯云的重度用户, 腾讯云原生支持 Kubernetes。所谓原生支持后来我说它有几次方面的实现: 第六个 是网络层面,亲戚亲戚朋友知道 Kubernetes 在裸金属的环境下,要实现Overlay网络 ,意味有SDN网络的环境,而在腾讯云的环境里,它有一种后来我软件定义网络,统统它在网络上的实现还都可不可以做到在容器环境里和原生的网络一样的快,找不到任何的性能牺牲。第二在腾讯云的环境里,负载均衡器和 Kubernetes 里的 service 还都可不可以捆绑,还都可不可以通过 Kubernetes 的接口,创建 Kubernetes 的 service 去生成云服务的负载均衡器。第三后来我腾讯云的网盘还都可不可以被 Kubernetes 管理。有有哪些全是亲戚亲戚朋友为有哪些选则 Kubernetes 的意味。

图 2

图 12

亲戚亲戚朋友遇到不少的请况全是在开发者自测的你会 找不到问題,许多在线上发,线上全是全量发,结果就挂了。许多回退的你会 ,为什会么会做呢?亲戚亲戚朋友不还都可不可以整个流程跑一遍,开发者回退老代码,再跑一次 Jenkins 脚本,整个过程最长时要10来分钟, 这段过程线上故障经常发生,统统这些 速率挺低, 再再加现在小红书的整个技术在做许多更迭,环境的错综复杂度找不到高, 意味还是维持现有的代码上线模式, 显然会有失控的风险.

图 14

开发阶段,开发者在 UI 里 push,把东西推到 feature分支,这次开发迭代的你会 领到六个 任务,这些 任务还都可不可以推到 feature 分支 。推到 feature 分支 你会 ,配置了六个 web hook,触发六个 Jenkins job,这些 job 做单元测试和镜像构建,构建成六个 feature 分支 的镜像。生成你会 这些 新的镜像你会 ,触发 Spinnaker 的部署,这些 部署只在开发环境里。

浙大计算机系毕业,曾在传统企业 IT 部门工作多年, 最近几年开使英文了了在互联网行业从事技术及技术管理工作,曾就职于携程基础架构,负责 Linux 系统标准化及分布式存储的研究和落地,目前在小红书带领运维团队,负责业务应用,基础架构以及IT支持。每每所有人接触的技术比较杂,从开发到运维的许多领域全是兴趣,是 Scala 语言的爱好者,曾翻译了”The Neophyte’s Guide to Scala”,有上千 Scala 开发者从中受益,到小红书后开使英文了了负责系统化落地 DevOps 和提高运维速率。

图 14 是它界面,它有一种带界面。这些 亲戚亲戚朋友定义的规则,是pass。这些 规则是本面前端的应用后来我 Kubernetes 的 pod,直接打到后端应用里。

图 4

-traefik.backend.loadbalancer.method:drr

图 5