HPA在k8s中也由一个controller控制,controller会间隔循环HPA,检查每个HPA中监控的指标是否触发伸缩条件,默认的间隔时间为15s。一旦触发伸缩条件,controller会向k8s发送请求,修改伸缩对象(statefulSet、replicaController、replicaSet)子对象scale中控制pod数量的字段。k8s响应请求,修改scale结构体,然后会刷新一次伸缩对象的pod数量。伸缩对象被修改后,自然会通过list/watch机制增加或减少pod数量,达到动态伸缩的目的。
概念:用来收集K8s集群中的资源使用情况。每15秒进行一次数据采集(可以通过-horizontal-pod-autoscaler-sync-period修改查询metrics的资源使用情况),占用资源少,每个Node占用1 mili core的CPU和2 MB内存,目前只能对CPU和内存进行监控
下载yaml文件:wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.1/components.yaml
修改yaml文件配置:vi components.yaml
1. 注释- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
在底下添加
- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP # node address类型的优先权设置
- --kubelet-insecure-tls # 取消安全验证
2. 注释image: registry.k8s.io/metrics-server/metrics-server:v0.6.3
在底下添加
image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.1
部署:kubectl apply -f components.yaml
查看pod:kubectl get pod -n kube-system

查看资源使用情况:
1)kubectl top node

2)kubectl top pod -n kube-system
ps:查看全部空间的命令为kubectl top pod --all-namespaces

创建yaml:vi /opt/pod-controller.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: pod-controller
labels:
controller: deploy
spec:
replicas: 1
selector:
matchLabels:
app: nginx-pod
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
resources: # 要设置每个容器最低使用的CPU,不然测试不出效果
requests:
cpu: "0.1"
创建pod:kubectl apply -f /opt/pod-controller.yaml
暴露端口:kubectl expose deployment pod-controller --name=nginx-service --type=NodePort --port=80 --target-port=80
查看端口:kubectl get svc

访问:http://192.168.248.11:31409/
新建pod-hpa.yaml:vi /opt/pod-hpa.yaml
ps:也可以直接设置控制器的资源限制:kubectl autoscale deploy 控制器 --cpu-percent=3 --min=1 --max=10
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: pod-hpa # hpa的名称
labels:
controller: hpa # 给hpa打标签
spec:
minReplicas: 1 # 缩容最小Pod数量
maxReplicas: 10 # 扩容最大Pod数量
targetCPUUtilizationPercentage: 3 # 为了便于测试,这里设置CPU使用率警戒线为3%
scaleTargetRef: # 指定要控制的Deployment的信息
apiVersion: apps/v1
kind: Deployment
name: pod-controller
创建pod:kubectl apply -f /opt/pod-hpa.yaml
查看HPA: kubectl get hpa

查看服务pod个数:kubectl get deploy pod-controller -o wide

使用postman测压工具不断访问:http://192.168.248.11:31409/
