当前位置: 首页 > wzjs >正文

营销网站建站开发桌面百度

营销网站建站开发,桌面百度,温州建校特种作业人员查询,dw网站开发环境ServingHelloWorld Serverless 一个核心思想就是按需分配,那么 Knative 是如何实现按需分配的呢?另外在前面已经了解到 Knative Serving 在没有流量的时候是可以把Pod 缩容到零的。接下来就通过一些例子体验一下 Knative 缩容到零和按需自动扩缩容的能力…

ServingHelloWorld

Serverless 一个核心思想就是按需分配,那么 Knative 是如何实现按需分配的呢?另外在前面已经了解到 Knative Serving 在没有流量的时候是可以把Pod 缩容到零的。接下来就通过一些例子体验一下 Knative 缩容到零和按需自动扩缩容的能力。

部署 helloworld-go

Knative 官方给出了好几种语言的 Helloworld 示例,这些不同的语言其实只是编译镜像的 Dockerfile 有所不同,做好镜像之后的使用方式没什么差异。本例以 go 的 Hello World 为例进行演示。为了验证方便,阿里云官方已经提前编译好了一份镜像 registry.cn-hangzhou.aliyuncs.com/knative-sample/simple-app:07 , 可以直接使用。

我的学习路径遵照阿里云云原生《Knative 云原生应用开发指南》进行学习,所有资源均由阿里云提供。

首先编写一个 Knative Service 的 yaml 文件 helloworld-go.yaml , 内容如下:

[root@master Knative]# vi helloword-go.yaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:name: helloworld-go
spec:template:metadata:labels:app: helloworld-goannotations:autoscaling.knative.dev/target: "10"spec:containers:- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8ports:- name: http1containerPort: 8080env:- name: TARGETvalue: "World"

字段讲解:

apiVersion: serving.knative.dev/v1
指定使用的 Knative Serving API 版本,v1 是稳定版本。
kind: Service
定义资源类型为 Knative Service,Knative 会自动管理此服务的路由、修订版本(Revisions)和自动扩缩。
name: helloworld-go
定义 Knative Service 的名称,在 Kubernetes 集群中唯一标识该服务。通过 kubectl get ksvc 可查看此服务。
template
定义服务的修订版本模板(Revision Template)。每次更新配置时,Knative 会生成新的 Revision(版本),用于灰度发布或回滚。
spec.template.metadata 修订版本元数据
labels
标签(如 app: helloworld-go)用于标识此 Revision,常用于路由或监控筛选。
annotations
注解用于配置 Knative 的扩展行为:
autoscaling.knative.dev/target: "10"
设置自动扩缩的目标并发数。每个 Pod 最多处理10个并发请求,超过时触发扩容。这是 Knative 的核心特性之一。spec.template.spec 容器规格
containers
定义服务运行的容器:
image
容器镜像地址,这里是阿里云镜像仓库中的示例镜像 registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8。
ports
容器暴露的端口:
name: http1和containerPort: 8080
Knative 默认通过端口 8080 接收 HTTP 流量,必须与此处配置一致。
env
容器环境变量:
name: TARGET和value: "World"
应用程序通过 TARGET 环境变量获取值,返回 Hello {TARGET},这里会返回 Hello World。

注意其中 autoscaling.knative.dev/target:“10”这个 Annotation 是设置每一个 Pod 的可处理并发请求数 10 ,Knative KPA 自动伸缩的时候会根据当前总请求的并发数和 autoscaling.knative.dev/target 自动调整 Pod 的数量,从而达到自动扩缩的目的。

部署Pod:

[root@master Knative]# kubectl apply -f helloword-go.yaml 
service.serving.knative.dev/helloworld-go created
[root@master Knative]# kubectl get pods 
NAME                                             READY   STATUS    RESTARTS   AGE
helloworld-go-00001-deployment-5479b447b-5vzrl   2/2     Running   0          74s

helloworld已经正常启动,下面进行访问。

访问helloworld

在访问 helloworld-go 之前先来介绍一下在 Knative 模型中流量是怎么进来的。Knative Service 和 Kubernetes 原生的 Deployment 不一样,Knative 不会创建 Loadbalance 的 Service,也不能创建 NodePort 类型的 Service,所以不能通过 SLB 或者 NodePort 访问。只能通过 ClusterIP 访问。而 ClusterIP 是不能直接对外暴露的,所以必须经过 Gateway 才能把用户的流量接入进来。

