如何通过云效进行 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客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
目录
相关文章
|
Kubernetes Cloud Native 测试技术
如何通过云效进行 Knative 服务部署
背景Knative是一款基于Kubernetes的 Serverless 框架。其目标是制定云原生、跨平台的 Serverless 容器编排标准。Knative通过整合容器构建(或者函数)、工作负载管理(动态扩缩)以及事件驱动这三者来实现的这一Serverless标准。Knative 提供了简单的应用模型,并且支持流量管理能力可以根据百分比进行灰度发布。那么如何在 Knative 提供产品化的方式
231 0
|
Kubernetes Devops 持续交付
云效 loves Kubernetes
作者简介:郑云龙,云效团队高级开发工程师,CNCF基金会Certified Kubernetes Administrator。在敏捷和DevOps领域有丰富的实践经验,曾作为敏捷和DevOps技术教练向多家大型企业提供咨询和培训。
2990 0
|
6月前
|
Java 应用服务中间件 测试技术
阿里云云效产品使用合集之云效流水线如何使用alb ingress的脚本
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
Docker 容器
云效的 AppStack 中修改编排
云效的 AppStack 中修改编排
118 1
|
9月前
|
Cloud Native 测试技术 Nacos
云效AppStack+阿里云MSE实现应用服务全链路灰度
在应用开发测试验证通过后、进行生产发布前,为了降低新版本发布带来的风险,期望能够先部署到灰度环境,用小部分业务流量进行全链路灰度验证,验证通过后再全量发布生产。本文主要介绍如何通过阿里云MSE 微服务引擎和云效应用交付平台AppStack 实现灰度发布。
121647 3
|
9月前
|
Cloud Native 测试技术 Nacos
云效 AppStack + 阿里云 MSE 实现应用服务全链路灰度
本文介绍了如何通过阿里云 MSE 微服务引擎和云效应用交付平台 AppStack 实现灰度发布。
91239 4
|
弹性计算 持续交付
我的云效部署
自动化部署2048小游戏到ECS
227 0
|
运维 Kubernetes jenkins
【云效最完整测评】从自建DevOps部署微服务再到云效
本人还是个在校生,不是什么业界大佬,每次社区出征文计划我都会珍惜测评的机会。因为本人专业学习的是网络方向,对开发其实还是有不少欠缺。在学习云计算时对devops进行了研究,包括容器云k8s的一些列运维搭建。很多概念上的东西要是理解错误,希望各位能够多多指教QAQ
22126 7
【云效最完整测评】从自建DevOps部署微服务再到云效
|
弹性计算 运维 小程序
云效+ACK 构建容器云 DevOps 平台 最佳实践
最佳实践目前已覆盖23类常用场景,已发布200多篇最佳实践,这其中涉及100款以上阿里云产品的最佳使用场景。目前,最佳实践已成功帮助大量客户实现自助上云。本篇主要讲述容器应用DevOpsforACK集群最佳实践。DevOps的目的是构建一种文化和环境,使构建,测试,发布软件更加快捷,频繁和可靠。而到了容器时代,需要部署的机器不但量更大,变化更剧烈,有的甚至需要根据条件自动升缩,为了满足企业敏捷的需求,持续部署也成了必须,本方案使用云效完成容器应用(小程序后端服务)的自动化构建和持续部署。
云效+ACK 构建容器云 DevOps 平台 最佳实践
|
9月前
|
Devops jenkins 持续交付
从自建DevOps部署微服务再到云效
以Jenkins+Gitlab基于k8s集群实现自建DevOps系统的方式部署开源微服务PiggyMetrics,与云效DevOps对比,介绍真正的免运维,实现高效的业务开发流程。
468 0
从自建DevOps部署微服务再到云效