Kubernetes中Pod的扩缩容介绍

news2024/11/24 11:55:44

Kubernetes中Pod的扩缩容介绍

在实际生产系统中,我们经常会遇到某个服务需要扩容的场景,也可能会遇到由于资源紧张或者工作负载降低而需

要减少服务实例数量的场景。此时可以利用 Deployment/RC 的 Scale 机制来完成这些工作。

Kubernetes 对 Pod 的扩缩容操作提供了手动和自动两种模式,手动模式通过执行 kubectl scale 命令或通过

RESTful API 对一个 Deployment/RC 进行 Pod 副本数量的设置,即可一键完成。自动模式则需要用户根据某个性

能指标或者自定义业务指标,并指定 Pod 副本数量的范围,系统将自动在这个范围内根据性能指标的变化进行调

整。

1、手动扩缩容

下面以 Deployment nginx 为例进行手动扩缩容的演示。

配置文件 037-nginx-deployment.yaml 的内容为:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-deployment
  template:
    metadata:
      labels:
        app: nginx-deployment
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
[root@master cha3]# kubectl create -f 037-nginx-deployment.yaml
deployment.apps/nginx-deployment created

已运行的 Pod 副本数量为3个:

[root@master cha3]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-5c5f6c4496-br6jv   1/1     Running   0          56s
nginx-deployment-5c5f6c4496-mr24j   1/1     Running   0          56s
nginx-deployment-5c5f6c4496-z8jh2   1/1     Running   0          56s
[root@master cha3]# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           76s
[root@master cha3]# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-5c5f6c4496   3         3         3       79s

通过 kubectl scale 命令可以将 Pod 副本数量从初始的 3 个更新为 5 个:

[root@master cha3]# kubectl scale deployment nginx-deployment --replicas 5
deployment.apps/nginx-deployment scaled
[root@master cha3]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-5c5f6c4496-2565s   1/1     Running   0          40s
nginx-deployment-5c5f6c4496-b4d87   1/1     Running   0          40s
nginx-deployment-5c5f6c4496-br6jv   1/1     Running   0          3m34s
nginx-deployment-5c5f6c4496-mr24j   1/1     Running   0          3m34s
nginx-deployment-5c5f6c4496-z8jh2   1/1     Running   0          3m34s

将 --replicas 设置为比当前 Pod 副本数量更小的数字,系统将会杀掉一些运行中的 Pod,以实现应用集群缩容:

[root@master cha3]# kubectl scale deployment nginx-deployment --replicas=1
deployment.apps/nginx-deployment scaled
[root@master cha3]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-5c5f6c4496-br6jv   1/1     Running   0          4m18s

2、自动扩缩容机制

Kubernetes 从 1.1 版本开始,新增了名为 Horizontal Pod Autoscaler(HPA) 的控制器,用于实现基于 CPU使

用率进行自动 Pod 扩缩容的功能。HPA 控制器基于 Master 的 kube-controller-manager 服务启动参数

--horizontal-pod-autoscaler-sync-period 定义的探测周期(默认值为15s),周期性地监测目标 Pod 的资源

性能指标,并与 HPA 资源对象中的扩缩容条件进行对比,在满足条件时对 Pod 副本数量进行调整。

Kubernetes 在早期版本中,只能基于 Pod 的 CPU 使用率进行自动扩缩容操作,关于 CPU 使用率的数据来源于

Heapster 组件。Kubernetes 从 1.6 版本开始,引入了基于应用自定义性能指标的 HPA 机制,并在 1.9 版本之后

逐步成熟。本节对 Kubernetes 的 HPA 的原理和实践进行详细说明。

2.1 HPA的工作原理

Kubernetes 中的某个 Metrics Server( Heapster 或自定义 Metrics Server )持续采集所有 Pod 副本的指标数

据。HPA 控制器通过 Metrics Server 的 API ( Heapster 的 API 或聚合 API ) 获取这些数据,基于用户定义的扩缩

容规则进行计算,得到目标 Pod 副本数量。当目标 Pod 副本数量与当前副本数量不同时,HPA 控制器就向 Pod

