作者
汤英康,腾讯高级工程师、Kubernetes 开源协同 PMC,负责 TEG 信息安全部的容器化上云相干工作。
引言
截止到 2021 年 5 月,TEG 信安运维团队历时一年,实现了 TKE 容器从 0 到 1 的平台能力建设,集群总规模超过 60 万核,在资源老本、服务质量和经营效率上都获得了显著的收益。
本文将介绍信安 TKE 容器的建设思路和历程,分享各阶段遇到的问题和计划,心愿能给其余上云团队提供一些参考。
背景
信安致力于提供业余的内容平安解决方案,承接了公司内外大量的业务平安需要,随着业务量的迅速增长,信安外部的资源规模也日益增长,在机器老本、服务质量和交付效率方面也裸露了很多优化空间;自从公司提倡开源协同、自研上云以来,TKE(Tencent Kubernetes Engine) 成了外部首推的上云形式,以 docker 和 kubernetes 为外围的容器技术也早已成为业界架构降级的支流抉择。
因而,在 2020 上半年,信安联结 TKE、智研和运管团队协同建设,开启了信安容器平台的建设之路。
建设思路和总体规划
信安对于容器平台的建设思路和历程,能够总结概括为“一个方向、三个阶段”:
【一个方向】向云原生理念看齐,围绕云原生开源生态体系进行计划选型,紧跟业界先进的基础架构降级方向;
【三个阶段】云原生有三驾马车:容器云 + Devops 经营体系 + 微服务,别离对应了容器化征途必经的三个阶段,
- 阶段 1:根底平台建设,将容器技术引入到服务架构并适配,实现从 0 到 1 的能力建设、业务革新和架构降级;
- 阶段 2:经营能力迭代,次要工作是围绕容器平台晋升研效能力、欠缺数据经营能力,并建设稳定性保障体系;
- 阶段 3:云原生成熟度晋升,基于公司公布的云原生成熟度模型,以成熟度评分为抓手,推动现有架构继续优化。
根底平台建设
平台能力建设
在 TKEStack 团队的帮助下,信安顺利地在深圳、广州、上海、南京 4 个地区实现了 CPU 独立集群的搭建,联合 TKEStack 的控制台页面,疾速具备了容器公布和治理的根底能力。
通用能力之外,在个性化需要的适配上,次要有:
- 实例固定 IP:通过 FloatingIP 插件实现,创立容器时在网络模式中抉择浮动 IP,IP 回收策略抉择“缩容或删除 APP 时回收”,即可实现
- CMDB 同步:通过 CMDB 控制器插件实现,实例启动后,插件会主动将 pod IP 注册到 annotation 中指定的业务模块
- L5/ 北极星服务注册:通过 LBCF 插件实现,实例 running 状态后,能够将实例 IP 和指定端口注册到 L5/ 北极星,实例被删除时,能够从 L5/ 北极星下线
GPU 集群也在深圳和上海实现搭建并投入使用,并设计了基于 Virtual Kubelet、将 GPU 集群的 CPU 资源注册到 CPU 集群中进行调度的计划,能更好地复用 GPU 机器上闲暇的 CPU 资源。
业务容器化革新
具备平台能力后,下一步就是对现有的 IDC/CVM 上部署的服务进行容器化革新。这里的难点次要有:
- 服务多样性,蕴含无状态、有状态和 GPU 的服务,单个服务的包很大(最大可达几十个 G),服务有本人的依赖环境等
- 须要思考多个研发经营流程节点:包含开发革新、测试流程标准、Dockerfile 镜像制作、CICD 流程、运维变更标准等
咱们次要采取了如下几个措施:
- 首先,梳理不同场景下服务的革新流程,在外部制订了对立的开发、测试和运维应用标准
- 在根底镜像的抉择上,咱们基于信安标准化的机器环境制作了根底镜像,缩小服务因为环境问题导致异样的概率
- 形象出 Dockerfile 模板,升高了服务革新老本(开发同学简直 0 参加)
- 对立容器内的启动入口(Entrypoint 和 CMD),在治理脚本中启动服务
- 局部服务在启动之前、须要将容器 IP 写到配置文件中,咱们通过在治理脚本中实现
- 对于 size 过大的软件包和镜像,思考将文件机型拆分治理,例如数据模型文件、通过服务启动时再去文件下发零碎拉取
资源利用优化
一方面,将每个服务划分到独自的 namespace 空间,联合 ns 的 ResoureQuota 来配置和限度服务所能应用的资源;
另一方面,为了晋升集群整体的资源利用率,对每个服务在理论部署时进行正当的 cpu 资源超卖,即 cpu 的 limits 值会大于 requests 值;个别会联合服务的以后利用率、指标利用率以及服务的重要性来思考,具体的超卖比例计算公式为:
指标利用率 / (以后利用率 * 服务权重)
通过这种形式,对于长期利用率低下的服务,在不调整实例的状况下,就能够极大地晋升宿主机整机的 CPU 利用率。
调度治理
通过开启 K8s 自身的 HPA 和 CA 能力,能够实现整体架构从应用层、到集群层的两级弹性调度。
因为咱们是跨地区多集群部署,所以须要对多个服务、在多个集群去配置管理 HPA,并且定期依据理论的资源应用状况,来判断以后服务的 HPA 策略是否正当;
为此,咱们设计开发了 HPA 管理系统,实现了:
- 将 HPA 策略分类管理,对于业务申请稳定状况、伸缩指标、阈值和优先级相近的服务,能够用一个调度类来批量创立 HPA 策略
- 在跨集群中,通过一个对立的入口来下发和配置 HPA,无需在每个集群独自配置和治理,晋升管理效率
- 通过定时拉取服务的监控指标,能够输入服务以后的资源理论应用状况,判断 HPA 策略合理性并批改
经营能力迭代
Devops 研效能力计划
【CICD】:基于现有的智研 CI 流水线,减少【智研 - 镜像构建】和【智研 - 制品入库】插件,将编译生成的软件包转化成镜像后推送到对立软件源,实现 CI 和 TKE 的对接
【监控】:将 agent 注入到根底镜像中,随治理脚本启动
【日志】:业务日志间接上报到智研,k8s 集群层面的 event 事件,通过事件长久化组件存储到 Elasticsearch、供后续查问
【配置管理】:将七彩石 agent 注入到根底镜像中,随治理脚本启动,服务对立用七彩石下发配置
数据经营零碎建设
为了更贴合业务经营场景,咱们设计并开发了 kbrain 零碎,在后盾对接 k8s 集群、拉取根底数据并进行二次解决后存入 cdb 中,通过 grafana 配置展现业务维度的视图数据和报表,并引入了衰弱度评分、老本收益、超卖比例、资源碎片实例等有价值的数据作为经营参考。
对于曾经配置了 HPA 弹性伸缩策略的服务,也能够在 HPA 调度看板查看成果,如下图所示:
这里有 4 条曲线:以后利用率、指标利用率、以后正本数、指标正本数
趋势图证实:以后利用率进步时,指标正本数随之进步,扩容实现后、利用率复原到失常程度
稳定性保障体系
对于 TKE 这样的大规模根底平台,欠缺的稳定性保障体系和平台撑持是必不可少的。次要从以下几个方面思考:
- SLA 标准:作为业务方,和 TKE 平台撑持方明确对齐 SLA 标准,包含不可用的定义、故障的响应机制和解决流程、平台运维变更标准、节假日标准以及问题回升渠道等,这是稳定性的根底
- 稳定性指标:整顿所有可能反馈平台和业务稳定性的指标,并通过后盾拉取后在 grafana 平台汇聚展现
- 容量治理:实时监测集群的残余资源水位,防止因容量有余导致的故障
- 预案机制:梳理所有可能产生的故障,并提前设计好疾速复原的应急预案
- 监控告警:查看集群和服务是否都接入和上报了无效的监控指标,呈现问题时必须能第一工夫收到告警
- 混沌工程:协同引入混沌工程 oteam,围绕 TKE 建设故障演练能力,测验 SLA、稳定性指标、容量零碎和预案机制的可靠性
云原生成熟度晋升
通过前两个阶段的根底平台建设和经营能力迭代,咱们根本实现了容器能力从 0 到 1、从无到有的建设;下一步,是从“有”到“优”,把现有的容器架构和业务革新模式、往更加云原生的方向聚拢。
富容器瘦身
在后期,因为人力投入无限,咱们采纳了富容器的形式革新业务,也就是把容器当成虚拟机用,在容器的根底镜像外面注入了过多的根底 agent。
基于云原生理念和容器的正确关上姿态,咱们把容器进行瘦身,将原有的容器拆分成:1 个业务容器 + 多个根底 agent 容器,将大文件从镜像外面齐全剥离、利用云盘 / 云存储 / 文件散发零碎实现。
拆分后,1 个 pod 外面会有多个容器,容器之间如果须要共享文件(例如 业务过程读写智研监控 agent 的 socket 文件),能够采纳 emptydir 卷挂载形式实现。
小外围革新 +Overlay 网络优化
对于 TKE 容器集群来说,如果大多数服务都是大外围配置(例如 36c、76c 甚至更大),会产生较多的资源碎片,一部分节点的残余可分配资源(2c、4c、8c 等)无奈真正调配进来,造成资源节约。所以,从宏观角度看,须要把大部分服务的容器资源配置尽可能切小。
信安的服务在容器化革新之前,习惯了多过程的架构并为之做了优化,单机常常运行 48/76 个过程(甚至更多);容器化革新运行后,因为超卖、基于获取到的 cpu limits 值运行的过程数会远高于 cpu requests 值,导致局部过程异样(无奈真正绑核运行)。
因而,须要批改服务运行配置、切换到小外围配置且 requests=limits 值的容器中运行。
然而,在容器切小外围的同时,服务的实例数也会增长。例如,从 76 核配置切换到 38 核,实例数会翻一倍;从 76 核到 8 核,实例数简直扩充到 10 倍。如果这时服务仍然采纳 FloatingIP 的网络架构,对于集群底层的 IP 资源又是一个微小的开销。
一般来说,切换到 Overlay 网络即可,但 Overlay 网络的提早会高出 20%,而且因为是集群内惟一的虚构 IP、所以无奈注册到 L5/ 北极星、也不反对 monitor 监控。
通过和 TKE 团队的调研论证,最终设计采纳了基于 Overlay 改良的 HostPort 网络计划:实例 Pod 仍然拿到的是集群内虚构 IP,然而能够把 Pod 外部的服务端口映射到宿主机的随机端口,再把宿主机 IP+ 随机端口 注册到 L5/ 北极星,从而既实现了服务注册、又可能最大限度升高时延。
咱们针对试点服务(低俗辨认)首先实现了小外围革新 +Overlay 网络的部署和测试,验证失去:
overlay+HostPort 网络下的吞吐量与时延、和 FloatingIP 靠近
成绩小结
目前,信安已根本实现了 根底平台建设 + 经营能力迭代 这两个阶段的建设工作,正在致力晋升云原生成熟度。截止到 2021 年 5 月:
1)信安 TKE 集群累计规模达 62w+ 核,GPU 卡容器化超 2000 卡
2)业务累计接入 40+ 个信安服务,约占 33% 的转维服务
3)累计节省成本约 20w 核,品质和效率也有显著的晋升。
结语
技术圈有一句名言:“ 人们对于新技术往往都会短期高估它的影响,然而大大低估它长期的影响 ”。
新的技术,从发明到落地必然须要经验一个过程,它须要在短期付出比拟多的投入,架构的降级也会给团队其余我的项目和人员带来阵痛;但只有论证分明方向、并动摇地朝着它致力,咱们必将迎来量变、播种咱们所期望的馈赠。
路漫漫其修远兮,心愿大家都能在云原生建设的路线上行得更远、走得更好!
容器服务(Tencent Kubernetes Engine,TKE)是腾讯云提供的基于 Kubernetes,一站式云原生 PaaS 服务平台。为用户提供集成了容器集群调度、Helm 利用编排、Docker 镜像治理、Istio 服务治理、自动化 DevOps 以及全套监控运维体系的企业级服务。
【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!