kubernetes服务自动伸缩HPA、VPA

目录

一、Kubernetes Pod水平自动伸缩 HPA(常用)

1.1 HPA简介

1.2 metircs-server部署(k8s内用来监控资源)

1.3 HPA演示示例

1.3.1 部署一个服务

1.3.2 创建HPA对象

1.3.3 执行压测

二、Kubernetes Pod垂直自动伸缩 VPA(不常用,知道即可)


一、Kubernetes Pod水平自动伸缩 HPA(常用)

1.1 HPA简介

HPA,全称 Horizontal Pod Autoscaler, 可以基于 CPU 利用率自动扩缩 ReplicationController、Deployment 和 ReplicaSet 中的 Pod 数量。 除了 CPU 利用率,也可以基于其他应程序提供的自定义度量指标来执行自动横向扩缩。

实际生产中,广泛使用这四类指标:

1、Resource metrics - CPU核内存利用率指标

2、Pod metrics - 例如网络利用率和流量

3、Object metrics - 特定对象的指标,比如Ingress, 可以按每秒使用请求数来扩展容器

4、Custom metrics - 自定义监控,比如通过定义服务响应时间,当响应时间达到一定指标时自动扩容

1.2 metircs-server部署(k8s内用来监控资源)

github上搜索即可找到

或者:

[root@k8s-master01 ~]# wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml

kubelet 证书需要由集群证书颁发机构签名(或者通过向 Metrics Server 传递参数 --kubelet-insecure-tls 来禁用证书验证)。

[root@k8s-master01 ~]# vim high-availability-1.21+.yaml
......
143       containers:
144       - args:
145         - --cert-dir=/tmp
146         - --secure-port=4443
147         - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
148         - --kubelet-use-node-status-port
149         - --metric-resolution=15s
150         - --kubelet-insecure-tls 添加此行内容
151         image: registry.k8s.io/metrics-server/metrics-server:v0.6.4

[root@k8s-master01 ~]# kubectl apply -f high-availability-1.21+.yaml

[root@k8s-master01 ~]# kubectl get pods -n kube-system
NAME                                       READY   STATUS    RESTARTS      AGE
......
metrics-server-6bc5bbd65c-c8llz            1/1     Running   0             7m45s
metrics-server-6bc5bbd65c-pz6mc            1/1     Running   0             7m45s

[root@k8s-master01 ~]# kubectl top nodes
NAME           CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
k8s-master01   203m         2%     1902Mi          24%
k8s-master02   156m         1%     1690Mi          21%
k8s-master03   222m         2%     2477Mi          31%
k8s-worker01   100m         1%     1466Mi          18%
k8s-worker02   99m          1%     1413Mi          18%

1.3 HPA演示示例

1.3.1 部署一个服务

[root@k8s-master01 hpa]# vim 01-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        resources:
          requests:
            cpu: 200m
            memory: 100Mi
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: nginx

[root@k8s-master01 hpa]# kubectl apply -f 01-nginx.yaml
deployment.apps/nginx created
service/nginx created

1.3.2 创建HPA对象

这是一个 HorizontalPodAutoscaler (HPA) 对象的配置,它将控制 Deployment "nginx" 的副本数量。当 CPU 使用率超过 50% 时,HPA 将自动增加 Pod 的副本数量,最高不超过 10 个。

[root@k8s-master01 hpa]# vim 02-nginx-hpa.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

解释:

apiVersion: autoscaling/v2

- `apiVersion` 表示所使用的 API 版本。在这个例子中,我们使用的是 `autoscaling/v2beta2` 版本,这是 Kubernetes 的 HorizontalPodAutoscaler 资源对象的版本。


kind: HorizontalPodAutoscaler

- `kind` 定义了这个资源对象的类型。在这里,它是 `HorizontalPodAutoscaler`。


metadata:
  name: nginx
  namespace: hpa

