首页 > 其他分享 >OpenShift Knative Serving 配置服务(1)

OpenShift Knative Serving 配置服务(1)

时间:2024-01-02 15:33:33浏览次数:40  
标签:Serving service 修订 流量 scale traffic Knative 版本 OpenShift

自动缩放

Knative提供了基于 Kubernetes 的自动缩放功能,根据指标(如CPU利用率、内存使用量等)自动调整Pod的副本数,以实现弹性和高可用性。 Knative的Knative Serving的组件,用于管理应用程序的生命周期,在Knative Serving中,可以配置自动缩放规则,以指定应用程序的缩放行为。通过配置自动缩放规则,可以定义应用程序的最小副本数、最大副本数以及触发缩放的指标阈值。当应用程序的负载超过或低于指定的阈值时,Knative会自动调整应用程序的副本数,以适应当前的负载情况。

您可以使用集群控制台修改服务的每个修订设置,或者使用 kn CLI 修改服务。

扩展范围

缩放范围决定了可在任意给定时间为应用程序服务的最小和最大副本数。最小扩展范围表示为应用程序提供服务的最小副本数量由 min-scale 注解决定。最大范围由max-scale表示。如果不设置min-scale 注解,扩展到0,使用类KPA则都会使min-scale的值默认设置为0。

带有 min-scale 注解的 service 示例

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  annotations:
    serving.knative.dev/creator: kubeadmin
    serving.knative.dev/lastModifier: kubeadmin
  ...
  name: my-serverless-app-1
  namespace: syx
  ...
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/min-scale: '1'


使用kn CLI 设置 min-scale /max-scale注解

$ kn service create <service_name> --image <image_uri> --scale-min <integer>

您可以使用带 --scale-min 标志的 kn service 命令为服务创建或修改 min-scale 值或者--scale-max 修改max-scale注解。

示例命令

$ kn service create example-service --image docker.io/sunyuxuan/serverless-test:latest --scale-min 1

OpenShift Knative Serving 配置服务(1)_自动缩放

可看到上述服务的pod扩展为两个

流量管理

在 Knative 应用程序中,可以通过创建流量分割来管理流量。应用程序流量分割是一种将入站流量分配到不同的版本或实例的过程,以便测试新版本或逐步将流量转移到新版本。Knative的流量分割功能可以帮助开发人员轻松地将流量分配到不同的版本或实例,以便进行测试、回归测试或逐步发布新版本。

配置路由允许将请求发送到服务的不同修订版本。此路由由Service 对象的 traffic spec 决定。

traffic 规格声明由一个或多个修订版本组成,每个修订版本负责处理整个流量的一部分。路由到每个修订版本的流量百分比必须添加到 100%,由 Knative 验证确保。

traffic 规格示例

以下示例显示了一个 traffic 规格,其中 100% 的流量路由到该服务的最新修订版本。在 status 下,您可以看到 latestRevision 解析为的最新修订版本的名称:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: example-service
  namespace: default
spec:
...
  traffic:
  - latestRevision: true
    percent: 100
status:
  ...
  traffic:
  - percent: 100
    revisionName: example-service

以下示例中 100% 的流量路由到当前标记为 current 修订版本,并且该修订版本的名称指定为 example-service。标记为 latest 的修订版本会保持可用,即使没有流量路由到它:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: example-service
  namespace: default
spec:
...
  traffic:
  - tag: current
    revisionName: example-service
    percent: 100
  - tag: latest
    latestRevision: true
    percent: 0

以下示例演示了如何扩展 traffic 规格中的修订版本列表,以便在多个修订版本间分割流量。这个示例将 50% 的流量发送到标记为 current 修订版本,50% 的流量发送到标记为 candidate 的修订版本。标记为 latest 的修订版本会保持可用,即使没有流量路由到它:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: example-service
  namespace: default
spec:
...
  traffic:
  - tag: current
    revisionName: example-service-1
    percent: 50
  - tag: candidate
    revisionName: example-service-2
    percent: 50
  - tag: latest
    latestRevision: true
    percent: 0
使用Knative CLI创建流量分割

使用带有kn service update 命令的 --traffic 标签指定服务修订版本以及您要路由到它的流量百分比

示例命令

$ kn service update <service_name> --traffic <revision>=<percentage>

其中:

<service_name> 是您要为其配置流量路由的

<revision> 是您要配置为接收流量百分比的修订版本。您可以使用 --tag 标志指定修订版本的名称,或指定分配给修订版本的标签。

<percentage> 是您要发送到指定修订版本的流量百分比。

--traffic 标志可在一个命令中多次指定。

$ kn service update example-service --traffic @latest=20,stable=80

上边示例命令表示为latest修订版本分配20%流量,为stable分配80%流量

