如何通过云效进行 Knative 服务部署

简介: 背景Knative是一款基于Kubernetes的 Serverless 框架。其目标是制定云原生、跨平台的 Serverless 容器编排标准。Knative通过整合容器构建(或者函数)、工作负载管理(动态扩缩)以及事件驱动这三者来实现的这一Serverless标准。Knative 提供了简单的应用模型,并且支持流量管理能力可以根据百分比进行灰度发布。那么如何在 Knative 提供产品化的方式

背景

Knative是一款基于Kubernetes的 Serverless 框架。其目标是制定云原生、跨平台的 Serverless 容器编排标准。Knative通过整合容器构建(或者函数)、工作负载管理(动态扩缩)以及事件驱动这三者来实现的这一Serverless标准。

Knative 提供了简单的应用模型,并且支持流量管理能力可以根据百分比进行灰度发布。那么如何在 Knative 提供产品化的方式持续交付部署,灰度发布呢?

解决方案

首先 Knative 提供了比较简单的应用模型:Knative Service。通过该模型可以快速实现应用部署、基于流量的灰度发布以及自动弹性能力,可以简单的这样理解:

Knative Service=Ingress + Service + Deployment + 弹性(HPA) 

也就是说如果要在K8s中实现七层服务访问能力,需要创建 Ingress、Service、Deployment这些资源,而这是提供了基本服务访问能力,想要弹性的话还需要结合 HPA。而通过 Knative 只需要部署一个 Knative Service 资源即可。

此外在k8s中基于流量对灰度过程,我们需要对这些资源进行细粒度的控制,包括新版本对应资源的创建以及灰度完成之后旧版本资源的清理,对于用户来说还是比较复杂的。

在 Knative 中对于新变更只需要更新一下Knative Service信息(如镜像),就会自动创建一个新版本,灰度的规程只需要在Knative Service中调整对应版本的流量比例即可。如下图:

阿里云云效,云原生时代新 DevOps 平台,当前已经与容器服务ACK做了深度集成。通过云效持续交付流水线和阿里云容器服务 Knative 结合在一起,可以进一步简化用户应用部署、灰度发布等操作,为应用的持续交付提供很好的基础保障,让用户专注于业务开发,降低发布成本。

场景案例

本文通过一个 Springboot 项目来具体演示,如何通过云效快速实现 Knative 的部署发布。

云效操作实践

接下来讲解如何将示例代码库进行构建并将 Knative Service 部署到阿里云 ACK。

准备工作

  • 注册阿里云账号或RAM账号。
  • 准备阿里云ACK集群。创建方式请参考 创建Kubernetes托管版集群
  • 准备Knative。创建方式参考 部署Knative
  • 准备阿里云镜像仓库ACR。为了能够快速的拉取镜像,建议将ACK集群与ACR放在同一区域,如本例中的华东1:杭州,这样后续在进行Kubernetes部署的时候,我们可以选择镜像VPC地址。若不再同一区域,请选择VPC公网地址。创建方式请参考 创建ACR个人版实例

创建流水线

  1. 进入云效点击页面左上角的dock,选择流水线进入Flow.点击页面中的【新建流水线】按钮,进入流水线创建向导页面。在弹出页面中选择如下模板,并点击【创建】按钮

配置代码库

创建流水线之后会自动弹出添加代码源的窗口,这里选择Flow提供的示例代码源,并进行添加

配置镜像构建任务

  1. 进入“镜像构建并推送至阿里云镜像仓库”的任务进行编辑。如下图所示,点击”新建服务授权”,进行阿里云授权。同意授权之后,Flow会将创建好的服务授权自动回填写到表单中。

接下来完成区域、仓库的选取。标签填入“${DATETIME}”,表示以流水线触发时的时间戳作为镜像的标签,很多企业习惯将分支名或者tag作为镜像的标签,云效也是支持的,如下图所示,详情参考链接环境变量

Dockerfile路径填入”Dockerfile”,如下图所示。

配置好之后再“镜像构建并推送至阿里云镜像仓库”任务的下方可以看到该任务输出的变量,这些变量可以在后续的任务中引用。关注其中的第二个和第三个变量即可,其中第二个是该镜像地址的公网地址,第三个是该镜像地址的VPC地址。这里推荐将镜像仓库和ACK集群放在同一个region,然后在后续的部署任务中选择VPC地址,以加速部署过程。

配置部署任务

点击“Kubernetes发布”任务,进入配置。点击”新建连接”,进行集群授权,完成阿里云授权及集群选取。点击确认之后,集群信息会自动填到任务配置中。

配置YAML路径,本示例中YAML路径地址为:app-configs/knative。

配置变量,本演示案例中,需配置1个变量: 镜像地址image。

  • 配置变量 image 。点击【添加参数】按钮,变量类型选择上游输出,变量名填入 image ,选择镜像的VPC地址作为变量值。如下图所示

这样在运行时,Flow会把YAML路径下的所有文件中的${image}都替换成镜像的地址,然后再进行kubectl发布。示例代码内容如下,所以其中的${image}就会被替换成实际的镜像地址。

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: spring-boot-knative
spec:
  template:
    spec:
      containers:
        - image: ${image}

运行流水线

配置完毕,点击”保存并运行”触发流水线:

由部署完成之后,可以在Knative 产品页面看到服务已经部署成功

可以通过下面的方式进行验证。

$ curl -H "Host: spring-boot-knative.default.example.com" http://123.56.101.6
Greetings from Spring Boot! V4

小结

当前已经在云效的示例代码中支持 Knative 示例代码(这里感谢云效 @木烟 同学的支持),用户可以很方便的通过云效部署 Knative, 接下来期待与云效进一步集成,通过云效支持 Knative 灰度发布 等能力。

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
SVN版本控制系统
SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
目录
相关文章
|
2月前
|
敏捷开发 弹性计算 持续交付
阿里云云效产品使用合集之同一个主机部署是否支持下载多个制品
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之如何进行本地化部署
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2月前
|
敏捷开发 运维 测试技术
阿里云云效产品使用合集之如何同时部署多个主机
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2月前
|
运维 前端开发 Ubuntu
阿里云云效操作报错合集之部署执行source .bashrc报错,提示找不到source命令,是什么原因
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
2月前
|
运维 Java Devops
阿里云云效操作报错合集之部署docker时遇到报错,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
2月前
|
缓存 资源调度 Kubernetes
阿里云云效产品使用合集之如何将两个独立的代码仓库构建并部署到同一个容器内
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之appStack部署时没有日志是什么原因
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之如何去除流水线部署阶段脚本的字符限制
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2月前
|
敏捷开发 弹性计算 缓存
阿里云云效产品使用合集之流水线服务连接管理一直在加载中,是什么导致的
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
存储 弹性计算 监控
建设云上稳定性问题之为什么要在云效平台创建发布流水线并将源代码编译环节替换为从OSS下载构建部署物
建设云上稳定性问题之为什么要在云效平台创建发布流水线并将源代码编译环节替换为从OSS下载构建部署物