kubernetes自动扩缩容[HPA控制器 horizontal pod autoscaler]

#查看当前hpa控制器版本:
[root@k8s-master01 ~]# kubectl get apiservices |grep autosca
v1.autoscaling Local True 17d
v2beta1.autoscaling Local True 17d
v2beta2.autoscaling Local True 17d #版本区别
v1.autoscaling : v1是稳定版本,支持自定义cpu指标
v2beta1.autoscaling : v2bata版本,v2beta1{支持cpu,内存和自定义指标}
v2beta2.autoscaling : v2beta2版本(支持cpu,内存,自定义指标 custom和额外指标ExternalMerics)

HPA实践

#注意: daemonset是不支持自动扩容的 因为他是在每一个节点部署一个服务,无法自动扩缩容
#使用HPA的前提,必须安装metrics-server或同等效果的服务器指标采集插件
#必须配置requests #命令创建一个deployment
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort #1. 创建一个deployment,并暴露service端口80
kubectl create deployment hpa-nginx --image=registry.cn-beijing.aliyuncs.com/dotbalo/nginx --dry-run=client -oyaml >hpa-nginx.yaml #2. 添加resources参数:
resources:
cpu: 10m # hpa-nginx.yaml 整个结果如下:
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: hpa-nginx
name: hpa-nginx
spec:
replicas: 1
selector:
matchLabels:
app: hpa-nginx
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: hpa-nginx
spec:
containers:
- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginx
name: nginx
resources:
resources:
cpu: 10m
status: {} #3.yaml保存为 hpa-nginx.yaml 并执行
[root@k8s-master01 pod]# kubectl create -f hpa-nginx.yaml
deployment.apps/hpa-nginx created #3. 查看deployment状态
[root@k8s-master01 pod]# kubectl get pod -o wide
NAME READY STATUS REST AGE IP NODE NOMINATED NODE READINESS GATE
hpa-nginx-w 1/1 Running 0 2m3s 172.27.14.232 k8s-node02 <none> <none> #4 检查访问
[root@k8s-master01 pod]# curl 172.27.14.232
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p> <p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p>
</body>
</html> #5. 检查pod状态指标
[root@k8s-master01 pod]# kubectl top pod --use-protocol-buffers
NAME CPU(cores) MEMORY(bytes)
hpa-nginx-58ddb65c8d-mvt9f 0m 4Mi
nginx-server 0m 9Mi
web-0 0m 9Mi
web-1 0m 10Mi
web-2 0m 10Mi # 6. 添加自动扩缩容配置
[root@k8s-master01 pod]# kubectl autoscale deployment hpa-nginx --cpu-percent=10 --min=1 --max=10
horizontalpodautoscaler.autoscaling/hpa-nginx autoscaled #检查配置:
[root@k8s-master01 pod]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa-nginx Deployment/hpa-nginx 0%/10% 1 10 1 2m5s [root@k8s-master01 pod]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
hpa-nginx 1/1 Running 0 13m 172.27.14.232 k8s-node02 <none> <none>
nginx-server 1/1 Running 0 114m 172.17.125.21 k8s-node01 <none> <none>
web-0 1/1 Running 0 28h 172.17.125.35 k8s-node01 <none> <none>
web-1 1/1 Running 0 28h 172.27.14.233 k8s-node02 <none> <none>
web-2 1/1 Running 0 28h 172.27.14.226 k8s-node02 <none> <none> #另外开启一个窗口 开始压力测试
while true; do wget -q -O- http://172.27.14.232 > /dev/null; done # 隔一段时间 检查压力:
[root@k8s-master01 pod]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa-nginx Deployment/hpa-nginx 750%/10% 1 10 8 18m #检查hpa扩缩容得情况:
[root@k8s-master01 pod]# kubectl get pod
NAME READY STATUS RESTARTS AGE
hpa-nginx-58ddb65c8d-68tf9 1/1 Running 0 47s
hpa-nginx-58ddb65c8d-99rdt 1/1 Running 0 47s
hpa-nginx-58ddb65c8d-c64h2 1/1 Running 0 47s
hpa-nginx-58ddb65c8d-ddzhs 1/1 Running 0 32s
hpa-nginx-58ddb65c8d-lg62l 1/1 Running 0 47s
hpa-nginx-58ddb65c8d-mvt9f 1/1 Running 0 28m
hpa-nginx-58ddb65c8d-p257w 1/1 Running 0 62s
hpa-nginx-58ddb65c8d-pxdv8 1/1 Running 0 62s
hpa-nginx-58ddb65c8d-q4cwc 1/1 Running 0 62s
hpa-nginx-58ddb65c8d-wkkn8 1/1 Running 0 32s
nginx-server 1/1 Running 0 129m
web-0 1/1 Running 0 28h
web-1 1/1 Running 0 28h
web-2 1/1 Running 0 28h #已经自动扩容了
[root@k8s-master01 pod]# kubectl get pod -o wide
NAME READY STATUS RESTARTS IP NODE NOMINATED READINESS GATES
hpa-nginx-68tf9 1/1 Running 0 103s 172.27.14.197 k8s-node02 <none> <none>
hpa-nginx-99rdt 1/1 Running 0 103s 172.17.125.19 k8s-node01 <none> <none>
hpa-nginx-c64h2 1/1 Running 0 103s 172.27.14.240 k8s-node02 <none> <none>
hpa-nginx-ddzhs 1/1 Running 0 88s 172.17.125.32 k8s-node01 <none> <none>
hpa-nginx-lg62l 1/1 Running 0 103s 172.17.125.33 k8s-node01 <none> <none>
hpa-nginx-mvt9f 1/1 Running 0 29m 172.27.14.232 k8s-node02 <none> <none>
hpa-nginx-p257w 1/1 Running 0 118s 172.17.125.6 k8s-node01 <none> <none>
hpa-nginx-pxdv8 1/1 Running 0 118s 172.17.125.7 k8s-node01 <none> <none>
hpa-nginx-q4cwc 1/1 Running 0 118s 172.27.14.235 k8s-node02 <none> <none>
hpa-nginx-wkkn8 1/1 Running 0 88s 172.27.14.237 k8s-node02 <none> <none>

