kubernetes服务自动伸缩
当设置 --kubelet-insecure-tls 时,metrics-server 或其他组件不会验证 kubelet 提供的证书是否有效。查看 kube-system 命名空间中所有 Pod 的资源使用情况(CPU 和内存)表示节点的 CPU 使用率(相对于节点的总 CPU 资源)。表示节点当前使用的 CPU 资源总量(以核心为单位)。表示节点的内存使用率(相对于节点的总内存资源)。表示节点
HPA:Pod水平自动伸缩(pod副本伸缩) 动态增加或减少 Pod 的副本数量
VPA:Pod垂直自动伸缩(pod资源伸缩) 动态调整 Pod 的资源请求和限制
一、Kubernetes Pod水平自动伸缩 HPA
HPA,全称 Horizontal Pod Autoscaler, 可以基于 CPU 利用率自动扩缩
ReplicationController、Deployment 和 ReplicaSet 中的 Pod 数量。 除了 CPU 利用率,也可以基于其他应程序提供的自定义度量指标来执行自动扩缩。
Pod 自动扩缩不适用于无法扩缩的对象,比如 DaemonSet。
Pod 水平自动扩缩特性由 Kubernetes API 资源和控制器实现。资源决定了控制器的行为。
控制器会周期性的调整副本控制器或 Deployment 中的副本数量,以使得 Pod 的平均 CPU 利用率与用户所设定的目标值匹配。
HPA 定期检查内存和 CPU 等指标,自动调整 Deployment 中的副本数;
实际生产中,广泛使用这四类指标:
1、Resource metrics - CPU和内存利用率指标
2、Pod metrics - 例如网络利用率和流量
3、Object metrics - 特定对象的指标,比如Ingress, 可以按每秒使用请求数来扩展容器
4、Custom metrics - 自定义监控,比如通过定义服务响应时间,当响应时间达到一定指标时自动扩容
实验环境:
k8s-master01:192.168.10.11
k8s-worker01:192.168.10.12
k8s-worker02:192.168.10.13
[root@master01 ~]# wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml
也可以离线部署:
- 复制high-availability-1.21+.yaml到master01主机

- 复制metrics-server.tar镜像备份文件到所有node节点,并导入镜像库

[root@worker0x ~]# docker load -i metrics-server.tar
- 禁用证书验证
kubelet 证书需要由集群证书颁发机构签名,或者通过向 Metrics Server 传递参数 --kubelet-insecure-tls 来禁用证书验证
[root@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[华王1] #添加此行内容
151 image: registry.k8s.io/metrics-server/metrics-server:v0.6.4
......

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

[root@master01 ~]# kubectl get pods -n kube-system

动态显示节点进程信息
[root@master01 ~]# kubectl top nodes[华王2]

查看 kube-system 命名空间中所有 Pod 的资源使用情况(CPU 和内存)
[root@master01 ~]# kubectl top pods -n kube-system

- 部署一个服务
[root@master01 ~]# mkdir hpa
[root@master01 ~]# cd hpa
[root@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:1.20
imagePullPolicy: IfNotPresent
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@master01 hpa]# kubectl apply -f 01-nginx.yaml
[root@master01 hpa]# kubectl get pods

- 创建HPA对象
这是一个 HorizontalPodAutoscaler (HPA) 对象的配置,它将控制Deployment "nginx" 的副本数量。当 CPU 使用率超过 50% 时,HPA 将自动增加 Pod 的副本数量,最高不超过 10 个。
[root@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
命令行解释:
spec:
scaleTargetRef: # 指向我们要自动伸缩的目标资源
apiVersion: apps/v1 # 目标资源的 API 版本
kind: Deployment # 目标资源的类型
name: nginx # 目标资源的名字
minReplicas: 1 # Pod 的最小副本数
maxReplicas: 10 # Pod 的最大副本数
metrics: # 定义用于触发自动伸缩操作的指标
- type: Resource # 度量类型为资源度量
resource:
name: cpu # 度量 CPU 使用率
target: # 设置目标值以触发自动伸缩
type: Utilization # 目标类型是利用率
averageUtilization: 50 # 各Pod CPU平均利用率达到或超过50%
[root@master01 hpa]# kubectl apply -f 02-nginx-hpa.yaml
查看资源状态
[root@master01 hpa]# kubectl get hpa

[root@master01 hpa]# yum -y install httpd-tools
[root@master01 hpa]# kubectl get svc

[root@master01 hpa]# ab -c 1000 -n 100000000 http://192.168.10.11:32562/
打开另一个终端查看
[root@master01 ~]# kubectl get pods

查看资源状态
[root@master01 ~]# kubectl get hpa

终止压力测试查看(等一会看,耐心等待。。。)
[root@master01 hpa]# kubectl get hpa

[root@master01 ~]# kubectl get pods

CPU 利用率已经降到 0,所以 HPA 将自动缩减副本数量至 1。
因为在创建HPA时,指定了副本数范围,这里是minReplicas: 1,maxReplicas: 10。
[华王1]禁用证书验证:当设置 --kubelet-insecure-tls 时,metrics-server 或其他组件不会验证 kubelet 提供的证书是否有效。这在某些情况下(例如测试环境或证书配置不完整时)可能会有用
- [华王2]NAME:
-
- 表示节点的名称。
- 在这个例子中,有三个节点:master01、worker01 和 worker02。
- CPU(cores):
-
- 表示节点当前使用的 CPU 资源总量(以核心为单位)。
- master01 使用了 506m(即 0.506 核心)。
- worker01 使用了 292m(即 0.292 核心)。
- worker02 使用了 290m(即 0.290 核心)。
- CPU%:
-
- 表示节点的 CPU 使用率(相对于节点的总 CPU 资源)。
- master01 的 CPU 使用率为 12%。
- worker01 和 worker02 的 CPU 使用率均为 7%。
- MEMORY(bytes):
-
- 表示节点当前使用的内存总量(以字节为单位)。
- master01 使用了 1668Mi(即 1668 MiB)。
- worker01 使用了 1467Mi。
- worker02 使用了 1352Mi。
- MEMORY%:
-
- 表示节点的内存使用率(相对于节点的总内存资源)。
- master01 的内存使用率为 61%。
- worker01 的内存使用率为 53%。
- worker02 的内存使用率为 49%。
更多推荐

所有评论(0)