欢迎光临
我们一直在努力

k8s的弹性伸缩

k8s弹性伸缩

自动扩缩容HPA

要实现扩缩容得先安装Metrics Server服务,因为自动扩缩容是通过监控容器得cpu或者memory得上限来实现弹性伸缩的,在 Kubernetes 集群中,Metrics Server 是一个用于收集和聚合集群内部组件的性能指标数据的服务。它可以收集 CPU 使用率、内存使用率、网络 I/O 等指标,并将这些指标暴露给 Kubernetes API Server,以供其他组件使用,在弹性伸缩中,Metrics Server 可以帮助 Kubernetes 自动地监测集群中各个 Pod 的资源使用情况,并根据配置的规则进行自动扩展或缩减

提示:我们使用kubeeasy部署k8s,已经部署过Metrics Server服务了

1、部署nginx

[root@k8s-master-node1 ~]# vi deployment-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
– name: nginx
image: nginx
imagePullPolicy: Always
ports:
– containerPort: 80
resources:
requests: #容器初始值大小
memory: 50Mi
cpu: 0.5
limits: #容器限制最大值
memory: 100Mi
cpu: 1

[root@k8s-master-node1 ~]# kubectl apply -f deployment-nginx.yaml

2、配置service服务暴露端口

[root@k8s-master-node1 ~]# kubectl expose deployment nginx –port=8080 –target-port=80 –type=NodePort

[root@k8s-master-node1 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 51d
nginx NodePort 10.96.31.108 <none> 8080:53756/TCP 32m
[root@k8s-master-node1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-75b57cd77d-dbdzg 1/1 Running 0 23m
nginx-75b57cd77d-dnrjk 1/1 Running 0 22m
nginx-75b57cd77d-h7nlx 1/1 Running 0 32m

3、配置hpa(重点)

[root@k8s-master-node1 ~]# kubectl autoscale deployment nginx –min=3 –max=10 –cpu-percent=50
[root@k8s-master-node1 ~]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
nginx Deployment/nginx 0%/50% 3 10 3 34m

  • kubectl autoscale: Kubernetes 提供的“快速创建 HPA”的命令
  • –min=3 :无论多空闲,都至少保留 3 个 Pod
  • –max=10: 再忙也不会超过 10 个 Pod
  • –cpu-percent=10: 目标 CPU 使用率 = 10%

HPA 的逻辑是:

  • 如果当前 CPU 高于 50% → 扩容
  • 如果当前 CPU 低于 50% → 缩容
4、使其扩缩容

扩容前:
在这里插入图片描述

以下任选其一就好,其共同目的都是提升cpu,使其扩容!!!!!

(1)用多几台主机使用以下命令访问暴露的端口

[root@k8s-master-node1 ~]# while true;do curl -s 192.168.100.10:53756 >> /dev/null;done

[root@k8s-master-node1 ~]# kubectl get hpa -w
[root@k8s-master-node1 ~]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
nginx Deployment/nginx 53%/50% 3 10 3 42m

(2)进入nginx容器里面

[root@k8s-master-node1 ~]# kubectl exec -it nginx-75b57cd77d-dbdzg /bin/bash
root@nginx-75b57cd77d-dbdzg:/# while true; do:; done

[root@k8s-master-node1 ~]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
nginx Deployment/nginx 52%/50% 3 10 3 42m

现在我们可以看见pod由3个增加到5个

[root@k8s-master-node1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-75b57cd77d-22bbf 1/1 Running 0 83s
nginx-75b57cd77d-dbdzg 1/1 Running 0 37m
nginx-75b57cd77d-dnrjk 1/1 Running 0 46m
nginx-75b57cd77d-h7nlx 1/1 Running 0 46m
nginx-75b57cd77d-mkmbf 1/1 Running 0 83s

当cpu降回10%后pod会减少到3个

[root@k8s-master-node1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-75b57cd77d-dbdzg 1/1 Running 0 43m
nginx-75b57cd77d-dnrjk 1/1 Running 0 52m
nginx-75b57cd77d-h7nlx 1/1 Running 0 52m

扩容后:

在这里插入图片描述

赞(0)
未经允许不得转载:171主机测评 » k8s的弹性伸缩
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址