「无服务器架构」动手操作Knative -第1部分

本文涉及的产品
简介: 「无服务器架构」动手操作Knative -第1部分

我最近一直在研究Knative。在这个由三部分组成的博客系列中,我想解释一下我的收获,并展示一些我在GitHub上发布的Knative教程中的例子。

Knative到底是什么?

Knative是运行在Kubernetes上的无服务器容器的开源构建块集合。

此时,您可能会想:“Kubernetes,没有服务器,这是怎么回事?”但是,当你仔细想想,这是有道理的。Kubernetes是非常流行的集装箱管理平台。应用程序开发人员希望使用Serverless来运行他们的代码。Knative用一套积木将两个世界连接在一起。

谈到积木,它由3个主要组成部分:

  • Knative Serving 用于快速部署和自动调整无服务器容器。
  • Knative Eventing用于松散耦合、事件驱动的服务的Knative事件处理。
  • Knative Build,用于注册表中的无痛苦的代码到容器的工作流。

让我们从本地服务开始。

什么是 Knative Serving ?

简而言之,Knative服务允许快速部署和自动调整无服务器容器。您只需指定要部署什么容器,而Knative负责如何创建该容器并将流量路由到它的详细信息。一旦您将您的无服务器容器部署为Knative服务,您将获得诸如自动扩展、针对每个配置更改的修订、不同修订之间的流量分割等功能。

Hello World服务(Serving)

要将你的代码部署为Knative服务,你需要:

将代码装入容器并将映像推入公共注册中心。

创建一个服务yaml文件,告诉Knative在哪里可以找到容器映像及其所有配置。

在我的Knative教程的Hello World服务部分中,我详细描述了这些步骤,但是在这里重述一下,这是一个最小的Knative服务定义service-v1的方式service-v1.yaml的样子:

apiVersion: serving.knative.dev/v1alpha1

kind: Service

metadata:

name: helloworld-csharp

namespace: default

spec:

runLatest:

configuration:

revisionTemplate:

spec:

container:

# replace {username} with your DockerHub

image: docker.io/{username}/helloworld-csharp:v1

env:

- name: TARGET

value: "C# Sample v1"

runLatest意味着我们希望立即使用指定的容器和配置部署最新版本的代码。部署服务:

kubectl apply -f service-v1.yaml

此时,您将看到创建了许多东西。首先,创建一个Knative服务及其pod。其次,创建一个配置来捕获Knative服务的当前配置。第三,将修订创建为当前配置的快照。最后,创建一个路由将流量导向新创建的Knative服务:

kubectl get pod,ksvc,configuration,revision,route

NAME READY STATUS RESTARTS

pod/helloworld-csharp-00001-deployment-7fdb5c5dc9-wf2bp 3/3 Running 0

NAME

service.serving.knative.dev/helloworld-csharp

NAME

configuration.serving.knative.dev/helloworld-csharp

NAME

revision.serving.knative.dev/helloworld-csharp-00001

NAME

route.serving.knative.dev/helloworld-csharp


改变配置

在Knative服务中,每当您更改服务的配置时,它都会创建一个新的修订,这是代码的时间点快照。它还创建了一个新的路线,新的修订将开始接收流量。



在我的Knative教程的更改配置一节中,您可以看到更改Knative服务的环境变量或容器映像如何触发新修订的创建。

流量分裂

在Knative中,您可以很容易地在服务的不同版本之间分配流量。例如,如果您想推出一个新的修订版本(0004)并将20%的流量路由到它,您可以执行以下操作:

apiVersion: serving.knative.dev/v1alpha1

kind: Service

metadata:

name: helloworld-csharp

namespace: default

spec:

release:

# Ordered list of 1 or 2 revisions.

# First revision is traffic target "current"

# Second revision is traffic target "candidate"

revisions: ["helloworld-csharp-00001", "helloworld-csharp-00004"]

rolloutPercent: 20 # Percent [0-99] of traffic to route to "candidate" revision

configuration:

revisionTemplate:

spec:

container:

# Replace {username} with your actual DockerHub

image: docker.io/{username}/helloworld-csharp:v1

env:

- name: TARGET

value: "C# Sample v4"


注意,我们将runLatest模式更改为release模式,以分割服务的流量。

我的Knative教程的流量分割部分有更多的例子,比如如何在现有的版本之间分割流量。

与其他服务集成

Knative服务可以很好地与其他服务集成。例如,您可以使用Knative服务作为外部服务(如Twilio)的webhook。如果您有一个暮光之城号码,您可以回复短信发送到该号码从Knative服务。