本例就是使用 Istio 的 Gateway 承接 Knative 的南北流量 ( 进和出 )。如下图所示是 Knative模型中流量的转发路径。用户发起的请求首先会打到 Gateway 上面,然后 Istio 通过 VirtualService 再把请求转发到具体的 Revision 上面。

在这里插入图片描述

所以想要访问 Knative 的服务首先要获取 Gateway 的 IP 地址,可以通过如下方式获取 Gateway 的 IP:

[root@master Knative]# kubectl get svc istio-ingressgateway -n istio-system
NAME                   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                      AGE
istio-ingressgateway   NodePort   10.106.147.32   <none>        15021:30249/TCP,80:32727/TCP,443:30590/TCP,31400:30239/TCP,15443:31723/TCP   72m

前面也介绍了 Gateway 是通过 VirtualService 来进行流量转发的,这就要求访问者要知道目标服务的名字才行 ( 域名 ),所以要先获取 helloworld-go 的域名 , 注意下面这条命令中的 ${SVC_NAME} 需要替换成 helloworld-go ,这个名字必须要和 Knative Service 的名字一致,因为每一个 Service 都有一个唯一的名字。

[root@master Knative]# kubectl get route helloworld-go -o jsonpath='{.status.url}'
http://helloworld-go.default.example.com
[root@master Knative]# kubectl get route helloworld-go -o jsonpath='{.status.url}' | awk -F/ '{print $3}'
helloworld-go.default.example.com
#两个命令的区别在于是否是纯URL方式显示

至此已经拿到 IP 地址和 Hostname,可以通过 curl 直接发起请求:

[root@master Knative]# curl  -H "Host:helloworld-go.default.example.com" "http://10.106.147.32"
Hello World!

访问成功。

缩容到零

刚刚部署完 Service 的时候 Knative 默认会创建出一个 Pod 提供服务,如果你超过 90 秒没有访问 helloworld-go 这个服务那么这个 Pod 就会自动删除,此时就是缩容到零了。现在看一下 Pod 情况 , 你可能会发现没有 Pod。

[root@master Knative]# kubectl get pods 
No resources found in default namespace.

当我们再次访问:

[root@master Knative]# time curl  -H "Host:helloworld-go.default.example.com" "http://10.108.241.97"
Hello World!real    0m2.728s
user    0m0.004s
sys     0m0.006s

“real 0m2.728s”意思意思是 curl 请求执行一共消耗了 2.728s,也就是说Knative 从零到 1 扩容 + 启动容器再到服务响应请求总共消耗了 2.728s。可以看出来这个速度还是很快的。再看一下 pod 数量,你会发现此时 Pod 自动扩容出来了。并且 Pod 数量为零时发起的请求并没有拒绝链接。

[root@master Knative]# kubectl get pods -o wide 
NAME                                              READY   STATUS    RESTARTS   AGE   IP               NODE    NOMINATED NODE   READINESS GATES
helloworld-go-00001-deployment-67857f6664-wf6hm   2/2     Running   0          4s    10.244.166.152   node1   <none>           <none>

按需分配,自动扩缩

接下来再测试一下 Knative 按需扩容的功能。使用社区提供的 hey 进行测试。hey 有 Windows、Linux 和 Mac 的二进制可以在这里下载。安装hey:

[root@master ~]# wget https://hey-release.s3.us-east-2.amazonaws.com/hey_linux_amd64
[root@master ~]# chmod +x hey_linux_amd64 
[root@master ~]# mv hey_linux_amd64 /usr/local/bin/
[root@master ~]# mv /usr/local/bin/hey_linux_amd64 /usr/local/bin/hey

使用这个命令测试之前需要在本机进行 Host 绑定,对于 helloworld-go 来说要把 helloworld-go 的域名绑定到 Istio Gateway 的 IP 上,/etc/hosts 添加如下配置:

[root@master ~]# vi /etc/hosts 
10.108.241.97 helloworld-go.default.example.com

进行测试:

hey -z 30s -c :

● -z 30s 持续测试 30s

● -c 50 保持每秒 50 个请求

