哪家网站建设做的好网页游戏开发需要学什么
news/
2025/9/23 0:51:56/
文章来源:
哪家网站建设做的好,网页游戏开发需要学什么,安徽建设厅网站网址,在线看网站源码Horizontal Pod Autoscaling in Kubernetes写在前面我们平时部署web服务#xff0c;当服务压力大撑不住的时候#xff0c;我们会加机器(加钱)#xff1b;一般没有上容器编排是手动加的#xff0c;临时加的机器#xff0c;临时部署的服务还要改Nginx的配置#xff0c;最后…Horizontal Pod Autoscaling in Kubernetes写在前面我们平时部署web服务当服务压力大撑不住的时候我们会加机器(加钱)一般没有上容器编排是手动加的临时加的机器临时部署的服务还要改Nginx的配置最后回收机器的时候也是手动回收手动修改Nginx的挺麻烦的其实而K8s是支持这整个流程的自动化的也就是HPA;HPA介绍HPA全称Horizontal Pod Autoscaler 对应中文叫Pod的自动水平伸缩Pod的水平伸缩是水平方向增加/减少Pod的数量Pod的垂直伸缩则是垂直方向上控制Pod的硬件比如增加/缩减CPU、内存等资源k8s的HPA一般会根据一个具体的指标来做比如常见CPU、内存的负载也可以根据web服务的吞吐量、单位时间内的传输字节数等另外还可以根据自定义的指标比如RabbitMQ的队列数量、Webhook等我这里先讲讲怎么根据CPU、内存的负载来做HPA;HPA实操环境$ kubectl versionClient Version: version.Info{Major:1, Minor:22, GitVersion:v1.22.5Server Version: version.Info{Major:1, Minor:22, GitVersion:v1.22.5$ kubectl get nodeNAME STATUS ROLES AGE VERSION
docker-desktop Ready control-plane,master 177d v1.22.5检查获取指标是否正常是否安装了metrics-serverHPA是需要获取具体的指标做伸缩的, metrics-server是提供指标的$ kubectl get pod -n kube-system|grep metrics-server
metrics-server-5d78c4b4f5-x5c46 1/1 Running 2 (3d12h ago) 10d是否正常获取指标$ kubectl top node
docker-desktop 133m 0% 2671Mi 16%如果没有的需先安装metrics-server安装metrics-server下载yamlwget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml修改yamlspec:containers:- args:- --cert-dir/tmp- --secure-port4443- --kubelet-preferred-address-typesInternalIP,ExternalIP,Hostname- --kubelet-use-node-status-port- --metric-resolution15s- --kubelet-insecure-tls #加上这个不推荐生产这样用#image: k8s.gcr.io/metrics-server/metrics-server:v0.6.1 #这个镜像需要梯子image: registry.cn-hangzhou.aliyuncs.com/chenby/metrics-server:v0.6.1 #换成网友阿里云的镜像imagePullPolicy: IfNotPresent提交yamlkubectl apply -f components.yaml -n kube-system再验证kubectl get pod -n kube-system|grep metrics-serverkubectl top node部署一个测试的Pod(Webapi)创建一个hpa-api.yaml的文件内容如下apiVersion: apps/v1
kind: Deployment
metadata:name: hpa-api
spec:selector:matchLabels:app: hpa-apireplicas: 1template:metadata:labels:app: hpa-apispec:containers:- name: hpa-apiimage: gebiwangshushu/hei-ocelot-api:1.0 #这是我写其他文章上传的镜像代码https://github.com/gebiWangshushu/Hei.Ocelot.ApiGateway/blob/master/Hei.Api/Controllers/WeatherForecastController.csports:- containerPort: 80resources:requests:cpu: 1000mmemory: 100Mi# limits:# cpu: 100m# memory: 100Mi
---
apiVersion: v1
kind: Service
metadata:name: hpa-apilabels:app: hpa-api
spec:ports:- port: 80nodePort: 30999type: NodePortselector:app: hpa-apikubectl apply -f hpa-api.yaml这里创建了一个测试的webapi所用镜像是gebiwangshushu/hei-ocelot-api:1.0源码在这这个Deployment的副本数是1资源requests为cpu: 1000m memory: 100Mi并且创建了一个nodePort:30999 类型的Service访问看看image-20221008112122162172.16.6.90 是我自己k8s集群的地址测试的webapi部署好了我们来给他创建一个HPA(HorizontalPodAutoscaler);创建HPA--HorizontalPodAutoscaler查看当前HPA支持版本$ kubectl api-versions|grep autoscaling
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2autoscaling/v1: 只支持基于CPU的自动伸缩autoscaling/v2beta1 支持Resource Metrics资源指标如pod的CPU和Custom Metrics自定义指标的缩放。autoscaling/v2beta2支持Resource Metrics资源指标如pod的CPU和Custom Metrics自定义指标和ExternalMetrics额外指标的缩放。创建一个HPA.yaml的文件内容如下apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:name: hpa-api
spec:scaleTargetRef:apiVersion: apps/v1kind: Deployment #针对Deployment做伸缩name: hpa-api minReplicas: 1 #最小副本数maxReplicas: 10 #最大副本数metrics: - type: Resource resource:name: cpu target:type: Utilization #Utilization 使用率做指标averageUtilization: 50 #CPU平均使用率超requests要求的cpu的50%时开始做扩容#type: averageValue #averageValue: 30 #使用平均值averageValue平均值 做指标type: Utilization #Utilization 表示用使用率作为指标此外还有Value 或 AverageValueaverageUtilization: 50 表示CPU平均使用率超requests要求的cpu的50%时开始做扩容apiVersion: autoscaling/v2beta2 autoscaling的版本不同版本的字段和支持的指标不一样;当然这里的apiVersion: autoscaling/v2beta2 支持还支持很多参数例如metrics: - type: Resource resource:name: cpu target:type: UtilizationaverageUtilization: 60 #CPU平均负载超requests60%时开始做扩容# - type: Resource# resource:# name: cpu # target:# type: AverageValue # averageValue: 500m # - type: Pods #Pods类型的指标# pods:# metric:# name: packets-per-second# target:# type: AverageValue# averageValue: 1k# - type: Object# object:# metric:# name: requests-per-second# describedObject:# apiVersion: networking.k8s.io/v1# kind: Ingress# name: main-route# target:# type: Value# value: 10k# behavior: #控制伸缩行为速率的# scaleDown: # policies: #支持多个策略# - type: Pods # value: 4 # periodSeconds: 60 #60秒内#最多缩容4个pod# - type: Percent# value: 300 # periodSeconds: 60 #60秒内#最多缩容300%# selectPolicy: Min# stabilizationWindowSeconds: 300 # scaleUp: # policies: # - type: Pods# value: 5 # periodSeconds: 60 #60秒内#最多缩容5个pod# # - type: Percent# # value: 100 #最多扩容100%# # periodSeconds: 60 #60秒内# selectPolicy: Max# stabilizationWindowSeconds: 0metrics中的type字段有四种类型的值Object、Pods、Resource、External。Resource指的是当前伸缩对象下的pod的cpu和memory指标只支持Utilization和AverageValue类型的目标值。Object指的是指定k8s内部对象的指标数据需要第三方adapter提供只支持Value和AverageValue类型的目标值。Pods指的是伸缩对象statefulSet、replicaController、replicaSet底下的Pods的指标数据需要第三方的adapter提供并且只允许AverageValue类型的目标值。External指的是k8s外部的指标(比如prometheus)数据同样需要第三方的adapter提供只支持Value和AverageValue类型的目标值。另外还有自定义指标等需要1.23及以上版本才支持了创建HPA资源kubectl apply -f HPA.yaml查看HPA$ kubectl get hpaNAMESPACE NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
aspnetcore hpa-api Deployment/hpa-api 0%/50% 1 10 1 8d验证hpa开启watch监控模式$ kubectl get hpa --watch
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa-api Deployment/hpa-api 0%/50% 1 10 1 8d
...
#阻塞监听状态用ab压测工具压一下ab -n 200000 -c 10 http://172.16.6.90:30999/user没安装的自己搜索安装下这里的 -n请求个数-c : 请求并发数查看资源使用情况$ kubectl top po
NAME CPU(cores) MEMORY(bytes)
hpa-api-88ddc5c49-2vgjd 1m 301Mi
hpa-api-88ddc5c49-4h5pz 1m 300Mi
hpa-api-88ddc5c49-8c8d2 1m 340Mi
hpa-api-88ddc5c49-8hmnm 1m 300Mi
hpa-api-88ddc5c49-cgxm9 1m 23Mi
hpa-api-88ddc5c49-tdrc6 1m 23Mi扩容情况kubectl get hpa --watch
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa-api Deployment/hpa-api 0%/50% 1 10 1 8d
hpa-api Deployment/hpa-api 262%/50% 1 10 1 8d
hpa-api Deployment/hpa-api 33%/50% 1 10 4 8d
hpa-api Deployment/hpa-api 0%/50% 1 10 6 8d #这里请求结束了伸容过程$ kubectl describe hpa hpa-apiName: hpa-api
...
Reference: Deployment/hpa-api
Metrics: ( current / target )resource cpu on pods (as a percentage of request): 262% (2628m) / 50% #这里资源直接远超1000m的50%,达到了262% (2628m)
Deployment pods: 1 current / 4 desired
..
Deployment pods: 1 current / 4 desired
Conditions:Type Status Reason Message---- ------ ------ -------AbleToScale True SucceededRescale the HPA controller was able to update the target scale to 4ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request)ScalingLimited True ScaleUpLimit the desired replica count is increasing faster than the maximum scale rateEvents:Type Reason Age From Message---- ------ ---- ---- -------Normal SuccessfulRescale 39s horizontal-pod-autoscaler New size: 4; reason: cpu resource utilization (percentage of request) above target #扩容到4个Normal SuccessfulRescale 3m11s horizontal-pod-autoscaler New size: 6; reason: All metrics below target #扩容到6个一旦 CPU 利用率降至 0HPA 会自动将副本数缩减为 1;扩容详情HPA 控制器基于 Master 的 kube-controller-manager 服务启动参数 --horizontal-pod-autoscaler-sync-period 定义的探测周期默认值为 15s 周期性地监测目标 Pod 的资源性能指标 并与 HPA 资源对象中的扩缩容条件进行对比 在满足条件时对 Pod 副本数量进行调整。在每个时间段内控制器管理器都会根据每个 HorizontalPodAutoscaler 定义中指定的指标查询资源利用率。控制器管理器找到由 scaleTargetRef 定义的目标资源然后根据目标资源的 .spec.selector 标签选择 Pod 并从资源指标 API针对每个 Pod 的资源指标或自定义指标获取指标 API适用于所有其他指标。对于按 Pod 统计的资源指标如 CPU控制器从资源指标 API 中获取每一个 HorizontalPodAutoscaler 指定的 Pod 的度量值如果设置了目标使用率 控制器获取每个 Pod 中的容器资源使用 情况 并计算资源使用率。如果设置了 target 值将直接使用原始数据不再计算百分比。接下来控制器根据平均的资源使用率或原始值计算出扩缩的比例进而计算出目标副本数。需要注意的是如果 Pod 某些容器不支持资源采集那么控制器将不会使用该 Pod 的 CPU 使用率。如果 Pod 使用自定义指示控制器机制与资源指标类似区别在于自定义指标只使用 原始值而不是使用率。如果 Pod 使用对象指标和外部指标每个指标描述一个对象信息。这个指标将直接根据目标设定值相比较并生成一个上面提到的扩缩比例。在 autoscaling/v2beta2 版本 API 中这个指标也可以根据 Pod 数量平分后再计算。HorizontalPodAutoscaler 的常见用途是将其配置为从metrics.k8s.io、custom.metrics.k8s.io 或 external.metrics.k8s.io获取指标。metrics.k8s.io API 就是我们前面安装Metrics Server 的插件扩容算法期望副本数 ceil[当前副本数 * (当前指标 / 期望指标)]例如如果当前指标值为 200m而期望值为 100m则副本数将加倍 因为 200.0 / 100.0 2.0 如果当前值为 50m则副本数将减半 因为 50.0 / 100.0 0.5。如果比率足够接近 1.0在全局可配置的容差范围内默认为 0.1 则控制平面会跳过扩缩操作。套入上面的实例期望副本数 ceil[ 1 * (262% / 50%)] 6类似本实例的示意图img可以看到这里的指标是针对所有pod的总结k8s的东西太多只学了点皮毛有个基本的概念就赶紧记下来k8s集群版本、HPA的版本的不同又有很多限制与字段的区别需要后面更多的实践与学习[参考]https://kubernetes.io/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale/#algorithm-detailshttps://blog.51cto.com/smbands/4903843https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/horizontal-pod-autoscaler-v2beta2/https://www.cnblogs.com/fanggege/p/12299923.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/910923.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!