的副本控制器( Deployment、RC 或 ReplicaSet )发起 scale 操作,调整 Pod 的副本数量,完成扩缩容操作。下图

描述了 HPA 体系中的关键组件和工作流程。

在这里插入图片描述

接下来首先对HPA能够管理的指标类型、扩缩容算法、HPA 对象的配置进行详细说明,然后通过一个完整的示例

对如何搭建和使用基于自定义指标的 HPA 体系进行说明。

2.2 指标的类型

Master 的 kube-controller-manager 服务持续监测目标 Pod 的某种性能指标,以计算是否需要调整副本数量。

目前 Kubernetes 支持的指标类型如下:

  • Pod 资源使用率:Pod 级别的性能指标,通常是一个比率值,例如 CPU 使用率。

  • Pod 自定义指标:Pod 级别的性能指标,通常是一个数值,例如接收的请求数量。

  • Object 自定义指标或外部自定义指标:通常是一个数值,需要容器应用以某种方式提供,例如通过

    HTTP URL "/metrics" 提供,或者使用外部服务提供的指标采集 URL。

Kubernetes 从 1.11 版本开始,弃用基于 Heapster 组件完成 Pod 的 CPU 使用率采集的机制,全面转向基于

Metrics Server 完成数据采集。Metrics Server 将采集到的 Pod 性能指标数据通过聚合API(Aggregated API) 如

metrics.k8s.iocustom.metrics.k8s.ioexternal.metrics.k8s.io提供给HPA控制器进行查询。

2.3 扩缩容算法详解

Autoscaler 控制器从聚合 API 获取到 Pod 性能指标数据之后,基于下面的算法计算出目标 Pod 副本数量,与当前

运行的 Pod 副本数量进行对比,决定是否需要进行扩缩容操作:

desiredReplicas=ceil[currentReplicas*(currentMetricValue/desiredMetricValue )]

即当前副本数×(当前指标值/期望的指标值),将结果向上取整。

以 CPU 请求数量为例,如果用户设置的期望指标值为 100m,当前实际使用的指标值为 200m,则计算得到期望

的 Pod 副本数量应为两个( 200/100=2 )。如果设置的期望指标值为 50m,计算结果为 0.5,则向上取整值为 1,

得到目标 Pod 副本数量应为 1 个。

当计算结果与 1 非常接近时,可以设置一个容忍度让系统不做扩缩容操作。容忍度通过

kube-controller-manager 服务的启动参数 --horizontal-pod-autoscaler-tolerance 进行设置,默认值

为 0.1(即10%),表示基于上述算法得到的结果在 [-10%-+10%] 区间内,即 [0.9-1.1],控制器都不会进行扩缩容操

作。

也可以将期望指标值( desiredMetricValue )设置为指标的平均值类型,例如 targetAverageValue

targetAverageUtilization,此时当前指标值(currentMetricValue)的算法为所有 Pod 副本当前指标值的总

和除以 Pod 副本数量得到的平均值。

此外,存在几种 Pod 异常的情况,如下所述:

  • Pod 正在被删除(设置了删除时间戳):将不会计入目标 Pod 副本数量。

  • Pod 的当前指标值无法获得:本次探测不会将这个 Pod 纳入目标 Pod 副本数量,后续的探测会被重新纳入计

    算范围。

  • 如果指标类型是 CPU 使用率,则对于正在启动但是还未达到 Ready 状态的 Pod,也暂时不会纳入目标副本数

    量范围。可以通过 kube-controller-manager 服务的启动参数

    --horizontal-pod-autoscaler-initial-readiness-delay 设置首次探测 Pod 是否 Ready 的延时时间,

    默认值为 30s 。另一个启动参数 --horizontal-pod-autoscaler-cpuinitialization-period 设置首次

    采集 Pod 的 CPU 使用率的延时时间。

在计算当前指标值/期望的指标值 (currentMetricValue / desiredMetricValue) 时将不会包括上述这些异常

Pod。

当存在缺失指标的 Pod 时,系统将更保守地重新计算平均值。系统会假设这些 Pod 在需要缩容(Scale Down)时消