如果您有多个修订版本,且没有指定应分割到最后一个修订版本的流量百分比,--traffic 标志可以自动计算此设置。例如,如果您有一个第三个版本名为 example,则使用以下命令:

$ kn service update example-service --traffic @latest=10,stable=60

剩余的30%流量则会分配给example。

使用控制台控制流量分割

OpenShift Knative Serving 配置服务(1)_无服务器_02

观察上图的服务,我们可以看到有三个修订版本my-serverless-app-1-00003 、my-serverless-app-1-00002 、my-serverless-app-1-00001 点击设置流量分配按钮

在分割页面中为三个修订分别设置流量比

添加标签test1、test2、test3来区分后面生成的自定义URL

OpenShift Knative Serving 配置服务(1)_自动缩放_03

点击保存后等待更新完成

OpenShift Knative Serving 配置服务(1)_无服务器_04

上图便是更新完成后流量分割的示意图,且每个修订版本的URL根据标签已经修改


参考《https://access.redhat.com/documentation/zh-cn/red_hat_openshift_serverless/1.31

标签:Serving,service,修订,流量,scale,traffic,Knative,版本,OpenShift
From: https://blog.51cto.com/u_15249701/9070291

相关文章

  • Knative Eventing Parallel Flow 示例
    环境说明◼PingSource负责生成event◼Parallel中有两个Branch◆第一个分支接受时间为偶数的事件◆第二个分支接受时间为奇数的事件◼所有分支的最终结果均发往ksvc/event-display,内容格式化CloudEvent存储入日志创建名称空间#kubectlcreatensparallel-demo......
  • Knative Eventing Sequence Flow 示例
    环境说明◼PingSource负责生成event◼Event由Sequence中的各Step顺次处理◆各Step都运行一个appender应用◆分别向收到的数据尾部附加自定义的专有数据项◼最终结果发往ksvc/event-display环境示意图创建名称空间#kubectlcreatenssequence-demonamespace/seq......
  • Knative event Brokers and Triggers 事件传递模式实例
    BrokersandTriggers实例说明eventsource:gitlabsource基于MT通道的broker:defaulttriggertrigger-push->sinkevent-display-push过滤条件:dev.knative.sources.gitlab.pushtriggertrigger-tag-push->sinkevent-display-tag_push过滤条件:dev.knative.......
  • Knative Event gitlab source
    服务说明本地gitlab信息ip地址:192.168.174.108httpport:8080域名:codo.wgs.comkservice-event-display信息istio-ingressgateway对外地址:192.168.174.249kservice-event-display对外域名:gitlabsource.wgs.com域名解析:gitlabsource.wgs.com-->192.168.174.249......
  • Knative 基础
    Knative项目简介读音为“kay-nay-tiv”,由Google于2018年7月正式发布Kubernetes平台的原生扩展组件,让其能够轻松地部署、运行和管理Serverless类型的云原生应用由RedHat、Google和IBM等公司,以及各种初创公司组成的开源社区共同维护目标在于Serverless技术标准化Knative是什么基......
  • kuberntes ingress 和 openshift router 异同
    目标:探讨KuberntesIngress和OpenshiftRouter异同前提:对Kubernetes及Openshift有了解背景:KubernetesIngress及OpenshiftRoute都可以以路由的方式暴露服务(Service),便于外界访问集群内部资源,同时也提供负载均衡。KubernetesIngress简述:KubernetesIngress是一种Ku......
  • Go - Serving Through HTTPS
    Problem: YouwanttoserveyourwebapplicationthroughHTTPS.Solution: Usethehttp.ListenAndServeTLSfunctiontoserveyourwebapplicationthroughHTTPS. HTTPSisnothingmorethanlayeringHTTPontopoftheTransportSecurityLayer(TLS).Thenet......
  • Go - Serving Static Files
    Problem: Youwanttoservestaticfilessuchasimages,CSS,andJavaScriptfiles.Solution: Usethehttp.FileServerfunctiontoservestaticfiles. funcmain(){dir:=http.Dir("./static")fs:=http.FileS......
  • knative serving 流量管理
    创建客户端#kubectlrunclient--image=ikubernetes/admin-box-it--rm--restart=Never--command-nknative-demo--/bin/bashroot@client/#创建应用hello-world-v1.yamlapiVersion:serving.knative.dev/v1kind:Servicemetadata:name:helloworld-gonames......
  • Serverless平台knative第十章如何应用pod频繁抖动
    负载变动频繁时,Knative可能会因为响应负载变动而导致频繁创建或销毁Pod实例为避免服务规模“抖动”,AutoScaler支持两种扩缩容模式Stable稳定模式在稳定模式中,KPA会在默认的稳定窗口期(默认为60秒)内计算Pod的平均并发数。根据这个平均并发数,KPA会调整Pod的数量,以保持稳定的负载水......