" />

Kubernetes高级进阶之pod的自动扩容/缩容

2024/5/8 2:46:56

目录:
实践1:基于autoscaling cpu指标的扩容与缩容
实践2:基于prometheus自定义指标QPS的扩容与缩容

                           Pod自动扩容/缩容(HPA)
Horizontal Pod Autoscaler(HPA,Pod水平自动伸缩),根据资源利用率或者自定义指标自动调整replication controller, deployment 或 replica set,实现部署的自动扩展和缩减,让部署的规模接近于实际服务的负载。HPA不适于无法缩放的对象,例如DaemonSet。
HPA主要是对pod资源的一个计算,对当前的副本数量增加或者减少。
HPA大概是这样的,我们需要创建一个hpa的规则,设置这样的一个规则对pod实现一个扩容或者缩容,主要针对deployment,当你当前设置的资源利用率超出你设置的预值,它会帮你扩容缩容这些副本。

Kubernetes高级进阶之pod的自动扩容/缩容
1、HPA基本原理
Kubernetes 中的 Metrics Server 持续采集所有 Pod 副本的指标数据。HPA 控制器通过 Metrics Server 的 API(Heapster 的 API 或聚合 API)获取这些数据,基于用户定义的扩缩容规则进行计算,得到目标 Pod 副本数量。当目标 Pod 副本数量与当前副本数量不同时,HPA 控制器就向 Pod 的副本控制器(Deployment、RC 或 ReplicaSet)发起 scale 操作,调整 Pod 的副本数量,完成扩缩容操作。如图所示。
Kubernetes高级进阶之pod的自动扩容/缩容
在弹性伸缩中,冷却周期是不能逃避的一个话题, 由于评估的度量标准是动态特性,副本的数量可能会不断波动。有时被称为颠簸, 所以在每次做出扩容缩容后,冷却时间是多少。

来看这张图,首先hpa要创建一个规则,就像我们之前创建ingress的规则一样,里面定义好一个扩容缩容的一个范围然后指定好对象,指定好它的预值,hpa本身就是一个控制器,循环的控制器,它会不断的从metrics server 中去获取这个指标,判断这个预值是不是到达你设置规则的预值,如果是的话,就会去执行这个scale帮你扩容这个副本,如果长期处于一个低使用率的情况下,它会帮你缩容这个副本,这个metrics server的资源来源是来自于cadvisor去拿的,想一下cadvisor可以提供那些指标,hpa可以拿到的,比如cpu,内存的使用率,主要采集你这些的利用率,所以hpa在早期已经支持了对CPU的弹性伸缩

Hpa就是k8s中这个pod水平扩容的一个控制器,但是要实现
Pod的扩容,他需要一定的条件,他要拿一定的指标,这里是有预值的,他要判断你的指标,是不是超出这个预值,对你进行缩容扩容,所以要想得到这个指标,你还需要装一个组件,metrics server,在之前呢这个组件的实现是由heapster heapstar现在已经是慢慢弃用了,基本上不怎么去使用heapstat了,所以metrics server来提供这些数据,提供这些资源的利用率。

比如有三个副本,来实现三个pod的伸缩,所以有东西去判定资源的利用率,比如基于cpu的,计算3个pod的资源利用率,例如3个pod的资源利用率是50%,拿到这个值之后,你就要去使用这个hpa,这个里面会定义个预值,有个规则,这个预值设置60%,它会周期性的与cpu去匹配,如果超出这个60%,那么就去扩容,这里还有定义扩容pod副本的数量
比如我这组pod的访问量是异常的,比如受到一些小我的cpu就超过50%,如果没有限制去最大扩容到多大的副本,它会无限的增大,之前3个副本可能一下就增加了10个副本,甚至50个,那么很快就能拖死整个集群,所以在hpa中都设置3个指标,第一个设置,pod的区间值,这个最大能扩容多少个pod,最小是多少个pod,比如1-10,最小可以创建1个,最大可以创建10个,这是一个缩容扩容的一个范围值,接下来就是一个预值的判断,第三个就是操作哪个对象,哪一组pod,这三个都是要在hpa中去判断的

那么在什么情况下,去缩容扩容
扩容就是资源不够了超过这个60%了,但是在这个区间它是由个状态转化的,一个是扩容的状态,一个是缩容的状态,这两个状态就好比现在的资源利用率60%了,进行扩容了,有3个副本就扩容到10个副本了,这是没问题的,然后马上这个值下来了,之前是到了70%-80%了,现在一下到了20%,从10直接缩容到5个,这两个是有状态转化的,所以hpa得基于保证说不可能状态转化的区间频率太高,如果太高就会出现好比时好时坏,间歇性的突发,并不是一直的突发,它会导致一会扩一会缩,最后导致这个应用不稳定,所以hpa就有一个冷却的机制,第一次扩容之后,第二次要想扩容必须经过这个冷却时间,那么默认是3分钟,缩容呢,第一次后,第二次缩容要等5分钟之后,这就是一个默认的一个值,来保障你当前业务的稳定性,是通过kube-controller-manager组件启动参数设置的

在 HPA 中,默认的扩容冷却周期是 3 分钟,缩容冷却周期是 5 分钟。
可以通过调整kube-controller-manager组件启动参数设置冷却时间:

•   --horizontal-pod-autoscaler-downscale-delay :扩容冷却
•   --horizontal-pod-autoscaler-upscale-delay :缩容冷却

2、HPA的演进历程
目前 HPA 已经支持了 autoscaling/v1、autoscaling/v2beta1和autoscaling/v2beta2 三个大版本 。
目前大多数人比较熟悉是autoscaling/v1,这个版本只支持CPU一个指标的弹性伸缩。
这个也比较简单,创建一个规则,使用采集的组件就能用了,

