文章目录
- 一、k8s弹性伸缩类型
- 二、HPA原理
- 三、metrics-server插件
- 四、创建nginx提供负载测试
- 五、部署HPA
master操作即可
一、k8s弹性伸缩类型
- Cluster-Autoscale: 集群容量(node数量)自动伸缩,跟自动化部署相关的,依赖iaas的弹性伸缩,主要用于虚拟机容器集群
- Vertical Pod Autoscaler: 工作负载Pod垂直(资源配置)自动伸缩,如自动计算或调整deployment的Pod模板limit/request,依赖业务历史负载指标
- Horizontal-Pod-Autoscaler: 工作负载Pod水平自动伸缩,如自动scale deployment的replicas,依赖业务实时负载指标
二、HPA原理
HPA在k8s中也由一个controller控制,controller会间隔循环HPA,检查每个HPA中监控的指标是否触发伸缩条件,默认的间隔时间为15s。一旦触发伸缩条件,controller会向k8s发送请求,修改伸缩对象(statefulSet、replicaController、replicaSet)子对象scale中控制pod数量的字段。k8s响应请求,修改scale结构体,然后会刷新一次伸缩对象的pod数量。伸缩对象被修改后,自然会通过list/watch机制增加或减少pod数量,达到动态伸缩的目的。
三、metrics-server插件
-
概念:用来收集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
四、创建nginx提供负载测试
-
创建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/
五、部署HPA
-
新建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/