如何通过云效进行 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客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
目录
相关文章
|
3月前
|
Java 应用服务中间件 测试技术
阿里云云效产品使用合集之云效流水线如何使用alb ingress的脚本
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之appStack部署时没有日志是什么原因
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5月前
|
敏捷开发 弹性计算 负载均衡
阿里云云效产品使用问题之如何将应用部署到部署组的某一台特定服务器上
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
6月前
|
Cloud Native 测试技术 Nacos
云效 AppStack + 阿里云 MSE 实现应用服务全链路灰度
本文介绍了如何通过阿里云 MSE 微服务引擎和云效应用交付平台 AppStack 实现灰度发布。
91193 4
|
6月前
|
Cloud Native 测试技术 Nacos
云效AppStack+阿里云MSE实现应用服务全链路灰度
在应用开发测试验证通过后、进行生产发布前,为了降低新版本发布带来的风险,期望能够先部署到灰度环境,用小部分业务流量进行全链路灰度验证,验证通过后再全量发布生产。本文主要介绍如何通过阿里云MSE 微服务引擎和云效应用交付平台AppStack 实现灰度发布。
121591 3
|
6月前
|
敏捷开发 Serverless 测试技术
云效产品使用常见问题之appstack部署单拿不到最新的镜像如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
Docker 容器
云效的 AppStack 中修改编排
云效的 AppStack 中修改编排
105 1
|
Kubernetes Cloud Native 测试技术
如何通过云效进行 Knative 服务部署
背景Knative是一款基于Kubernetes的 Serverless 框架。其目标是制定云原生、跨平台的 Serverless 容器编排标准。Knative通过整合容器构建(或者函数)、工作负载管理(动态扩缩)以及事件驱动这三者来实现的这一Serverless标准。Knative 提供了简单的应用模型,并且支持流量管理能力可以根据百分比进行灰度发布。那么如何在 Knative 提供产品化的方式
214 0
|
运维 监控 数据可视化
云效AppStack评测
对云效AppStack的个人使用评测
1168 2
云效AppStack评测
|
6月前
|
Devops jenkins 持续交付
从自建DevOps部署微服务再到云效
以Jenkins+Gitlab基于k8s集群实现自建DevOps系统的方式部署开源微服务PiggyMetrics,与云效DevOps对比,介绍真正的免运维,实现高效的业务开发流程。
406 0
从自建DevOps部署微服务再到云效