K8s:HPA控制器
HPA控制器
1、作用
实现层面:
node级别的资源伸缩、需要配合公有云。(node伸缩:https://github.com/kubernetes/autoscaler)
pod级别
功能及作用:
1、自动对pod副本的弹性伸
2、提高响应时间
3、pod数量动态、不需要人工干预(根据业务数量扩容:业务高峰期自动扩容、低峰期自动缩容)
4、
好处:
降低业低峰期的消耗、降资源成本、云主机资源成本(删除pod或者node)。
支持类型:Statefulset、deployment、ReplicaSet、Replication Controller 、Replica set
不支持流行:Daemonset
2、伸缩配置
伸缩类型
HPA水平:横向扩展、增加pod副本
VPA垂直:对pod资源利用率调整对单个pod的资源限制
Cluster Autoscaler CA 集群扩容
定义伸缩规则
根据伸缩配置信息定义规则:
间隔时间:查看pod的cpu和内存使用指标是多少
缩容间隔周期:默认五分钟
HPA同步副本数的生命周期
初始化pod延迟时间、默认五分钟
3、扩容公式
三个pod
CPU:50%的规则扩容
3个相加/3=80/50=1.6-1=0.6 >0.1
扩容:0.6*3=1.8 (浮点数就取整、大于当前一位的浮点数)
4、部署
#安装:(官方下载)
https://github.com/kubernetes-sigs/metrics-server/releases
1.26.3 #k8s版本
v0.6.3 #metrics-server
###1. 下载最新版 的配置文件包
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.3/components.yaml
###2、拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.3
###3、修改配置文件,更改image配置
修改yaml文件的deployment部分,添加- --kubelet-insecure-tls,然后重新apply yaml文件
containers:
- args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --metric-resolution=15s
- --kubelet-insecure-tls #增加证书忽略
image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.3 #修改image为阿里云下载的这个
###4、应用下配置文件
kubectl apply -f components.yaml
###5、最后查看
kubectl get pods -n kube-system
5、编写伸缩配置文件yaml
###创建hpa控制器
1、定义api
2、定义类型(HAP控制器)
3、定义名称(HPA控制器必须和pod在同一namespace)(对哪些pod生效、就必须在一个namespace)
4、类型、对什么类型的控制器伸缩(必须指定deployment)
yaml文件
###1、先创建tomcat的pod(镜像拉取从私有仓库)
###2、然后创建hpa控制器(hpa控制器优先级高于deployment控制器)
magedu-tomcat-app1-deployment ###pod的控制器名称
###1111111
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
labels:
app: magedu-tomcat-app1-deployment-label
name: magedu-tomcat-app1-deployment ###deployment控制器
namespace: magedu
spec:
replicas: 3 ###副本数量
selector:
matchLabels:
app: magedu-tomcat-app1-selector
template:
metadata:
labels:
app: magedu-tomcat-app1-selector
spec:
containers:
- name: magedu-tomcat-app1-container
####下面是两个容器(一个tomcat、一个压力测试的)
image: registry.cn-hangzhou.aliyuncs.com/docker-jigaobo/tomcat:7.0.93-alpine
#image: registry.cn-hangzhou.aliyuncs.com/docker-jigaobo/docker-stress-ng
#args: ["--vm", "2", "--vm-bytes", "256M"]
##command: ["/apps/tomcat/bin/run_tomcat.sh"]
imagePullPolicy: IfNotPresent
##imagePullPolicy: Always
ports:
- containerPort: 8080
protocol: TCP
name: http
env:
- name: "password"
value: "123456"
- name: "age"
value: "18"
resources:
limits:
cpu: 1
memory: "512Mi"
requests:
cpu: 500m
memory: "512Mi"
---
kind: Service
apiVersion: v1
metadata:
labels:
app: magedu-tomcat-app1-service-label
name: magedu-tomcat-app1-service
namespace: magedu
spec:
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: 8080
#nodePort: 40003
selector:
app: magedu-tomcat-app1-selector
###222
#apiVersion: autoscaling/v2beta1
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
namespace: magedu
name: magedu-tomcat-app1-deployment
labels:
app: magedu-tomcat-app1
version: v2beta1
spec:
scaleTargetRef:
apiVersion: apps/v1
#apiVersion: extensions/v1beta1
kind: Deployment ####hpa扩容的资源类型
name: magedu-tomcat-app1-deployment
minReplicas: 4 ###hap最小数量(权重高于deployment控制器)
maxReplicas: 10 ###扩容的最大数量
targetCPUUtilizationPercentage: 60
#metrics: ###根据Prometheus指标实现hpa
#- type: Resource
# resource:
# name: cpu
# targetAverageUtilization: 60
#- type: Resource
# resource:
# name: memory
测试伸缩到10个pod
修改tomcat镜像换成cpu飙升镜像
然后使用kubectl top pod -n magedu (注意:有的pod会pending状态、内存使用完了)
最后修改副本数量为5个、来控制、把压力测试工具去掉。
注意:内存被占用完成之后可能node节点会出问题、kubelet可能都没内存了(重启节点、然后启动kubelet)

6、查看
查看命令
kubectl get hpa -n myserver
注意:hpa控制器优先级高于deployment控制器(副本数量按照hpa控制器)
查看
kubectl get deployments.apps -n magedu pod-name
kubectl describe deployments.apps -n magedu pod-name
查看资源
kubectl api-resources | grep me
kubectl api-versions

浙公网安备 33010602011771号