[root@master ~]# hey -z 30s -c 50 "http://helloworld-go.default.example.com/" && kubectl get pods Summary:Total:        30.0115 secsSlowest:      2.1634 secsFastest:      0.0025 secsAverage:      0.0197 secsRequests/sec: 2539.9240Total data:   990951 bytesSize/request: 13 bytesResponse time histogram:0.003 [1]     |0.219 [76176] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■0.435 [0]     |0.651 [0]     |0.867 [0]     |1.083 [0]     |1.299 [0]     |1.515 [0]     |1.731 [0]     |1.947 [0]     |2.163 [50]    |Latency distribution:10% in 0.0089 secs25% in 0.0114 secs50% in 0.0154 secs75% in 0.0212 secs90% in 0.0324 secs95% in 0.0421 secs99% in 0.0582 secsDetails (average, fastest, slowest):DNS+dialup:   0.0000 secs, 0.0025 secs, 2.1634 secsDNS-lookup:   0.0000 secs, 0.0000 secs, 0.0033 secsreq write:    0.0000 secs, 0.0000 secs, 0.0225 secsresp wait:    0.0195 secs, 0.0023 secs, 2.1546 secsresp read:    0.0001 secs, 0.0000 secs, 0.0153 secsStatus code distribution:[200] 76227 responsesNAME                                              READY   STATUS    RESTARTS   AGE
helloworld-go-00001-deployment-67857f6664-2trps   2/2     Running   0          37s
helloworld-go-00001-deployment-67857f6664-p4znc   2/2     Running   0          40s
helloworld-go-00001-deployment-67857f6664-s7spf   2/2     Running   0          37s
helloworld-go-00001-deployment-67857f6664-sv8hc   2/2     Running   0          37s
helloworld-go-00001-deployment-67857f6664-zqhgn   2/2     Running   0          37s

回想一下刚才 helloworld-go.yaml 文 件 配 置, 已 经 设 置 了 autoscaling.knative.dev/target:“10”这个 Annotation。这表示每一个 Pod 能够接受并发 10个请求,而刚才并发请求数设置的是 50 所以理论上应该会创建出来 5 个 Pod!!

所以,我们的配置文件是生效且正常运行的哦。
在这里插入图片描述

可以看到此时 Knative 自动扩容出来了 5 个 Pod 处理请求。
置, 已 经 设 置 了 autoscaling.knative.dev/target:“10”这个 Annotation。这表示每一个 Pod 能够接受并发 10个请求,而刚才并发请求数设置的是 50 所以理论上应该会创建出来 5 个 Pod!!

http://www.dtcms.com/wzjs/133835.html

相关文章:

  • 专业网站建设网站价格流量网站
  • 做网站的学什么代码2022最近比较火的热点话题
  • 企业网站建设会计分录seo美式
  • 美妆网站模版个人网络销售平台
  • 360网站做二维码chrome官网
  • 慈利县建设局网站上海企业seo
  • 桥梁建设网站在哪里可以投稿抖音seo代理
  • 网站的栏目是什么a5站长网网站交易
  • 英文外贸网站建设网站设计方案淘宝代运营1个月多少钱
  • 网站怎么做分类聚合网站到首页排名
  • 做网站哪里最便宜客户关系管理系统
  • 网络营销评价的名词解释广州新塘网站seo优化
  • 云南大学网站建设最经典最常用的网站推广方式
  • 网站建设流程教程企拓客软件多少钱
  • html代码爱心常州seo建站
  • 如何新建一个网站网上怎么推广产品
  • 县政府网站建设实施方案教育培训平台
  • 注册公司要钱吗青岛自动seo
  • 网站建设维护日记湖南优化公司
  • 网站怎么做seo优化标题关键词优化技巧
  • 凯发网站怎么做推广网站
  • 高职思政主题网站建设作用营销型网站建设多少钱
  • 那些市区做网站群seo点击软件哪个好用
  • 手机营销网站模板网络运营和网络营销的区别
  • 网站建设方面的文章找个免费网站这么难吗
  • 专门做win7系统的网站百度推广怎么做的
  • 原创网站设计费用如何做网站设计
  • 织梦网站模板如何安装seo培训班 有用吗
  • 北京如何做网站天津seo外包平台
  • 做自己的直播网站网站模板下载