而autoscaling/v2beta1增加了支持自定义指标,除了cadvisor暴露的指标外,还支持自定义指标,比如像第三方提供的QPS,或者基于其他的一些资源进行扩容,就是支持一些第三方的一些组件了。
autoscaling/v2beta2又额外增加了外部指标支持。
而产生这些变化不得不提的是Kubernetes社区对监控与监控指标的认识认识与转变。从早期Heapster到Metrics Server再到将指标边界进行划分,一直在丰富监控生态。
所以有这些指标的变化,k8s对监控的认识进行了转变,因为弹性伸缩,在k8s中含金量还是比较高的,之前是没有太好的方案,所以在这一块也不是应用很多,然后再到社区对这一块进行完善,现在应用的也逐渐增多了。
实例
V1版本就是一个cpu的一个限制,其实早期也会内存也进行开放,后期只针对cpu进行了限制,因为只暴露cpu,是因为暴露内存并不是使用弹性伸缩的一个指标,因为像一个内存都会有一些应用去管理,比如java,内存都是有一个jvm去管理,所以使用内存扩容的一个指标,并不是很好,所以只暴露了cpu的指标,cpu还是比较准确的,pod,cpu利用率上来之后,负载高了,流量高了,所以这块参考价值比较大的,所以只使用cpu,在这里指定一个百分比就行。

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:name: php-apachenamespace: default
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: php-apacheminReplicas: 1maxReplicas: 10targetCPUUtilizationPercentage: 50:

v2beta2版本
就支持了很多的自定义的东西,比如resource,pods.object,external
可以根据cpu做一些pod暴露指标方面的工作,也可以针对第三方的一些指标,还有一些第三方的指标,像消息队列之类的,
V2支持的更多了

2.5 基于CPU指标缩放
1、 Kubernetes API Aggregation
在 Kubernetes 1.7 版本引入了聚合层,允许第三方应用程序通过将自己注册到kube-apiserver上,仍然通过 API Server 的 HTTP URL 对新的 API 进行访问和操作。为了实现这个机制,Kubernetes 在 kube-apiserver 服务中引入了一个 API 聚合层(API Aggregation Layer),用于将扩展 API 的访问请求转发到用户服务的功能。
Kubernetes高级进阶之pod的自动扩容/缩容
要使用v1版本基于cpu指标缩放,首先要开启API的聚合,在k8s1.7版本中去引入的,它引入是想让第三方的应用程序注册进来,都能注册到api中,去访问这个api时就能调用这个组件了,这张图,首先api的聚合时从API server去启用的,上面当作API server ,下面当作组件,APIserver它本身就是以后端聚合层后面的,只不过它都在这个里面实现了,实际上apiserver在聚合层后面,可以把聚合层当作一个代理层,就像nginx代理web一样,代理的话就可以代理多个了,就不局限于apiserver了,像metrics server,自己开发的一个组件也能注册进来,然后让他代理,它代理之后就可以访问api,从而访问到这个组件了,那么聚合层就像请求的url帮你转发到后面的组件上,后面的组件都会对应api,根据注册到聚合层的api转发,简而言之就是扩展api的功能,就是方便自己开发的组件,集成到这个api里面,就像调用api一样调用你的组件,其实这就是一个聚合层的目的,在k8s中如果使用kubeadm部署的,默认的聚合层已经是启用了,如果是二进制的部署方式去部署的,那么要按二进制的方式去启动聚合层,这个根据自己的环境去启动,因为每个人部署的二进制都不一样。
需要在kube-APIServer中添加启动参数,增加以下参数

vi /opt/kubernetes/cfg/kube-apiserver.conf
...
--requestheader-client-ca-file=/opt/kubernetes/ssl/ca.pem \
--proxy-client-cert-file=/opt/kubernetes/ssl/server.pem \
--proxy-client-key-file=/opt/kubernetes/ssl/server-key.pem \
--requestheader-allowed-names=kubernetes \
--requestheader-extra-headers-prefix=X-Remote-Extra- \
--requestheader-group-headers=X-Remote-Group \
--requestheader-username-headers=X-Remote-User \
--enable-aggregator-routing=true \
...

第一行指定的根证书,就是访问聚合层也要有一定的认证,不是谁的都能访问,本身也有一定的安全机制存在,也就是一个可信任的ca
第二,三行代理的是客户端的证书,大致的意思是放在聚合层进行认证的,来判断你是否有机制来访问
第四行的就是允许的名称,这个是提供的证书里面的,来判段这个名称是不是能够访问,这个我使用的是apiserver的证书,也可以使用ca单独为这个生成一个新的证书
第五行,请求头来判断是否可以访问
第六行,就是启动聚合层的路由
重启这个字段
[root@k8s-master1 ~]# vim /opt/kubernetes/cfg/kube-apiserver.conf
将开始聚合层的配置添加进入

[root@k8s-master1 ~]# systemctl restart kube-apiserver
[root@k8s-master1 ~]# ps -ef |grep kube-apiserver

2、部署 Metrics Server
Metrics Server是一个集群范围的资源使用情况的数据聚合器。作为一个应用部署在集群中。
Metric server从每个节点上Kubelet公开的摘要API收集指标。
Metrics server通过Kubernetes聚合器注册在Master APIServer中。
它必须能拿到cpu的利用率,有这个才能做对比,要不要扩容,所以要部署一个metrics server到集群中,让它为hpa提供CPU的数据查询,metrics server相当于一个聚合器,它那的数据就是cadvisor 的数据,它将那些数据每个节点的数据进行聚合,这是它说做的事,因为你要扩容,并不是一个副本去扩容,并不是参考一个副本的指标,要参考你当前跑的pod的都要考虑,而每个上面都有cadvisor,那访问当前的pod,就只访问到当前的利用率,而cadvisor也没有什么聚合的作用,要想对所有的pod的资源利用率做一个汇总,那么上面就有这个metrics server了,之前是有heapstar去做的,现在是由metrics server去做的,帮你去汇总,然后hpa从这个汇总信息里去拿整体cpu的利用率来判断这个域,所以metrics server就是一个聚合器,
而且还会从每个节点上kubelet收集这些指标,并通过k8s聚合器注册在k8s中的apiserver中,所以metrics必须启动聚合器,所以metrics就能主动的将自己注册进去,注册进去之后就可以metrics暴露的一个名称来请求metrics,会根据你携带的名称帮你转发到后面的metrics的pod