kubernetes自动扩缩容[HPA控制器 horizontal pod autoscaler]的更多相关文章

  1. 三十三、HPA实现自动扩缩容

    通过HPA实现业务应用的动态扩缩容 HPA控制器介绍 当系统资源过高的时候,我们可以使用如下命令来实现 Pod 的扩缩容功能 $ kubectl -n luffy scale deployment m ...

  2. Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler

    Knative Serving 默认情况下,提供了开箱即用的快速.基于请求的自动扩缩容功能 - Knative Pod Autoscaler(KPA).下面带你体验如何在 Knative 中玩转 Au ...

  3. 通过Dapr实现一个简单的基于.net的微服务电商系统(十一)——一步一步教你如何撸Dapr之自动扩/缩容

    上一篇我们讲到了dapr提供的bindings,通过绑定可以让我们的程序轻装上阵,在极端情况下几乎不需要集成任何sdk,仅需要通过httpclient+text.json即可完成对外部组件的调用,这样 ...

  4. minikube metrics-server HPA 自动扩缩容错误

    minikube metrics-server pod 错误 启动 minikube addons enable metrics-server 之后查看 metrics-server pod 会有如下 ...

  5. Marathon自动扩缩容(marathon-lb-autoscale)

    我们在服务里面创建如下的应用(以下是创建完复制过来的json): { "id": "/nginxtest", "cmd": null, &q ...

  6. 13.深入k8s:Pod 水平自动扩缩HPA及其源码分析

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 Pod 水平自动扩缩 Pod 水平自动扩缩工作原理 Pod 水平自动 ...

  7. 【六】K8s-Pod 水平自动扩缩实践(简称HPA)

    一.概述 Pod 水平自动扩缩(Horizontal Pod Autoscaler)简称 HPA,HPA 可以根据 CPU 利用率进行自动伸缩 Pod 副本数量,除了 CPU 利用率,也可以基于其他应 ...

  8. 从零入门 Serverless | Serverless Kubernetes 应用部署及扩缩容

    作者 | 邓青琳(轻零) 阿里云技术专家 导读:本文分为三个部分,首先给大家演示 Serverless Kubernetes 集群的创建和业务应用的部署,其次介绍 Serverless Kuberne ...

  9. Kubernetes的垂直和水平扩缩容的性能评估

    Kubernetes的垂直和水平扩缩容的性能评估 译自:Performance evaluation of the autoscaling strategies vertical and horizo ...

  10. Kubernetes 监控:Prometheus Adpater =》自定义指标扩缩容

    使用 Kubernetes 进行容器编排的主要优点之一是,它可以非常轻松地对我们的应用程序进行水平扩展.Pod 水平自动缩放(HPA)可以根据 CPU 和内存使用量来扩展应用,前面讲解的 HPA 章节 ...

随机推荐

  1. redis 简单整理——持久化的问题定位和优化[二十一]

    前言 Redis持久化功能一直是影响Redis性能的高发地,简单介绍一下持久化的问题定位和优化. 正文 当Redis做RDB或AOF重写时,一个必不可少的操作就是执行fork操作创 建子进程,对于大多 ...

  2. Docker compose 部署 nginx+php

    Docker compose 部署 nginx+php 拉取Docker镜像 docker pull nginx:1.21.6 docker pull php:7.4.28-fpm 创建docker- ...

  3. 【Oracle】获取字符串中特定字符在字符串中出现的次数

    [Oracle]获取字符串中特定字符在字符串中出现的次数 使用regexp_count函数 例子: select regexp_count('A,B,D,E;Q;F;GQWEQWE:qwe',';') ...

  4. 【Oracle】力扣简单的练习题

    Oracle力扣简单的练习题 请你编写一个 SQL 查询来交换所有的 'f' 和 'm' /* Write your PL/SQL query statement below */ /******** ...

  5. 力扣574(MySQL)-当选者(中等)

    题目: 表: Candidate 表: Vote id 是自动递增的主键,CandidateId 是 Candidate 表中的 id. 问题:请编写 sql 语句来找到当选者的名字,上面的例子将返回 ...

  6. 力扣512(MySQL)-游戏玩法分析Ⅱ(简单)

    题目: 需求:请编写一个 SQL 查询,描述每位玩家首次登陆的设备名称 查询结果格式在以下示例中: 解题思路: 方法一:使用dense_rank() over(partition by ...orde ...

  7. VisualStudio 在 DebuggerDisplay 的属性更改业务逻辑将会让调试和非调试下逻辑不同

    本文记录我写的逗比代码,我在 DebuggerDisplay 对应的属性的 get 方法上,在这个方法里面修改了业务逻辑,如修改界面元素,此时我在 VisualStudio 断点调试下和非断点调试下的 ...

  8. Java ”框架 = 注解 + 反射 + 设计模式“ 之 反射详解

    Java "框架 = 注解 + 反射 + 设计模式" 之 反射详解 每博一文案 无论幸福还是苦难,无论光荣还是屈辱,你都要自己遭遇与承受. ------ <平凡的世界> ...

  9. appium测试混合应用

    最近用appium测试公司APP,APP是原生+H5的模式,测试过程中发现大部分H5的页面使用原生的方式可以进行操作,只有少部分H5页面的按钮虽然在uiautomatorviewer的界面能解析出来, ...

  10. SpringMVC学习二(日期参数/数据保存/重定向)

    接受的参数为日期类型 controller进行数据保存 Controller如何进行重定向跳转 1.对于前端页面传来日期类型的数据时如何进行处理,有两种方法 1.1在对应的Controller中插入代 ...