耗了期望指标值的100%,在需要扩容(Scale Up)时消耗了期望指标值的0%,这样可以抑制潜在的扩缩容操作。

此外,如果存在未达到 Ready 状态的 Pod,并且系统原本会在不考虑缺失指标或 NotReady 的 Pod 情况下进行扩

展,则系统仍然会保守地假设这些 Pod 消耗期望指标值的0%,从而进一步抑制扩容操作。

如果在 HorizontalPodAutoscaler 中设置了多个指标,系统就会对每个指标都执行上面的算法,在全部结果中

以期望副本数的最大值为最终结果。如果这些指标中的任意一个都无法转换为期望的副本数(例如无法获取指标的

值),系统就会跳过扩缩容操作。

最后,在 HPA 控制器执行扩缩容操作之前,系统会记录扩缩容建议信息(Scale Recommendation)。控制器会在

操作时间窗口(时间范围可以配置)中考虑所有的建议信息,并从中选择得分最高的建议。这个值可通过

kube-controller-manager 服务的启动参数

--horizontal-pod-autoscaler-downscale-stabilization-window 进行配置,默

认值为5min。这个配置可以让系统更为平滑地进行缩容操作,从而消除短时间内指标值快速波动产生的影响。

2.4 HorizontalPodAutoscaler配置详解

Kubernetes 将 HorizontalPodAutoscaler 资源对象提供给用户来定义扩缩容的规则。

HorizontalPodAutoscaler 资源对象处于 Kubernetes 的 API 组 autoscaling 中,目前包括 v1 和 v2 两个版本。

其中 autoscaling/v1 仅支持基于 CPU 使用率的自动扩缩容,autoscaling/v2 则用于支持基于任意指标的自

动扩缩容配置,包括基于资源使用率、Pod 指标、其他指标等类型的指标数据,当前版本为

autoscaling/v2beta2

下面对 HorizontalPodAutoscaler 的配置和用法进行说明。

(1)基于 autoscaling/v1 版本的 HorizontalPodAutoscaler 配置,仅可以设置 CPU 使用率。

配置文件 038-php-apache.yaml 的内容为:

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 50

主要参数如下:

  • scaleTargetRef:目标作用对象,可以是 Deployment、ReplicationController 或 ReplicaSet。

  • targetCPUUtilizationPercentage:期望每个 Pod 的 CPU 使用率都为 50%,该使用率基于 Pod 设置的

    CPU Request 值进行计算,例如该值为 200m,那么系统将维持 Pod 的实际 CPU 使用值为 100m。

  • minReplicasmaxReplicas:Pod 副本数量的最小值和最大值,系统将在这个范围内进行自动扩缩容操

    作,并维持每个 Pod 的 CPU 使用率为 50%。

[root@master cha3]# kubectl create -f 038-php-apache.yaml
horizontalpodautoscaler.autoscaling/php-apache created
[root@master cha3]# kubectl get hpa
NAME         REFERENCE               TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   <unknown>/50%   1         10        0          17s

为了使用 autoscaling/v1 版本的 HorizontalPodAutoscaler,需要预先安装 Heapster 组件或 Metrics

Server,用于采集 Pod 的 CPU 使用率。Heapster 从 Kubernetes 1.11 版本开始进入弃用阶段,本节不再对

Heapster 进行详细说明,本节主要对基于自定义指标进行自动扩缩容的设置进行说明。

(2)基于 autoscaling/v2beta2 的 HorizontalPodAutoscaler 配置。

配置文件 039-php-apache.yaml 的内容为:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
  metadata:
    name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 50

主要参数如下。

  • scaleTargetRef:目标作用对象,可以是 Deployment、ReplicationController 或 ReplicaSet。

  • minReplicasmaxReplicas:Pod 副本数量的最小值和最大值,系统将在这个范围内进行自动扩缩容操

    作,并维持每个 Pod 的 CPU 使用率为 50%。

  • metrics:目标指标值,在 metrics 中通过参数 type 定义指标的类型。通过参数 target 定义相应的指标目标

    值,系统将在指标数据达到目标值时(考虑容忍度的区间)触发扩缩容操作。