- `metadata` 包含与资源对象相关的元数据。在这个例子中,`name` 是资源对象的名字(这里是 "nginx"),而 `namespace` 指定了此资源所在的命名空间(这里是 "hpa")。


spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx

- `spec` 描述了要配置的具体细节。在这个部分,`scaleTargetRef` 指向我们要自动伸缩的目标资源。
  - `apiVersion`: 目标资源的 API 版本,这里是 `apps/v1`。
  - `kind`: 目标资源的类型,这里是 `Deployment`。
  - `name`: 目标资源的名字,这里是 "nginx"。


  minReplicas: 1
  maxReplicas: 10

- `minReplicas` 和 `maxReplicas` 定义了 Pod 的最小和最大副本数。在此例中,HPA 将确保至少有一个副本在运行,并且最多不会超过 10 个副本。


  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

- `metrics` 部分定义了用于触发自动伸缩操作的指标。在这个例子中,我们只有一个指标。
  - `- type: Resource`: 这里指定度量类型为资源度量。
  - `resource`: 定义了资源度量的详细信息。
    - `name: cpu`: 我们正在度量 CPU 使用率。
    - `target`: 设置目标值以触发自动伸缩。
      - `type: Utilization`: 目标类型是利用率。
      - `averageUtilization: 50`: 当平均 CPU 利用率达到或超过 50% 时,将触发自动伸缩操作。

[root@k8s-master01 hpa]# kubectl apply -f 02-nginx-hpa.yaml

1.3.3 执行压测

[root@k8s-master01 hpa]# yum -y install httpd-tools

[root@k8s-master01 hpa]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        6h47m
nginx        NodePort    10.100.32.126   <none>        80:30770/TCP   20m

[root@k8s-master01 hpa]# ab -c 1000 -n 1000000000 http://192.168.10.10:30770/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>

注意10.10是主机ip,然后加nodeport端口

[root@k8s-master01 ~]# kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
nginx-f9f76bb6f-8fhr5   1/1     Running   0          76s
nginx-f9f76bb6f-dzv7k   1/1     Running   0          91s
nginx-f9f76bb6f-gr55m   1/1     Running   0          91s
nginx-f9f76bb6f-mnhdv   1/1     Running   0          106s
nginx-f9f76bb6f-nm49b   1/1     Running   0          76s
nginx-f9f76bb6f-pmpwr   1/1     Running   0          106s
nginx-f9f76bb6f-qp8hd   1/1     Running   0          91s
nginx-f9f76bb6f-qwjpt   1/1     Running   0          106s
nginx-f9f76bb6f-wj5xj   1/1     Running   0          91s
nginx-f9f76bb6f-zpsdd   1/1     Running   0          26m

可以看到,当压力上来的时候,HPA生效,将副本调至10个。

二、Kubernetes Pod垂直自动伸缩 VPA(不常用,知道即可)

VPA,全称 Vertical Pod Autoscaler,即垂直 Pod 自动纵向扩缩容,它根据容器资源使用率自动设置 CPU 和 内存 的requests,从而允许在节点上进行适当的调度,以便为每个 Pod 提供适当的资源。 它既可以缩小过度请求资源的容器,也可以根据其使用情况随时提升资源不足的容量。有些时候无法通过增加 Pod 数来扩容,比如数据库。这时候可以通过 VPA 增加 Pod 使用资源的大小,比如调整 Pod 的 CPU 和内存,进而调整Pod资源使用。

使用VPA的优缺点:

优点

Pod 资源用其所需,所以集群节点使用效率高;

Pod 会被安排到具有适当可用资源的节点上;

不必运行基准测试任务来确定 CPU 和内存请求的合适值;

VPA 可以随时调整 CPU 和内存请求,无需人为操作,因此可以减少维护时间;

缺点

不能与HPA(Horizontal Pod Autoscaler )一起使用;

而且它的纵向升级,实际上是生成一个新配置的Pod,然后把旧的干掉,所以不常用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值