k8s hpa 弹性伸缩
HPA控制器介绍
当系统资源过高的时候,我们可以使用如下命令来实现 Pod 的扩缩容功能
$ kubectl -n dev scale deployment nginx-deployment --replicas=2
但是这个过程是手动操作的。在实际项目中,我们需要做到是的是一个自动化感知并自动扩容的操作。Kubernetes 也为提供了这样的一个资源对象:Horizontal Pod Autoscaling(Pod 水平自动伸缩),简称HPA
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.4.4/components.yaml
修改args参数:
...
130 containers:
131 - args:
132 - --cert-dir=/tmp
133 - --secure-port=4443
134 - --kubelet-insecure-tls
135 - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
136 - --kubelet-use-node-status-port
137 image: willdockerhub/metrics-server:v0.4.4
138 imagePullPolicy: IfNotPresent
...
完整配置Deploy配置
apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx name: nginx-deployment # dp名称 namespace: dev #ns spec: replicas: 1 #副本 selector: #选择标签 matchLabels: #标签匹配 app: nginx #匹配nginx template: metadata: labels: app: nginx spec: containers: - image::180/dev/esl/nginx:lcdEsl-4.0.3-lcd1.2.9 name: nginx ports: - containerPort: 81 resources: requests: memory: 100Mi cpu: 50m limits: memory: 500Mi cpu: 100m
执行安装:
$ kubectl apply -f components.yaml
$ kubectl -n kube-system get pods
$ kubectl top nodes
基于CPU和内存的动态伸缩
Deployment对象必须配置requests的参数,不然无法获取监控数据,也无法通过HPA进行动态伸缩
验证:
$ yum -y install httpd-tools
$ kubectl -n luffy get svc myblog
myblog ClusterIP 10.104.245.225 <none> 80/TCP 6d18h
# 为了更快看到效果,先调整副本数为1
$ kubectl -n dev scale deploy nginx-deployment --replicas=1
# 模拟1000个用户并发访问页面10万次
$ ab -n 100000 -c 1000 http://10.104.245.225:81
$ kubectl get hpa
$ kubectl -n dev get pods