整合暮光部分我的Knative教程有详细的步骤,但它本质上归结为创建代码处理暮光的消息:

[Route("[controller]")]

public class SmsController : TwilioController

{

[HttpGet]

public TwiMLResult Index(SmsRequest incomingMessage)

{

var messagingResponse = new MessagingResponse();

messagingResponse.Message("The Knative copy cat says: " + incomingMessage.Body);

return TwiML(messagingResponse);

}

}


定义一个Knative服务:

apiVersion: serving.knative.dev/v1alpha1

kind: Service

metadata:

name: twilio-csharp

namespace: default

spec:

runLatest:

configuration:

revisionTemplate:

spec:

container:

# Replace {username} with your actual DockerHub

image: docker.io/{username}/twilio-csharp:v1

然后指定Knative服务为Twilio短信的一个webhook:


相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
2天前
|
运维 监控 Serverless
【专栏】引领未来科技发展的无服务器架构(Serverless)
【4月更文挑战第28天】无服务器架构,一种云计算模型,让开发者专注编写代码而不必管理服务器。它基于事件驱动,自动扩展资源并按需计费。优势包括缩短开发周期、优化资源利用、降低成本、提高可用性及简化维护。然而,冷启动延迟、调试困难、性能监控、安全性和学习曲线等挑战仍需解决。随着技术进步,无服务器架构将在科技发展中发挥更大作用。
|
14天前
|
Cloud Native Serverless API
Serverless 成本再优化:Knative 支持抢占式实例
Knative 是一款云原生、跨平台的开源 Serverless 应用编排框架,而抢占式实例是公有云中性价比较高的资源。Knative 与抢占式实例的结合可以进一步降低用户资源使用成本。本文介绍如何在 Knative 中使用抢占式实例。
92505 2
|
2月前
|
负载均衡 应用服务中间件 Linux
深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」
深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」
36 0
|
2月前
|
消息中间件 弹性计算 Kubernetes
Knative 架构解析
【2月更文挑战第29天】Knative作为构建无服务器产品的基础设施,建立在Kubernetes和Istio之上,提供从源代码到服务的编排、流量管理、自动扩缩容和事件绑定等功能,分为Build、Eventing和Serving三个模块,旨在确保编程模型的可移植性。
|
2月前
|
存储 机器学习/深度学习 并行计算
阿里云服务器X86计算、Arm计算、GPU/FPGA/ASIC、高性能计算架构区别
在我们选购阿里云服务器的时候,云服务器架构有X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、高性能计算可选,有的用户并不清楚他们之间有何区别,本文主要简单介绍下不同类型的云服务器有何不同,主要特点及适用场景有哪些。
阿里云服务器X86计算、Arm计算、GPU/FPGA/ASIC、高性能计算架构区别
|
2月前
|
监控 JavaScript 安全
监控内网电脑软件设计与实现:基于Node.js的服务器端架构分析
在当今信息技术高度发达的时代,监控内网电脑的需求日益增长。企业需要确保网络安全,个人用户也需要监控家庭网络以保护隐私和安全。本文将介绍一种基于Node.js的服务器端架构,用于设计和实现监控内网电脑软件。
118 0
|
3月前
|
存储 监控 虚拟化
DP读书:鲲鹏处理器 架构与编程(五)服务器虚拟化技术
DP读书:鲲鹏处理器 架构与编程(五)服务器虚拟化技术
44 0
|
3月前
|
存储 缓存 物联网
DP读书:鲲鹏处理器 架构与编程(二)服务器与处理器——高性能处理器的并行组织结构、ARM处理器
DP读书:鲲鹏处理器 架构与编程(二)服务器与处理器——高性能处理器的并行组织结构、ARM处理器
252 0
|
3月前
|
人工智能 Oracle 关系型数据库
DP读书:鲲鹏处理器 架构与编程(一)处理器与服务器
DP读书:鲲鹏处理器 架构与编程(一)处理器与服务器
41 1
|
4月前
|
机器学习/深度学习 弹性计算 Serverless
引领未来科技发展的无服务器架构(Serverless)
无服务器架构(Serverless)是一种革命性的云计算模式,它将开发者从传统服务器管理的繁琐中解放出来,提供了更高效、灵活和可扩展的应用开发和部署方式。本文将介绍无服务器架构的概念、原理及其在各个领域的应用,并展望其对未来科技发展的巨大影响。