[root@master cha3]# kubectl create -f 039-php-apache.yaml
horizontalpodautoscaler.autoscaling/php-apache created
[root@master cha3]# kubectl get hpa
NAME         REFERENCE               TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   <unknown>/50%   1         10        0          5s

等价写法,配置文件 040-php-apache.yaml 的内容为:

# 版本要修改
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
    name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        # 整合在一起的写法
        targetAverageUtilization: 50
[root@master cha3]# kubectl create -f 040-php-apache.yaml
horizontalpodautoscaler.autoscaling/php-apache created
[root@master cha3]# kubectl get hpa
NAME         REFERENCE               TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   <unknown>/50%   1         10        0          12s

可以将 metrics 中的 type(指标类型)设置为以下三种,可以设置一个或多个组合,如下所述。

(1)Resource:基于资源的指标值,可以设置的资源为 CPU 和内存。

(2)Pods:基于 Pod 的指标,系统将对全部 Pod 副本的指标值进行平均值计算。

(3)Object:基于某种资源对象(如Ingress)的指标或应用系统的任意自定义指标。

Resource 类型的指标可以设置 CPU 和内存。对于 CPU 使用率,在 target 参数中设置 averageUtilization 定义目

标平均 CPU 使用率。对于内存资源,在 target 参数中设置 AverageValue 定义目标平均内存使用值。指标数据可

以通过 API "metrics.k8s.io" 进行查询,要求预先启动 Metrics Server 服务。

target.type 的取值为:Utilization、AverageValue

target 对应的取值为:averageUtilization、averageValue

关于内存的配置,配置文件 041-php-apache.yaml 的内容为:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
    name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: memory
        target:
          type: AverageValue
          averageValue: 100Mi
[root@master cha3]# kubectl create -f 041-php-apache.yaml
horizontalpodautoscaler.autoscaling/php-apache created
[root@master cha3]# kubectl get hpa
NAME         REFERENCE               TARGETS           MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   <unknown>/100Mi   1         10        0          6s

等价写法,配置文件 `` 的内容为:

# 版本要修改
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
    name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        # 整合在一起的写法
        targetAverageValue: 100Mi
[root@master cha3]# kubectl create -f 042-php-apache.yaml
horizontalpodautoscaler.autoscaling/php-apache created
[root@master cha3]# kubectl get hpa
NAME         REFERENCE               TARGETS           MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   <unknown>/100Mi   1         10        0          13s

Pods 类型和 Object 类型都属于自定义指标类型,指标的数据通常需要搭建自定义 Metrics Server 和监控工具进

行采集和处理。指标数据可以通过 API "custom.metrics.k8s.io" 进行查询,要求预先启动自定义 Metrics

Server 服务。

类型为 Pods 的指标数据来源于 Pod 对象本身,其 target 指标类型只能使用 AverageValue。

配置文件 043-php-apache.yaml 的内容为:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
    name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10          
  metrics:
    - type: Pods
      pods:
        metric:
          name: packets-per-second
        target:
          type: AverageValue
          averageValue: 1k

其中,设置 Pod 的指标名为 packets-per-second,在目标指标平均值为 1000 时触发扩缩容操作。

[root@master cha3]# kubectl create -f 043-php-apache.yaml
horizontalpodautoscaler.autoscaling/php-apache created
[root@master cha3]# kubectl get hpa
NAME         REFERENCE               TARGETS        MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   <unknown>/1k   1         10        0          4s

类型为 Object 的指标数据来源于其他资源对象或任意自定义指标,其 target 指标类型可以使用 Value 或

AverageValue (根据Pod副本数计算平均值)进行设置。

下面对几种常见的自定义指标给出示例和说明:

例1,设置指标的名称为 requests-per-second,其值来源于 Ingress "main-route",将目标值(value)设置

2000,即在Ingress的每秒请求数量达到2000个时触发扩缩容操作。