git clone https://github.com/kubernetes-incubator/metrics-server
cd metrics-server/deploy/1.8+/
vi metrics-server-deployment.yaml   # 添加2条启动参数   ,把改修改的修改一下,默认是https请求的,我们是直接https请求的apiimage: zhaocheng172/metrics-server-amd64:v0.3.1command:- /metrics-server- --kubelet-insecure-tls- --kubelet-preferred-address-types=InternalIPimagePullPolicy: AlwaysvolumeMounts:- name: tmp-dirmountPath: /tmpnodeSelector:beta.kubernetes.io/os: linux

[root@k8s-master1 1.8+]# kubectl apply -f .
确保pod起来

 [root@k8s-master1 1.8+]# kubectl get pod -n kube-system
NAME                              READY   STATUS    RESTARTS   AGE
coredns-59fb8d54d6-7rmx2          1/1     Running   0          43m
kube-flannel-ds-amd64-4jjmm       1/1     Running   0          43m
kube-flannel-ds-amd64-9f9vq       1/1     Running   0          43m
kube-flannel-ds-amd64-gcf9s       1/1     Running   0          43m
metrics-server-64499fd8c6-xkc6c   1/1     Running   0          61s

部署起来先看看metrics-server有没有正常工作,先看一下pod有没有错误日志,再看看有没有注册到聚合层
通过kubectl get apiservers,查看有没有注册到,这里为true才算正常

[root@k8s-master1 1.8+]# kubectl get apiservices
v1beta1.metrics.k8s.io                 kube-system/metrics-server   True        19s

然后查看kubectl top node来查看node资源的利用率

[root@k8s-master1 1.8+]# kubectl top node
NAME          CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
k8s-master1   517m         25%    1021Mi          62%       
k8s-node1     994m         49%    551Mi           33%       
k8s-node2     428m         10%    2466Mi          32%  

也可以通过kubectl top pod来查看pod的资源利用率

[root@k8s-master1 1.8+]# kubectl top pod -n kube-system
NAME                              CPU(cores)   MEMORY(bytes)   
coredns-59fb8d54d6-7rmx2          13m          14Mi            
kube-flannel-ds-amd64-4jjmm       15m          23Mi            
kube-flannel-ds-amd64-9f9vq       7m           15Mi            
kube-flannel-ds-amd64-gcf9s       9m           15Mi            
metrics-server-64499fd8c6-xkc6c   3m           14Mi /

也可以通过metrics api 的标识来获得资源使用率的指标,比如容器的cpu和内存使用率,这些度量标准既可以由用户直接访问,通过kubectl top命令,也可以由集群中的控制器pod autoscaler用于进行查看,hpa获取这个资源利用率的时候它是通过接口的,它请求的接口就是api,所以也可以根据api去获取这些数据,
测试:可以获取这些数据,这些数据和top看到的都是一样的,只不过这个是通过api 去显示的,只不过是通过json去显示的

kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes
[root@k8s-master1 1.8+]# kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes
{"kind":"NodeMetricsList","apiVersion":"metrics.k8s.io/v1beta1","metadata":{"selfLink":"/apis/metrics.k8s.io/v1beta1/nodes"},"items":[{"metadata":{"name":"k8s-master1","selfLink":"/apis/metrics.k8s.io/v1beta1/nodes/k8s-master1","creationTimestamp":"2019-12-12T03:45:06Z"},"timestamp":"2019-12-12T03:45:03Z","window":"30s","usage":{"cpu":"443295529n","memory":"1044064Ki"}},{"metadata":{"name":"k8s-node1","selfLink":"/apis/metrics.k8s.io/v1beta1/nodes/k8s-node1","creationTimestamp":"2019-12-12T03:45:06Z"},"timestamp":"2019-12-12T03:45:00Z","window":"30s","usage":{"cpu":"285582752n","memory":"565676Ki"}},{"metadata":{"name":"k8s-node2","selfLink":"/apis/metrics.k8s.io/v1beta1/nodes/k8s-node2","creationTimestamp":"2019-12-12T03:45:06Z"},"timestamp":"2019-12-12T03:45:01Z","window":"30s","usage":{"cpu":"425912654n","memory":"2524648Ki"}}]}

将命令行输出的格式转换成json格式----jq命令
[root@k8s-master1 1.8+]# kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes |jq

3、 autoscaing/v1 ( cpu指标实践 )
autoscaling/v1版本只支持CPU一个指标。
首先部署一个应用并指出一个service,我们一会测试一下进行流量压测,cpu达到60%的预值然后就进行自动扩容副本,如果流量下来,然后就进行自动的缩容

[root@k8s-master1 hpa]# cat app.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: nginxname: nginx
spec:replicas: 5selector:matchLabels:app: nginxstrategy: {}template:metadata:creationTimestamp: nulllabels:app: nginxspec:containers:- image: nginxname: nginxresources:requests:cpu: 90mmemory: 90Mi
---
apiVersion: v1
kind: Service
metadata:name: nginx
spec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80

创建HPA策略
用命令生成
kubectl autoscale –help
这里可以查看到使用的命令用-o yaml输出出来—dry-run过滤空的字段

 kubectl autoscale deployment foo --min=2 --max=10kubectl autoscale deployment nginx --min=2 --max=10 -o yaml  --dry-run > hpa-v1.yaml
[root@k8s-master1 hpa]# cat hpa-v1.yaml 
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:name: nginx
spec:maxReplicas: 6minReplicas: 3scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: nginxtargetCPUUtilizationPercentage: 60
scaleTargetRef:表示当前要伸缩对象是谁
targetCPUUtilizationPercentage:当整体的资源利用率超过60%的时候,会进行扩容。
Maxreplicas:是最大扩容到的副本量
Minreplicas:是最小缩容到的副本量

查看扩容状态

[root@k8s-master1 hpa]# kubectl get hpa
NAME    REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
nginx   Deployment/nginx   0%/60%    3         6         3          52m

开启压测,进行对我们的cluster IP进行测试

[root@k8s-master1 hpa]# kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP   5h20m
nginx        ClusterIP   10.0.0.211   <none>        80/TCP    48m

安装压测命令

