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
posted @ 2022-02-25 12:20  地铁昌平线  阅读(77)  评论(0编辑  收藏  举报