配置文件 044-php-apache.yaml 的文件内容为:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
    name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10          
  metrics:
    - type: Object
      object:
        metric:
          name: requests-per-second
        describedObject:
          apiVersion: extensions/v1beta1
          kind: Ingress
          name: main-route
        target:
          type: Value
          value: 2k
[root@master cha3]# kubectl create -f 044-php-apache.yaml
horizontalpodautoscaler.autoscaling/php-apache created
[root@master cha3]# kubectl get hpa
NAME         REFERENCE               TARGETS        MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   <unknown>/2k   1         10        0          4s

例2,设置指标的名称为 http_requests,并且该资源对象具有标签 verb=GET,在指标平均值达到500时触发

扩缩容操作。

配置文件 045-php-apache.yaml 的内容为:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
    name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10          
  metrics:
    - type: Object
      object:
        metric:
          name: http_requests
          selector: {matchLabels: {verb: GET}}
        describedObject:
          apiVersion: extensions/v1beta1
          kind: Ingress
          name: main-route
        target:
          type: AverageValue
          value: 500
[root@master cha3]# kubectl create -f 045-php-apache.yaml
horizontalpodautoscaler.autoscaling/php-apache created
[root@master cha3]# kubectl get hpa
NAME         REFERENCE               TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   <unknown>/500   1         10        0          5s

还可以在同一个 HorizontalPodAutoscaler 资源对象中定义多个类型的指标,系统将针对每种类型的指标都计算

Pod 副本的目标数量,以最大值为准进行扩缩容操作。

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
    name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 50
    - type: Resource
      resource:
        name: memory
        target:
          type: AverageValue
          averageValue: 100Mi
    - type: Pods
      pods:
        metric:
          name: packets-per-second
        target:
          type: AverageValue
          averageValue: 1k
    - type: Object
      object:
        metric:
          name: requests-per-second
        describedObject:
          apiVersion: extensions/v1beta1
          kind: Ingress
          name: main-route
        target:
          type: Value
          value: 10k
[root@master cha3]# kubectl create -f 046-php-apache.yaml
horizontalpodautoscaler.autoscaling/php-apache created
[root@master cha3]# kubectl get hpa
NAME         REFERENCE               TARGETS                                     MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   <unknown>/100Mi, <unknown>/1k + 2 more...   1         10        0          4s

从 1.10 版本开始,Kubernetes 引入了对外部系统指标的支持。例如,用户使用了公有云服务商提供的消息服务

或外部负载均衡器,希望基于这些外部服务的性能指标(如消息服务的队列长度、负载均衡器的QPS)对自己部署在

Kubernetes 中的服务进行自动扩缩容操作。这时,就可以在 metrics 参数部分设置 typeExternal 来设置

自定义指标,然后就可以通过 API "external.metrics.k8s.io" 查询指标数据了。当然,这同样要求自定义

Metrics Server 服务已正常工作。

例3,设置指标的名称为 queue_messages_ready,具有 queue=worker_tasks 标签在目标指标平均值为30

触发自动扩缩容操作。

配置文件 047-php-apache.yaml 的文件内容为:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
    name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10          
  metrics:
    - type: External
      external:
        metric:
          name: queue_messages_ready
          selector: {matchLabels: {queue: worker_tasks}}
        target:
          type: AverageValue
          averageValue: 30
[root@master cha3]# kubectl create -f 047-php-apache.yaml
horizontalpodautoscaler.autoscaling/php-apache created
[root@master cha3]# kubectl get hpa
NAME         REFERENCE               TARGETS              MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   <unknown>/30 (avg)   1         10        0          4s

在使用外部服务的指标时,要安装、部署能够对接到 Kubernetes HPA 模型的监控系统,并且完全了解监控系统

采集这些指标的机制,后续的自动扩缩容操作才能完成。

Kubernetes 推荐尽量使用 type 为 Object 的 HPA 配置方式,这可以通过使用 Operator 模式,将外部指标通过

CRD(自定义资源)定义为API资源对象来实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/777349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java代码审计1之环境搭建