yum install httpd-tools -y
[root@k8s-master1 hpa]# ab -n 1000000 -c 10000  http://10.0.0.211/index.html

测试cpu已经成功超出预值

[root@k8s-master1 hpa]# kubectl get hpa
NAME    REFERENCE          TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
nginx   Deployment/nginx   148%/60%   3         6         6          56m

最大的副本量是6个,现在已经成功自动扩容

[root@k8s-master1 hpa]# kubectl get pod 
NAME                    READY   STATUS    RESTARTS   AGE
nginx-969bfd4c9-g4zkc   1/1     Running   0          34m
nginx-969bfd4c9-hlcmc   1/1     Running   0          51s
nginx-969bfd4c9-mn2rd   1/1     Running   0          52m
nginx-969bfd4c9-rk752   1/1     Running   0          34m
nginx-969bfd4c9-zmmd8   1/1     Running   0          51s
nginx-969bfd4c9-zz5gp   1/1     Running   0          51s

关闭压测,过一会大概5分钟之后就会自动的缩容。

[root@k8s-master1 hpa]# kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-969bfd4c9-g4zkc   1/1     Running   0          39m
nginx-969bfd4c9-mn2rd   1/1     Running   0          57m
nginx-969bfd4c9-rk752   1/1     Running   0          39m
工作流程:hpa -> apiserver -> kube aggregation -> metrics-server -> kubelet(cadvisor)

4、autoscaling/v2beta2(多指标)
为满足更多的需求, HPA 还有 autoscaling/v2beta1和 autoscaling/v2beta2两个版本。
这两个版本的区别是 autoscaling/v1beta1支持了 Resource Metrics(CPU)和 Custom Metrics(应用程序指标),而在 autoscaling/v2beta2的版本中额外增加了 External Metrics的支持。
为了满足更多的需求,hpa还有v2beat1和v2beat2两个版本,这个跨度也比较大,这个可以实现自定义指标

[root@k8s-master1 hpa]# kubectl get hpa.v2beta2.autoscaling -o yaml > hpa-v2.yaml
apiVersion: v1
items:
- apiVersion: autoscaling/v2beta2kind: HorizontalPodAutoscalermetadata:name: nginxnamespace: defaultspec:maxReplicas: 6minReplicas: 3metrics:- resource:name: cputarget:averageUtilization: 60type: Utilizationtype: ResourcescaleTargetRef:apiVersion: apps/v1kind: Deploymentname: nginx

与上面v1版本效果一样,只不过这里格式有所变化。
v2还支持其他另种类型的度量指标,:Pods和Object。

type: Pods
pods:metric:name: packets-per-secondtarget:type: AverageValue
averageValue: 1k
type: Object
object:metric:name: requests-per-seconddescribedObject:apiVersion: networking.k8s.io/v1beta1kind: Ingressname: main-routetarget:type: Valuevalue: 2k

metrics中的type字段有四种类型的值:Object、Pods、Resource、External。
• Resource:指的是当前伸缩对象下的pod的cpu和memory指标,只支持Utilization和AverageValue类型的目标值。

• Object:指的是指定k8s内部对象的指标,数据需要第三方adapter提供,只支持Value和AverageValue类型的目标值。

