安畅网络借助青云QingCloud容器平台构建云原生迁移实践
1.安畅网络简介
安畅网络是中国市场领先的下一代云托管服务商(Cloud MSP),安畅以客户需求驱动,以云计算为底座,面向企业客户提供云原生技术服务和数字化解决方案,帮助客户上好云、管好云和用好云(为客户构建下一代云基础设施和技术中台、提供智能化全托管云运维和管理服务、开发现代化云原生应用),致力于成为 IT 新生态和产业 互联网 的连接器。
安畅网络
2.SmartAnt 迁移平台的云原生之路
一站式迁移平台 SmartAnt,是安畅网络开发的一款轻量级的迁移平台,能帮助用户快速将业务迁移上云,摆脱繁琐的迁移上云过程。
通过可视化界面,一键迁移,支持主机/数据库/对象存储等迁移类型,从根本上颠覆传统云迁移所带来的困扰。
一键式迁移流程,高效快捷,能让任何人具备“云计算迁移工程师”的能力,帮助更多个人、企业用户打通通向云端的“荣耀之路”,助力企业数字化转型。
3.基础架构演进
一路走来,迁移工具从单模块单体,到多模块单体,再到微服务架构,业务架构在顺应分布式的微服务技术潮流进行演进。
同时,我们的基础设施架构也在不断变更,从传统的 IDC 物理机房服务器,到云服务器的虚拟化,利用公有云资源提供的负载均衡器及其他云产品完成高可用架构,再到以 Docker 和 Kubernetes 为基础的云原生架构,我们为了响应市场的快速需求而不断进行技术革新与演进。
4.遇到的问题
我们在微服务改造过程中并不是一帆风顺的:
如何管理 Kubernetes 声明式的 API,
如何对微服务进行快速部署与监控运维,
如何落地 Service Mesh(服务网络)等,
如何搭建 CI/CD 系统,都给我们带来了不小的挑战。
在最初仅使用原生的 Docker + Kubernetes 环境时,我们踩了不少坑,也走了不少弯路,我们调研和尝试了业界流行的各种技术方案,最终构建了一套非常适合我们产品的解决方案。
本文将详细解读我们如何解决这一系列问题,希望我们的经验总结对大家有帮助。
5.如何搭建生产级别的集群
我们直接采用了开源的 KubeSphere 容器平台,使用 KubeSphere Installer 一键部署了高可用架构的 Kubernetes 集群,配合我们在公有云和私有云的负载均衡器来实现高可用架构。
并且,我们对私有部署的 Kubernetes 集群中 3 个 master 节点 api-server 的 6443 端口进行监听,保证集群高可用。
搭建生产级别的集群
通过 KubeSphere 内置的集群状态监控面板,实现了对节点的资源用量进行可视化管理。
即使在安装后遇到节点资源不足,也能非常方便地通过 Installer 按需新增 Node 节点,免去了 Kubernetes 基础设施部署的复杂性。
集群状态监控面板
存储利用云盘自建 Ceph 集群,KubeSphere 提供丰富的存储插件,快速方便地继承到 Kubernetes 的 StorageClass中,为应用提供持久化的数据存储,并且在界面也可以非常方便地对 Ceph RBD 存储卷进行可视化管理。
Ceph RBD 存储卷
6.如何对不同环境的权限进行管控
由于 Kubesphere 对原生 Kubernetes 的 RBAC 基于企业空间层(Workspace)的权限管控设计,以及细粒度的基于用户与角色的权限分配。
我们直接通过 KubeSphere 不同企业空间下的项目(Namespace)来进行开发、测试与生产环境的隔离。
如下图,其中 Dev 环境为业务开发环境,开发人员授权可以登录容器终端查看容器日志等,test 环境为测试人员开放权限,方便测试人员进行业务功能的测试,prod 环境为线上正式环境,只有集群管理员可以登录维护。
对不同环境的权限进行管控
7.服务怎么治理
针对南北流量,利用开源 Kong 提供 API 网关,基础设施下沉到 Kubernetes 内,提供流量控制、黑白名单、认证鉴权等功能。
在微服务间的东西流量管理上,我们使用了 KubeSphere 内置的 Istio 来实现微服务治理,帮助我们对 SmartAnt 平台满足了负载均衡、流量监控、链路追踪、熔断降级等非常典型的应用场景。
下图为 SmartAnt 中将服务器主机迁移微服务的服务治理图,KubeSphere 集成了 Istio 多样化功能,使我们能够非常高效地运行分布式微服务架构,为微服务提供保护、连接和监控微服务的统一方法,通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度控制。
在我们的 SmartAnt 平台的实际应用中,迁移偶尔存在网络异常情况,该步骤可以设置重试,从而避免单词调用异常导致整个迁移过程的失败。
对于高并发的后端服务,我们配置了服务降级及熔断策略,保障核心调度可以稳定正常的工作,期间配合 Kubernetes 的 HPA,动态拉起多个应用 Pod 来减轻请求压力,我们基于 KubeSphere 设计的这一整套微服务治理方案使得业务本身的故障自愈能力大大提升,无需开发人员介入。
流量拓扑
KubeSphere 基于 Jaeger 实现的 Tracing,使得我们能够在不同微服务之间存在的很长的请求调用链中,清楚地了解服务性能,以及快速定位排错,方便了我们将更多的精力专注于 SmartAnt 迁移平台的开发和测试。
服务请求调用链追踪
8.如何灰度上线
对于频繁更新的应用,灰度上线是必不可少的功能。基于 KubeSphere 内置的 Istio 提供的金丝雀发布的特性,我们可以非常方便地在 KubeSphere 控制台通过拖拽的方式对不同版本的应用组件的进行灰度发布上线。
灰度上线
9.CI/CD 流水线如何落地
在 CI/CD 的方案实施上,我们勇于尝鲜,在不同的项目环境中使用了不同 CI/CD 工具方案。
例如,目前针对 Dev 环境,为了方便开发人员进行协同开发,我们直接使用 Gitalb CI,利用 GitOPS 理念,端到端的开发自动部署。
GitLab CI
而正式环境则使用 KubeSphere 内置的 DevOps 流水线,天然继承,无需多余扩张即可实现应用的快速发布上线。
如图, KubeSphere 的 Devops 流水线,WEB 简单配置即可生成 Jenkinsfile,快捷方便。另外,我们有一部分应用也使用了 Argo CD ,在未来也计划尝试 Tekton 等。
KubeSphere 流水线
CI/CD 流水线
10.如何落地监控与告警
集群维度的监控我们使用了 KubeSphere 内置的监控,希望 KubeSphere 在后续版本可以提供更多告警方式。
我们也自研了一套监控告警系统,实现了对 Kubernetes 集群、 Node、事件(Events)、以及业务本身的监控,通过短信、 微信 、钉钉和邮件的方式发送告警通知给运维人员。
监控与告警
11.日志如何查询与管理
KubeSphere 也提供了开箱即用的解决方案 FluentBit Operator,在集群所有节点以 DaemonSet 运行,并统一部署配置了 Fluent Bit。
我们的迁移平台在容器化的时候就一些考虑到后期的日志继承方式,为适配多种类型的日志,我们将日志分为两个地方输出,一份输出到 stdout,一份以文件形式持久化到 logs 目录,万一需要 filebeat 方式继承,那么无需后期对应用做其他修改,可借助 KubeSphere 的日志收集,方便快捷地在平台上查看日志,也可以将日志发送到集群外的 ES/Kafka 等接收者中,对日志进行持久化保存,以供后期分析处理。
同时,KubeSphere 提供了一键日志索引与定位的特性,利用该特性,我们可以从日志控制台搜索关键字,通过日志输出信息发现问题后,一键下钻到出现异常的容器,或项目的详情页,快速定位容器异常问题。
日志查询
12.KubeSphere 排错实战三连载
当然在真实的微服务改造及应用中困难也不少,之前我也精心整理了 KubeSphere 实战排查三连载,希望可以帮助到用 KubeSphere 的用户朋友。
13.拥抱开源,共话云原生
KubeSphere 帮助我们将打造了 SmartAnt 云原生迁移平台,我们能够把更多的精力放在迁移平台的逻辑业务开发。
同时,KubeSphere 提供从基础设施高可用部署、CI/CD、服务治理、权限管控、监控日志告警等一整套完善的云原生解决方案,并且 KubeSphere 是完全开源的,社区也非常活跃,在这里可以遇到志同道合的友人,共同探讨适合自己的业务转型的云原生之路。