文章目录 1、安装jdk2、配置tomcat3、配置maven3.1、配置环境变量3.2、配置源和maven配置文件 4、idea4.1、配置maven4.2、新建web项目4.3、遇到的问题(弹出404页面) 之前的文章&#xff0c; https://blog.csdn.net/weixin_43970718/article/details/121929434 https://blog.…

(全网最详细!)mysql、redis 、RabbitMQ只能本机访问,怎么改?

如果只能本机访问&#xff0c;怎么改? 一、mysql - 改my.ini 刷脚本 bind-address0.0.0.0 然后重启一下mysql服务 任务管理器-关掉mysql 搜索 计算机管理-重启mysql服务 然后 打开查询&#xff0c;并选择mysql数据&#xff0c;输入这个sql语句&#xff0c;点击运行 sele…

POC!VMWare RCE CVE-2023-20887

漏洞简介 VMWare Aria Operations for Networks (vRealize Network Insight) 在通过 Apache Thrift RPC 接口接受用户输入时容易受到命令注入的攻击。此漏洞允许远程未经身份验证的攻击者以 root 用户身份在底层操作系统上执行任意命令。RPC 接口受可以绕过的反向代理保护。VM…

vue3+vue-router4:报错Uncaught (in promise) Error: Invalid navigation guard

报错图示&#xff1a; Error: Invalid navigation guard Uncaught (in promise) Error: Invalid navigation guard 错误影响描述&#xff1a; 配置开发、测试、生产时候&#xff0c;因为是公众号&#xff0c;所以想在开发环境下免鉴权&#xff0c;不走微信获取openid接口&a…

PHP要怎么学--【思维导图知识范围】

强撸项目 总目录在此 专辑工作量PHP登陆/php登录–【强撸项目】难度★✫✰✰✰PHP注册/登录/发邮件–【强撸项目】★★★✫✰PHP在线相册–【强撸项目】★★★★✫–【强撸项目】––【强撸项目】––––– 文章目录 本系列校训学习资源的选择环境的问题本人推荐 PHP视频的知…

C语言-分支语句和循环

目录 【1】字符输入输出 【2】C语言下的垃圾字符回收 【3】分支语句 【4】循环 练习&#xff1a; 【1】字符输入输出 按字符的输入输出 int getchar(void); 功能&#xff1a;从终端输入一个字符 参数&#xff1a;无 返回值&#xff1a;输入字符的ASCII值int putchar(int…

pandas常用方法

一、提要 pandas对于处理表格类数据来说是非常方便的模块&#xff0c;同时也是做数据分析绕不开的第三方库。这里将工作中常用到的各种处理方法记录下来二、常用方法 接下来的以 df 表示我们要处理的 dataframe 表格数据 1、取值 # 循环遍历取值 for i in range(len(df)):y…

Spring Cloud之Gateway网关应⽤

使⽤⽹关对静态化微服务进⾏代理&#xff08;添加在它的上游&#xff0c;相当于隐藏了具体微服务的信息&#xff0c;对外暴露的是⽹关&#xff09;。 1. 右键⽗⼯程【 yx-parent 】选择【 New 】 - 【 Module 】选项&#xff0c;然后选择创建【 Maven 】类型项⽬&#xff08;不…

以高质量产业载体为底色,绘就珠海高新区产业发展新图景

【作者】珠海高新招商 “珠海高新招商”以招商运营为核心&#xff0c;聚焦珠海工业园区、珠海5.0产业园等招商引资工作&#xff0c;依托专业的招商团队和丰富的创新资源&#xff0c;为企业提供产业园入驻、平台搭建、产业政策咨询、科技服务等全流程专业服务。推动高新区招商引…

17 数组动态初始化

动态初始化&#xff1a;初始化时只指定数组长度&#xff0c;由系统为数组分配初始值。 格式&#xff1a;数据类型[] 数组名 new 数据类型[数组长度] package demo;public class Demo11 {public static void main(String[] args) {// 动态初始化数组&#xff1a;数据类型[] 数…

日撸java三百行day77-80

