全部产品

如何通过云效进行K8S部署

1、背景

持续交付及服务化,是当前比较多互联网软件开发采用的实践,其很大程度地提高了团队对于软件交付的响应能力。新的技术实践的采用,也同样影响着软件开发的协作模式,即从传统的单一技术职能团队间抛接的工作方式,逐渐往多技术职能融合的微服务DevOps团队演进,整体负责应用的构建、部署和监控,打破原来技术职能竖井,加快发布及运维问题的响应。

但是,如何快速地适应这些变化,享受技术红利及好的研发方式,依旧伴随着诸多挑战。

2、当前互联网产品持续交付中遇到的挑战

  • 首先,随着服务的数量变多,服务之间的耦合性及复杂度也在增加,交互变多,可能的故障点也有可能变多。应用部署环境日趋复杂,测试、运维负担加重,出错概率升高

  • 其次,每个服务应用的开发,可能是由不同的开发人员单独完成,如果在集成发布过程中,质量标准不一致,版本不一致,可能导致整体的系统故障

  • 另外,针对中小型企业而言,基础设施保障的建设往往落后于企业的快速发展,缺乏统一的研发平台,自动化程度低,没有有效的质量保障体系

  • 业界有很多很好的实践,但是复用到自己团队却很难,无从下手。

为了解决这些问题,阿里云提供基于容器,通过云效和K8S结合的持续交付解决方案,帮助用户快速上手,进行应用的持续交付

3、阿里云云效+K8S产品优势

云效持续交付能力

首先,云效持续交付流水线是基于阿里巴巴众多团队的实践经验,为互联网产品开发量身定制,同时支持集成主流的研发工具,覆盖产品研发全生命周期,提供可视化交付流水线。

K8S1

代码管理

  • 阿里巴巴自研,适合企业级代码库,提供企业间数据隔离及企业-代码库-成员三级权限管控能力。

  • 安全稳定的代码库,完善的日志审计、IP白名单等实现访问控制,让你的代码安全无忧。

  • 多样化代码评审,完善的配置能力支持丰富的代码评审场景,自动化代码扫描提高评审效率。

  • 自动化代码检测,提供安全扫描快速暴露代码安全问题,同时提供代码规约检查保障代码质量。

流水线

  • 快速生成流水线,适用多种场景,通过模版来快速创建流水线,提供可视化编排和结果展现,所见即所得;

  • 自动化质量保障手段,支持代码扫描、安全扫描,人工测试卡点等多种质量红线,确保业务交付质量。

  • 支持多语言,Java、Node.js、Python、PHP、Golang等语言脚手架生成代码框架,可以对接主流代码仓库;

  • 软件发布支持,保障业务稳定交付,通过灰度发布、分批发布的策略,保障业务交付的稳定。

  • 钉钉消息通知,流水线运行结果,即时准确地反馈到钉钉群。降低沟通成本,提升团队工程协同。

K8S产品能力

选择K8S,是因为K8S是流行的开源容器编排技术。基于K8S部署应用具备独有的管理优势。

  • 集群管理:10分钟一键创建集群,稳定、可靠、高效;

  • 应用管理:应用弹性伸缩、helm应用一键部署;

  • 网络管理:高性能VPC网络,访问策略和带宽灵活可控,支持负载均衡;

  • 存储管理:支持阿里云云存储,动态扩容;

  • 运维管理:一键升级,完善的日志与监控;

  • 服务保障:专业容器团队,为集群提供及时稳定性和安全响应;

云效流水线+K8S解决方案

结合云效持续交付流水线和阿里云K8S的优势,做为都是阿里云原生的两个产品,很好的结合在一起,为应用的持续交付提供了很好的基础保障,如下图:

K8S2.1

开发者提交代码变更到代码库,云效在监听着代码库的变动,一旦代码发生变化,将自动触发云效持续部署流水线一次构建任务的运行,包括代码检查、构建、测试部署、测试验证和生产部署等过程。其中,在构建完之后,生成Docker镜像,并自动上传至应用镜像仓库,在部署阶段(测试环境的部署和生产环境的部署)时,再从应用镜像仓库中取得最新的版本,通过K8S进行容器编排部署。而这一切,都是通过自动化的手段进行完成。

以下,我们将分步骤介绍如何快速配置这样包含云效和阿里云K8S的持续部署流水线。

4、云效+K8S部署操作指南

通过以下步骤快速创建基于云效和K8S的部署流水线;

新建流水线

进入流水线应用,点击右上角【新建流水线】,选择对应的开发语言,选择"镜像构建,发布到 Kubernetes" 模板,即可快速使用 Kubernetes 发布能力。

K8S3.1

点击创建,完成初始化流水线,此时弹出新建代码源,选择代码服务和输入代码仓库地址,点击保存。

K8S3.2

编辑流水线

构建配置:点击【Docker镜像构建】阶段,在右侧浮层中点击【镜像构建并推送阿里云】任务,这里会要求登录阿里云账号,并确认授权,同意授权后会自动跳转回 Flow 页面。

K34

继续选择【区域】和【仓库】,并设置镜像的 TAG 标签。在 Dockerfile 路径中需要填写构建镜像所用的 Dockerfile 相对路径。在 ContextPath 则填写 Docker 构建时的执行上下文。

中34

部署配置:点击【Kubernetes发布】阶段,进入Kubernetes部署信息配置页面,Kubernetes服务连接即用户可以通过Kubernetes证书文件或者是云服务授权的方式,让云效可以将应用发布到第三方的Kubernetes集群中。

k35

阿里云容器服务Kubernetes集群,新建链接选择【容器服务集群】;

k36

首次使用该功能需要用户进行RAM授权,使云效能够获取发布的目标集群信息;

k37

完成 RAM 授权后,在下拉框中用户可以选择当前绑定账号可以访问的所有阿里云容器服务Kubernetes集群列表。

k39

自定义集群,新建链接选择【自定义集群】,输入集群名称并提供集群配置文件,点击保存即可。

k40

运行流水线

点击流水线编辑页面右上角【运行】,流水线会自动保存并开始运行;

k42

查看测试报告

点击流水线页面各阶段测试报告,可以查看详细的测试结果进行分析;

k43

5、云效+K8S流水线进阶

上一节介绍了流水线基本操作,在实际部署操作中可以根据需要完善流水线,增加更多验证和卡点,例如:

流水线1: 持续验证流水线:(部署测试环境K8S集群)

k51

流水线2: 持续发布流水线:(部署生产环境K8S集群)

K46

流水线定义了持续交付过程的各个步骤和卡点,通过执行流水线1和流水线2即可完成从代码提交到正式发布的持续交付过程。

6、更多场景

本文主要围绕持续交付模型介绍了研发流程改造、效能提升的案例。关于其他场景和模式,例如GitOps工作流程与模式,以及大规模运行Kubernetes的实践经验,我们后续将持续推出。

结语

技术的发展,应该给开发者带来更多的便利,及时享受到技术带来的红利。但新的技术和方法涌现,有时也会带来额外的学习成本,老话常说:“没赚到便宜,就是吃亏”。借助现成的工具平台,降低使用新方法新技术的门槛,快速复用先进的实践,这是每一位开发者可以选择的最短路径。云效的目标就是帮助众多开发者达成这一目标的一个有效手段。

附录:参考资料

•云栖社区:容器服务K8S vs 自建K8S 区别:https://yq.aliyun.com/articles/590237

•内部资料:https://yuque.antfin-inc.com/docs/share/51372bd7-2cae-4bd4-9c90-067cc1de8e69