• Pods:指的是伸缩对象Pods的指标,数据需要第三方的adapter提供,只允许AverageValue类型的目标值。另外就是pod暴露的指标,比如http的请求数,吞吐量,也就是http它本身暴露的出来的,但是暴露出来,它不能拿到这些指标,还需要借助一些第三方的监控,也就是使用hpa这里面值的判断,这个提前是要通过kubectl apiservices里面看到注册进去,到聚合层,所有的hpa都是通过聚合层去拿到的,它其实是请求的api到聚合层,然后聚合层帮你代理到后面的组件,比如像metics-service ,它去帮你拿的,然后每个kubelet帮你收集的(cadvisor每个pod的资源利用率,它帮你做一个聚合,聚合之后通过聚合器暴露出来,然后来查询设定的pod的资源利用率,并且做了一个平均,这样就能通过hpa就能拿到之后的目标值,然后hpa再帮你判断,是否达到这个预值,到的话,帮你扩容。
基于pod的实例,pod本身暴露的指标,比较吞吐量,qps,如果目标是1k也会触发
Hpa ->apiserver->agg->聚合层->prometheus-adapter然后它注册到聚合层里面来,prometheus本身就是一个监控系统,它能采集到所有pod暴露的指标,自己存储起来,并且展示,adapter主要将自己注册到聚合层里面并且它能转换这个监控指标apiserver相应的数据接口和prometheus的接口是不一样的,adapter在这里存在的关键是数据格式的转化,对接的不单纯的是prometheus或者其他的监控系统,要想实现自定义指标完成数据的转化和注册,然后prometheus将每个pod展示出来

• External:指的是k8s外部的指标,数据同样需要第三方的adapter提供,只支持Value和AverageValue类型的目标值。
• 工作流程:hpa -> apiserver -> kube aggregation -> prometheus-adapter -> prometheus -> pods

2.6 基于Prometheus自定义指标缩放
资源指标只包含CPU、内存,一般来说也够了。但如果想根据自定义指标:如请求qps/5xx错误数来实现HPA,就需要使用自定义指标了,目前比较成熟的实现是 Prometheus Custom Metrics。自定义指标由Prometheus来提供,再利用k8s-prometheus-adpater聚合到apiserver,实现和核心指标(metric-server)同样的效果。

资源一般就包含cpu、内存就够了,像公有云也是一样都是基于cpu、内存保守型的维度来实现的,但是我们可能会有一些特殊额需求,比如web的服务请求的QPS,或者这组web提供的这组数据,这也是很常见的需求,不过这类需求,并不是很多,它实现没那么简单,目前很成熟的方案就是用prometheus来自定义这些指标

它大概的流程是这样的,api adapter注册到apiserver中的通过apiservice就可以看到,然后到prometheus,然后从pod中获取到这些指标
Kubernetes高级进阶之pod的自动扩容/缩容

1、部署Prometheus
Prometheus(普罗米修斯)是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目,拥有非常活跃的开发人员和用户社区。为强调开源及独立维护,Prometheus于2016年加入云原生云计算基金会(CNCF),成为继Kubernetes之后的第二个托管项目。
Prometheus 特点:
• 多维数据模型:由度量名称和键值对标识的时间序列数据
• PromSQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询
• 不依赖分布式存储,单个服务器节点可直接工作
• 基于HTTP的pull方式采集时间序列数据
• 推送时间序列数据通过PushGateway组件支持
• 通过服务发现或静态配置发现目标
• 多种图形模式及仪表盘支持(grafana)
Prometheus组成及架构
Kubernetes高级进阶之pod的自动扩容/缩容
• Prometheus Server:收集指标和存储时间序列数据,并提供查询接口
• ClientLibrary:客户端库
• Push Gateway:短期存储指标数据。主要用于临时性的任务
• Exporters:采集已有的第三方服务监控指标并暴露metrics
• Alertmanager:告警
• Web UI:简单的Web控制台
部署:
这里没有详细说prometheus的部署,要是需要就看我前面一篇发表的文章
这里只需要部署一个服务端就可以,可以拿到pod的数据就可以,这里还有个pv的自动供给,所以这里我提前部署好了,之前的文章我都写过,这里不做过多演示,

[root@k8s-master1 prometheus]# kubectl get pod,svc -n kube-system
NAME                                  READY   STATUS    RESTARTS   AGE
pod/coredns-59fb8d54d6-7rmx2          1/1     Running   0          25h
pod/grafana-0                         1/1     Running   0          18m
pod/kube-flannel-ds-amd64-4jjmm       1/1     Running   0          25h
pod/kube-flannel-ds-amd64-9f9vq       1/1     Running   0          25h
pod/kube-flannel-ds-amd64-gcf9s       1/1     Running   0          25h
pod/metrics-server-64499fd8c6-xkc6c   1/1     Running   0          24h
pod/prometheus-0                      2/2     Running   0          23mNAME                     TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE
service/grafana          NodePort    10.0.0.233   <none>        80:30007/TCP     18m
service/kube-dns         ClusterIP   10.0.0.2     <none>        53/UDP,53/TCP    25h
service/metrics-server   ClusterIP   10.0.0.67    <none>        443/TCP          24h
service/prometheus       NodePort    10.0.0.115   <none>        9090:30090/TCP   23m

访问我的prometheus的30090,这里我没有部署node节点上的node_experiod的组件所以没有采集到,这个因为用不到,我前面的文章部署有详细说明,这里不做这个
Kubernetes高级进阶之pod的自动扩容/缩容
3、基于QPS指标实践
部署一个应用:

 [root@k8s-master1 hpa]# cat hpa-qps.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: metrics-appname: metrics-app
spec:replicas: 3selector:matchLabels:app: metrics-apptemplate:metadata:labels:app: metrics-appannotations:prometheus.io/scrape: "true"prometheus.io/port: "80"prometheus.io/path: "/metrics"spec:containers:- image: zhaocheng172/metrics-appname: metrics-appports:- name: webcontainerPort: 80resources:requests:cpu: 200mmemory: 256MireadinessProbe:httpGet:path: /port: 80initialDelaySeconds: 3periodSeconds: 5livenessProbe:httpGet:path: /port: 80initialDelaySeconds: 3periodSeconds: 5---
apiVersion: v1
kind: Service
metadata:name: metrics-applabels:app: metrics-app
spec:ports:- name: webport: 80targetPort: 80selector:app: metrics-app

该metrics-app暴露了一个Prometheus指标接口,可以通过访问service看到:

[root@k8s-master1 hpa]# curl 10.0.0.107/metrics
HELP http_requests_total The amount of requests in total
TYPE http_requests_total counter

http_requests_total 31。这一块是我这个pod总共请求了多少的访问,累计值
HELP http_requests_per_second The amount of requests per second the latest ten seconds
TYPE http_requests_per_second gauge
http_requests_per_second 0.5 这个是10秒之内的吞吐率,也就是有0.5个http请求,吞吐率和qps是不一样的概念,qps是指一个范围内求的一个量,但是他们都是求当前量化的一个指标
现在去查看prometheus有没有请求到那三个pod的数据
通过http_requests_total,可以看到我们在yaml中去定义的name_app: metrics-app
Kubernetes高级进阶之pod的自动扩容/缩容
之前的如果也想被prometheus采集到,那么就需要去暴露这个指标,这是其一,其二就是采集这个指标,所有的pod的数据是通过yaml中的注解去实现的
app: metrics-app
annotations:
prometheus.io/scrape: "true"。让它能够采集
prometheus.io/port: "80"。 访问它的地址也就是url
prometheus.io/path: "/metrics"。 默认都是metrics
这三个注解的字段都是prometheus开头的,所以要把这个指标拿走监控起来
Prometheus会扫描k8s中的pod有没有暴露的指标,有的话,它会自动加入被监控端,然后将暴露出来,所以这就是prometheus对k8s的自动发现所能感知所监控到
现在采集到了然后就是部署custom metrics adapter
部署 Custom Metrics Adapter
但是prometheus采集到的metrics并不能直接给k8s用,因为两者数据格式不兼容,还需要另外一个组件(k8s-prometheus-adpater),将prometheus的metrics 数据格式转换成k8s API接口能识别的格式,转换以后,因为是自定义API,所以还需要用Kubernetes aggregator在主APIServer中注册,以便直接通过/apis/来访问。
这个主要作用就是将自己注册到api-server中,第二就是转换成api可以识别的数据,
https://github.com/DirectXMan12/k8s-prometheus-adapter
该 PrometheusAdapter 有一个稳定的Helm Charts,我们直接使用。
先准备下helm环境:

[root@k8s-master1 helm]# wget https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gz
[root@k8s-master1 helm]# tar xf helm-v3.0.0-linux-amd64.tar.gz
[root@k8s-master1 helm]# mv linux-amd64/helm /usr/bin

现在就可以使用helm 了,安装好helm,还能配置一个helm的仓库
也就是它将adapter存放到这个仓库里面了
添加的话建议使用微软云的adapter的

[root@k8s-master1 helm]# helm repo add stable http://mirror.azure.cn/kubernetes/charts
"stable" has been added to your repositories
[root@k8s-master1 helm]# helm repo ls
NAME    URL                                     
stable  http://mirror.azure.cn/kubernetes/charts

这样的话,我们就能使用helm install,安装adapter了
因为adapter这个chart比如它要连接prometheus的地址,就是默认的chart并不能之前使用,还得把它改了,所以要指定它的地址和端口,直接通过set命令来替换chart默认的变量
部署prometheus-adapter,指定prometheus地址:

[root@k8s-master1 helm]# helm install prometheus-adapter stable/prometheus-adapter --namespace kube-system --set prometheus.url=http://prometheus.kube-system,prometheus.port=9090
NAME: prometheus-adapter
LAST DEPLOYED: Fri Dec 13 15:22:42 2019
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
prometheus-adapter has been deployed.
In a few minutes you should be able to list metrics using the following command(s):kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1
[root@k8s-master1 helm]# helm list -n kube-system
NAME                NAMESPACE   REVISION    UPDATED                                 STATUS      CHART                       APP VERSION
prometheus-adapter  kube-system 1           2019-12-13 15:22:42.043441232 +0800 CST deployed    prometheus-adapter-1.4.0    v0.5.0  

查看pod已经部署成功

[root@k8s-master1 helm]# kubectl get pod -n kube-system
NAME                                  READY   STATUS    RESTARTS   AGE
coredns-59fb8d54d6-7rmx2              1/1     Running   0          28h
grafana-0                             1/1     Running   0          3h30m
kube-flannel-ds-amd64-4jjmm           1/1     Running   0          28h
kube-flannel-ds-amd64-9f9vq           1/1     Running   0          28h
kube-flannel-ds-amd64-gcf9s           1/1     Running   0          28h
metrics-server-64499fd8c6-xkc6c       1/1     Running   0          27h
prometheus-0                          2/2     Running   0          3h35m
prometheus-adapter-77b7b4dd8b-9rv26   1/1     Running   0          2m36s

检查判断pod是否工作正常,这里已经是注册到聚合层了

[root@k8s-master1 helm]# kubectl get apiservice
v1beta1.custom.metrics.k8s.io          kube-system/prometheus-adapter   True        13m

这样就能通过一个原始的url去测试这个接口能不能用
[root@k8s-master1 helm]# kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" |jq
创建hpa策略

[root@k8s-master1 hpa]# cat hpa-v5.yaml 
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:name: metrics-app-hpa namespace: default
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: metrics-appminReplicas: 1maxReplicas: 10metrics:- type: Podspods:metric:name: http_requests_per_secondtarget:type: AverageValueaverageValue: 800m

查看创建成功的状态,目前是没有拿到这个值的。因为适配器还不知道你要什么指标(http_requests_per_second),HPA也就获取不到Pod提供指标。
ConfigMap在default名称空间中编辑prometheus-adapter ,并seriesQuery在该rules: 部分的顶部添加一个新的:

[root@k8s-master1 hpa]# kubectl get hpa
NAME              REFERENCE          TARGETS          MINPODS   MAXPODS   REPLICAS   AGE
metrics-app-hpa   Deployment/QPS     <unknown>/800m   3         6         0          16m
nginx             Deployment/nginx   0%/60%           3         6         3          24h

添加新的字段,来收集我们想实现的QPS的值
[root@k8s-master1 hpa]# kubectl edit cm prometheus-adapter -n kube-system
将这一块放到rules下,,而且中间这个其实是promsql,这个可以执行的,而且和我们的之前输出的结果是一样的,{里面表示字段不为空,更精确一些},这个主要是查询出一系列数据,下面一段是管联,将ns和pod关联,来拿数据,都是对应的关系。
和前面的一样,只不过前面的是http的访问的累计值,现在我们要转换成一个速率,QPS的值是通过范围之内,1分钟之内采集了多少指标进行相加,再除以60秒,就是每秒的值, matches: "^(.*)_total",也举手匹配前面的值进行替换,来提供 as: "${1}_per_second"的值,也就是QPS的值,用这个值为http提供接口,

    rules:- seriesQuery: 'http_requests_total{kubernetes_namespace!="",kubernetes_pod_name!=""}'resources:overrides:kubernetes_namespace: {resource: "namespace"}kubernetes_pod_name: {resource: "pod"}name:matches: "^(.*)_total"as: "${1}_per_second"metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>}[2m])) by (<<.GroupBy>>)'