文章目录 说明GUI1. GUI 总体布局2. GUI 代码理解2.1 对话框相关控件2.1.1 ApplicationShowdown.java&#xff08;关闭应用程序&#xff09;2.1.2 DialogCloser.java&#xff08;关闭对话框&#xff09;2.1.3 ErrorDialog.java&#xff08;显示错误信息&#xff09;2.1.4 HelpD…

深度学习模型量化、剪枝、压缩

fp16是指采用2字节(16位)进行编码存储的一种数据类型&#xff1b; fp32是指采用4字节(32位)&#xff1b; fp16和fp32相比对训练的优化&#xff1a; 1.内存占用减少&#xff1a;应用fp16内存占用比原来更小&#xff0c;可以设置更大的batch_size 2.加速计算&#xff1a;加速…

CentOS5678 repo源 阿里云/腾讯云开源镜像站 repo 地址

CentOS5678 repo 地址 阿里云开源镜像站 https://mirrors.aliyun.com/repo/ CentOS5678 repo 地址 腾讯云开源镜像站 http://mirrors.cloud.tencent.com/repo/ CentOS-5.repo https://mirrors.aliyun.com/repo/Centos-5.repo [base] nameCentOS-$releasever - Base - mirror…

DuDuTalk :做4G智能工牌领域标杆品牌,用语音智能构建完美沟通

数字经济高速发展&#xff0c;AI 成为数字经济时代的核心生产力&#xff0c;驱动数字经济纵深发展&#xff0c;在此情境下&#xff0c;作为AI基石的语音数据价值也在不断释放。企业纷纷加强对客服、营销等服务和销售资源部门的投入&#xff0c;试图从语音数据入手&#xff0c;利…

如何使用windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】

文章目录 windows搭建WebDAV服务&#xff0c;并内网穿透公网访问【无公网IP】1. 安装IIS必要WebDav组件2. 客户端测试3. 使用cpolar内网穿透&#xff0c;将WebDav服务暴露在公网3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户…

NodeJS实现支付宝沙箱支付 ②③

文章目录 前言版权声明Alipay SDK 沙箱环境简介Node环境要求沙箱环境配置下载所需模块准备前端静态页面以及Node服务器文件夹规范AlipaySdk 配置准备AlipaySdk 代码演示 Alipay实例化 ~ alipay.sdk 文件 AlipayForm ~ alipayForm文件 AlipayFormStatus ~ alipayForm文件 …

deeplabv3+源码之慢慢解析 第四章network文件夹(1)backbone文件夹(a1)hrnetv2.py--4个函数和可执行代码

系列文章目录&#xff08;更新中&#xff09; 第一章deeplabv3源码之慢慢解析 根目录(1)main.py–get_argparser函数 第一章deeplabv3源码之慢慢解析 根目录(2)main.py–get_dataset函数 第一章deeplabv3源码之慢慢解析 根目录(3)main.py–validate函数 第一章deeplabv3源码之慢…

使用NRF52840 USB Dongle进行Wireshark蓝牙抓包

一、搭建软硬件环境 1.1、准备NRF52840 USB Dongle一个&#xff1a; 1.2、下载Wireshark软件 https://2.na.dl.wireshark.org/win64/Wireshark-win64-4.0.7.exe 1.3、下载Nodic官方解析工具包 nRF Sniffer for Bluetooth LE - Downloads - nordicsemi.com 1.4、下载Python P…

中文数据下载

研究AI离不开数据&#xff0c;数据库可以说是AI的半壁天下。有链接的数据库下载是很nice的。 语音数据集整理 目录 1.Mozilla Common Voice. 2 2.翻译和口语音频的大型数据库Tatoeba. 2 3.VOiCES Dataset 3 4. LibriSpeech. 4 5.2000 HUB5 English&#xff1a;... 4 6.…

Java文件流和网络流的原理以及流解析过程

流我们可以理解为水流&#xff0c;流的传输就相当于在水管里传输&#xff0c;本篇博客主要介绍流的原理和解析过程&#xff0c;学疏才浅&#xff0c;抛砖引玉&#xff0c;大佬勿喷。 文件流 假设我们收到了一个以Unicode编码的文件流&#xff0c;对于该文件流所表示的内容我们…