Pod 自动扩缩容(HPA)


环境CentOS7

[root@k8s-master deploy]# cat /etc/hosts
192.168.41.191  k8s-master
192.168.41.192  k8s-node1
192.168.41.193  k8s-node2
[root@k8s-master deploy]# kubectl get node
NAME         STATUS   ROLES                  AGE     VERSION
k8s-master   Ready    control-plane,master   12d     v1.21.0
k8s-node1    Ready    <none>                 12d     v1.22.1
k8s-node2    Ready    <none>                 4h26m   v1.21.0

HPA

查询指定的资源(RC或者Deployment)中Pod的资源使用率,并且与创建时设定的值和指标做对比,从而实现自动伸缩的功能。

安装

K8S资源指标获取工具:metrics-server,提供每个hpa所需要的当前值,从每个pod的kubelet中拿到pod所使资源量。
下载yaml文件wget失败

wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

#修改镜像地址,默认为k8s.gcr.io,国内无法拉取,添加--kubelet-insecure-tls参数
131       - args:
132         - --cert-dir=/tmp
133         - --secure-port=4443	#pod监控1000以下端口需要root权限
134         - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
135         - --kubelet-use-node-status-port
136         - --kubelet-insecure-tls	#取消检测
137         image: bitnami/metrics-server:0.4.1
---
        name: metrics-server
        ports:
        - containerPort: 4443
---

kubectl apply -f components.yam

#测试,kubectl top nodes
[root@k8s-master metrics-server]# kubectl top nodes
NAME         CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
k8s-master   465m         23%    1990Mi          54%
k8s-node1    439m         21%    715Mi           38%
k8s-node2    145m         7%     773Mi           41%

#新建Pod测试

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hpa-nginx-deploy
  labels:
    app: nginx-demo
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: 192.168.41.191:5000/nginx:v1
        name: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        resources:	#资源限制
          limits:		#limits上限
            cpu: 400m
          requests:
            cpu: 200m

---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: nginx-demo
  name: hpa-nginx-deploy
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: NodePort
status:
  loadBalancer: {}
  
kubectl create -f hap-deploy-demo.yaml

#创建HPA
kubectl autoscale deployment hpa-nginx-deploy --cpu-percent=10 --min=1 --max=10
#查看
[root@k8s-master deploy]# kubectl get hpa -A
NAMESPACE   NAME               REFERENCE                     TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
zedd        hpa-nginx-deploy   Deployment/hpa-nginx-deploy   0%/10%    1         10        1          111s


hpa.yaml kubectl get hpa hpa-nginx-deploy -o yaml > hpa.yaml

spec:
  maxReplicas: 10	#资源最大副本数
  minReplicas: 1	#资源最小副本数
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment	#需要伸缩的资源类型
    name: hpa-nginx-deploy	#需要伸缩的资源名称
  targetCPUUtilizationPercentage: 10	#触发伸缩的cpu使用率,10%是为了方便测试
status:
  currentCPUUtilizationPercentage: 0	#当前资源下pod的cpu使用率
  currentReplicas: 1	#当前的副本数
  desiredReplicas: 1	#期望的副本数

#使用busybox容器测试
[root@k8s-master Service]# kubectl get svc
NAME               TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
hpa-nginx-deploy   NodePort   10.109.47.110    <none>        80:30828/TCP   77s

/ # while true; do wget -q -O- http://192.168.41.191:30828; done

#查看hpa
[root@k8s-master Service]# kubectl get hpa
NAME               REFERENCE                     TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hpa-nginx-deploy   Deployment/hpa-nginx-deploy   21%/10%   1         10        1          12m

#副本数变为3个
[root@k8s-master Service]# kubectl get deployment hpa-nginx-deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
hpa-nginx-deploy   3/3     3            3           12m

#中断命令,过一会查看
[root@k8s-master Service]# kubectl get hpa
NAME               REFERENCE                     TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hpa-nginx-deploy   Deployment/hpa-nginx-deploy   0%/10%    1         10        3          12m

#副本数
[root@k8s-master Service]# kubectl get deployment hpa-nginx-deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
hpa-nginx-deploy   1/1     1            1           18m
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值