Kubernetes高级进阶之pod的自动扩容/缩容

这个值是求的它的一个平均值,也就是2分钟之内0.42http请求,每一次执行就就近执行的平均数
rate(http_requests_total{kubernetes_namespace!="",kubernetes_pod_name!=""}[2m])
Kubernetes高级进阶之pod的自动扩容/缩容

因为我们是多个pod,所以我们需要相加对外提供一个指标,然后我们再给一个by,给个标签,这样的话进行标签去查询
sum(rate(http_requests_total{kubernetes_namespace!="",kubernetes_pod_name!=""}[2m]))
Kubernetes高级进阶之pod的自动扩容/缩容
使用by,定义标签的名称方便去查询
sum(rate(http_requests_total{kubernetes_namespace!="",kubernetes_pod_name!=""}[2m])) by (kubernetes_pod_name)
Kubernetes高级进阶之pod的自动扩容/缩容

测试api
kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/*/http_requests_per_second"

目前已经收到我们的值了

NAME              REFERENCE                TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
metrics-app-hpa   Deployment/metrics-app   416m/800m   1         10        3          2m13s
nginx             Deployment/nginx         0%/60%      3         6         3          25h

压测

Kubectl get svc
metrics-app   ClusterIP   10.0.0.107   <none>        80/TCP    3h15m
ab -n 100000 -c 100  http://10.0.0.107/metrics

查看扩容状态

[root@k8s-master1 hpa]# kubectl get hpa
NAME              REFERENCE                TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
metrics-app-hpa   Deployment/metrics-app   414m/200m   1         10        10         8m36s
nginx             Deployment/nginx         0%/60%      3         6         3          26h
[root@k8s-master1 hpa]# kubectl get pod
NAME                                      READY   STATUS    RESTARTS   AGE
metrics-app-b96659c9c-5jxsg               1/1     Running   0          3m53s
metrics-app-b96659c9c-5lqpb               1/1     Running   0          5m24s
metrics-app-b96659c9c-6qx2p               1/1     Running   0          2m21s
metrics-app-b96659c9c-bqkbk               1/1     Running   0          3m53s
metrics-app-b96659c9c-f5vcf               1/1     Running   0          2m21s
metrics-app-b96659c9c-j24xn               1/1     Running   1          3h12m
metrics-app-b96659c9c-vpl4t               1/1     Running   0          3h12m
metrics-app-b96659c9c-wxp7z               1/1     Running   0          3m52s
metrics-app-b96659c9c-xztqz               1/1     Running   0          3m53s
metrics-app-b96659c9c-zhq5r               1/1     Running   0          5m24s
nfs-client-provisioner-6f54fc894d-dbvmk   1/1     Running   0          5h40m
nginx-969bfd4c9-g4zkc                     1/1     Running   0          25h
nginx-969bfd4c9-mn2rd                     1/1     Running   0          25h
nginx-969bfd4c9-rk752                     1/1     Running   0          25h

等待一会大概5分钟就会进行副本的缩容
小结:

  1. 通过/metrics收集每个Pod的http_request_total指标;
  2. prometheus将收集到的信息汇总;
  3. APIServer定时从Prometheus查询,获取request_per_second的数据;
  4. HPA定期向APIServer查询以判断是否符合配置的autoscaler规则;
  5. 如果符合autoscaler规则,则修改Deployment的ReplicaSet副本数量进行伸缩。
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Haproxy搭建Web群集概述

    博文目录一、Haproxy概述1、HTTP请求2、负载均衡常用调度算法3、常见的Web群集调度器二、Haproxy配置项介绍1、global配置项通常有下面配置参数:2、defaults配置项配置默认参数,一般会被应用组件继承,如果在应用组件中没有特别的声明,将安装默认配置参数:3、listen配置项一…...

    2024/4/19 5:01:18
  2. 理论+实操:apache 的虚拟web主机配置

    @[toc]apache 常用的功能,虚拟主机 一:虚拟Web主机在同一台服务器中运行多个Web站点,其中每一个站点并不独立占用一台真正的计算机 1.1 httpd支持的虚拟主机类型(三种) 基于域名的类型 基于IP地址的虚拟主机 基于端口的虚拟主机例如:www.kgc.omwww.accp.comIP相同,端口相…...

    2024/4/16 15:56:16
  3. k8s架构原理

    一、k8s架构图 二、k8s架构模式:master(cluster)/worker(node)架构 master组件:1.kube-apiserver: 提供restful接口指令供客户端或者其他组件调用,客户端指的是kubectl命令行工具,其他通信组件包括controller和scheduler 2.etcd: 负责存储集群状态 3.controller 管理并实现k…...

    2024/5/7 23:49:58
  4. [社群QA] “专家坐诊”第38期问答汇总

    Q:您好,我有个和上期未解决类似的问题,我有些ping监控的项目放在不同主机上,想请问怎样把不同主机的报警整合一下,比如3个以上不同主机同时报警才触发?只是加一块的话大概就这样的 A乐小维: 你这边是用ICMP ping还是? Q:外部脚本调用fping方式A乐小维:结果是返回0或…...

    2024/4/18 6:23:07
  5. Grafana邮件配置

    Grafana是一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源。修改Grafana配置文件:vim /etc/grafana/grafana.ini[smtp]enabled = truehost = smtp.163.com:4…...

    2024/4/24 8:19:34
  6. 搭建Jenkins简单流程

    **思路:1.搭建Jenkins需要的环境2.选择安装Jenkins的方式 流程如下:环境(git、maven、java)jdk安装: 提前把jdk包下载好再上传 /usr/local rpm -qa |grep openjdk rpm -e --nodeps 删除自带的jdk包 (wget -O /usr/local/jdk-8u191-linux-x64.tar.gz http://download.ora…...

    2024/4/28 4:14:42
  7. 网址的组成

    URL的组成部分 image.png scheme:方案名 或者 协议名,比如http、https、ftp等 host:主机名,可以是IP,或者域名 port:端口号,有时候可以省略,浏览器等客户端会依据 scheme 使用默认的端口号,例如 HTTP 的默认端口号是 80,HTTPS 的默认端口号是 443。 path:标记资源所…...

    2024/4/24 8:19:29
  8. 青云Xenon管理mysql主从复制测试

    环境:2台VM虚拟机CentOS7 X86_64 位系统 配置环境要求: 一、2台虚拟机器要关闭iptables 关闭firewalld, 关闭selinux,开启时间同步参数,保证2台虚拟机器的时间是一致的二、2台虚拟机的sshd服务要开启22端口(Xenon代码中只支持通过22端口来ssh相互之间访问)三、Xenon服务启…...

    2024/4/24 8:19:29
  9. CentOS 7.7 yum方式安装配置Zabbix 4.0 LTS详解(十一)完结

    十三、使用Ansible批量安装Zabbix Agent,并通过自动注册添加Linux主机:1、Ansible简介:Ansible是一款基于Python研发的开源自动化工具,实现了批量运行命令、批量部署程序、批量配置系统等功能。默认通过SSH协议(也可使用其它协议)进行远程命令执行或下发配置,无需部署任…...

    2024/4/24 8:19:27
  10. Haproxy搭建Web群集——实战篇

    实验要求:1.一台 Haproxy调度服务器,两台 Nginx 服务器,一台windows7作为客户端; 2.三台服务器为CentOS 7.3的64位系统; 3.所有主机网卡都设置成仅主机模式,绑定静态地址; 4.客户端可以通过访问调度服务器,访问到两台节点服务器,不需要访问真实服务器地址主机 角色 IP地…...

    2024/4/24 8:19:26
  11. 部署Varnish缓存搭理服务器

    博文大纲:一、Varnish概述1.Varnish简介2.Varnish和squid的区别3.Varnish的工作原理4.Varnish架构5.Varnish配置6.VCL中内置预设变量7.VCL的子程序8.特定功能语句9.return语句10.Varnish请求处理的步骤11.Varnish的优雅模式二、安装Varnish1.客户端访问测试缓存2.服务端测试清…...

    2024/4/24 8:19:25
  12. 部署LAMP架构之Apache安装

    源码编译安装ApacheApache起源源于A Patchy Server,著名的开源Web服务软件 1995年发布Apache服务程序的1.0版本 由Apache软件基金会(ASF)负责维护 最新的名称“Apache HTTP Server” 官方站点:http://httpd.apache.org/特点: 开放源代码、跨平台应用 支持多种网页编程语言…...

    2024/4/24 8:19:32
  13. 虚拟化

    1.虚拟化概念:虚拟化是指计算元件在虚拟的而不是真实的基础上运行,用"虚"的软件来替代或模拟"实"的服务器、CPU、网络等硬件产品。2.服务器虚拟化:服务器的虚拟化是指将服务器物理资源抽象成逻辑资源,让一台服务器或让一群服务器变成若干台相互隔离的虚…...

    2024/4/24 8:19:23
  14. Squid代理服务器——ACL访问控制,sarg日志,反向代理

    实验环境 squid服务器 ens33:192.168.13.184ens36:192.168.10.1 (仅主机模式) web服务器 192.168.13.151 client 192.168.10.10 (仅主机模式) 一,ACL访问控制 1,在squid服务器上修改配置文件 [root@squid ~]# vim /etc/squid.conf ##修改配置文件 # should be allowed …...

    2024/4/24 8:19:24
  15. MySQL全量、增量备份与恢复 (理论+实践篇)

    数据备份的中要性在生产环境中,数据的安全性是至关重要的,任何数据的丢失都可能产生严重的后果 造成数据丢失的原因程序错误 人为错误 计算机失败 磁盘失败 灾难(如起火、地震)和偷窃数据库备份的分类 从物理与逻辑的角度,备份可分为物理备份:对数据库操作系统的物理文件…...

    2024/4/24 8:19:22
  16. MySQL主从复制与读写分离(实践篇)

    MySQL主从复制的类型 基于语句的复制(默认)在主服务器上执行的语句,从服务器执行同样的语句基于行的复制把改变的内容复制到从服务器混合类型的复制一旦发现基于语句无法精确复制时,就会采用基于行的复制主从复制的过MySQL读写分离原理读写分离就是只在主服务器上写,只在从服…...

    2024/4/24 8:19:20
  17. Linux小技巧:ls -l —— 查看文件信息,按时间、大小排序

    一、按时间排序:升序排列是按照数据从低到高排列,降序排列是数据从高到低排列ls按时间 降序 排列: ls -lt (最常用)ls按时间 升序 排列:ls -lrt按文件修改时间查看文件:加上-r是反向排序:命令解释:-t:按修改时间排序,其实我们用man ls命令就可以看到ls命令带的参数的用…...

    2024/4/24 8:19:22
  18. Nginx专题(2):Nginx的负载均衡策略及其配置

    摘要:本文介绍了Nginx的负载均衡策略,一致性hash分配原理,及常用的故障节点的摘除与恢复配置。文章来源:宜信技术学院 & 宜信支付结算团队技术分享第一期-宜信支付结算八方数据团队高级技术经理 周恒《Nginx的细枝末节》 分享者:宜信支付结算八方数据团队高级技术经理…...

    2024/4/24 8:19:19
  19. awk命令过滤ifconfig命令中的IPv4地址

    前言: 本文主要讲解如何过滤ifconfig命令结果中的IPv4地址。 本文章的案例适合查找出所有网卡的IPv4地址。 本章所有案例的系统是Red Hat 7.6版本。[root@192 opt]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.6 (Maipo)方法一…...

    2024/4/30 12:58:33
  20. HTTP详细介绍

    一.概述HTTP(Hyper Text Transfer Protocol),超文本传输协议,是一种建立在TCP上的无状态连接,整个工作流程基本是由客户端(client)向服务端(server)发送一个http请求,向server端请求需要的资源,到server端收到客户端的请求后,根据请求做出相应的动作访问服务器资源,然后通…...

    2024/4/16 15:57:03

最新文章

  1. 2-5 任务:打印九九表

    本次实战的目标是通过编写程序实现打印九九乘法表、字符矩形、字符平行四边形和字符菱形等图形&#xff0c;以及解决百钱买百鸡问题和输出素数等实际问题。在实战过程中&#xff0c;我们将学习并掌握以下知识点。 双重循环的使用&#xff1a;通过双重循环实现九九乘法表的打印&…...

    2024/5/8 2:46:21
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. centos后台运行使用nohup命令

    nohup ./my_script.sh & nohup命令运行后如何关闭 nohup 命令用于在用户注销系统后继续运行指定的命令。如果您想关闭使用 nohup 运行的进程&#xff0c;您可以使用 kill 命令。 首先&#xff0c;您需要找到 nohup 运行的进程的进程ID&#xff08;PID&#xff09;。可以使…...

    2024/5/7 16:06:00
  4. Kafka架构概述

    Kafka的体系结构 Kafka是由Apache软件基金会管理的一个开源的分布式数据流处理平台。Kafka具有支持消息的发布/订阅模式、高吞吐量与低延迟、持久化、支持水平扩展、高可用性等特点。可以将Kafka应用于大数据实时处理、高性能数据管道、流分析、数据集成和关键任务应用等场景。…...

    2024/5/6 22:36:40
  5. 微信小程序生命周期管理:从数据初始化到事件绑定

    作为一个独立的应用开发平台,微信小程序提供了自己的生命周期机制,与我们熟悉的Vue.js框架有一些差异。掌握小程序生命周期的特点和使用技巧,对于开发高质量的小程序应用至关重要。深入理解和掌握小程序生命周期的使用技巧,将有助于我们构建出更加健壮和可维护的小程序应用。 小…...

    2024/5/7 6:07:09
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/7 5:50:09
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/7 14:25:14
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57