官方文档:Pod 水平自动扩缩 | Kuberneteshttps://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale/

Pod 水平自动扩缩(Horizontal Pod Autoscaler) 可以基于 CPU 利用率自动扩缩 ReplicationController、Deployment、ReplicaSet 和 StatefulSet 中的 Pod 数量。 除了 CPU 利用率,也可以基于其他应程序提供的 自定义度量指标 来执行自动扩缩。 Pod 自动扩缩不适用于无法扩缩的对象,比如 DaemonSet。

Pod 水平自动扩缩特性由 Kubernetes API 资源和控制器实现。资源决定了控制器的行为。 控制器会周期性地调整副本控制器或 Deployment 中的副本数量,以使得类似 Pod 平均 CPU 利用率、平均内存利用率这类观测到的度量值与用户所设定的目标值匹配

首先需要部署一下metrics-server,收集集群资源利用率

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: system:aggregated-metrics-readerlabels:rbac.authorization.k8s.io/aggregate-to-view: "true"rbac.authorization.k8s.io/aggregate-to-edit: "true"rbac.authorization.k8s.io/aggregate-to-admin: "true"
rules:
- apiGroups: ["metrics.k8s.io"]resources: ["pods", "nodes"]verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: metrics-server:system:auth-delegator
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:auth-delegator
subjects:
- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: metrics-server-auth-readernamespace: kube-system
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: extension-apiserver-authentication-reader
subjects:
- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:name: v1beta1.metrics.k8s.io
spec:service:name: metrics-servernamespace: kube-systemgroup: metrics.k8s.ioversion: v1beta1insecureSkipTLSVerify: truegroupPriorityMinimum: 100versionPriority: 100
---
apiVersion: v1
kind: ServiceAccount
metadata:name: metrics-servernamespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:name: metrics-servernamespace: kube-systemlabels:k8s-app: metrics-server
spec:selector:matchLabels:k8s-app: metrics-servertemplate:metadata:name: metrics-serverlabels:k8s-app: metrics-serverspec:serviceAccountName: metrics-servervolumes:# mount in tmp so we can safely use from-scratch images and/or read-only containers- name: tmp-diremptyDir: {}containers:- name: metrics-serverimage: lizhenliang/metrics-server:v0.3.7 imagePullPolicy: IfNotPresentargs:- --cert-dir=/tmp- --secure-port=4443- --kubelet-insecure-tls- --kubelet-preferred-address-types=InternalIPports:- name: main-portcontainerPort: 4443protocol: TCPsecurityContext:readOnlyRootFilesystem: truerunAsNonRoot: truerunAsUser: 1000volumeMounts:- name: tmp-dirmountPath: /tmpnodeSelector:kubernetes.io/os: linuxkubernetes.io/arch: "amd64"
---
apiVersion: v1
kind: Service
metadata:name: metrics-servernamespace: kube-systemlabels:kubernetes.io/name: "Metrics-server"kubernetes.io/cluster-service: "true"
spec:selector:k8s-app: metrics-serverports:- port: 443protocol: TCPtargetPort: main-port
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: system:metrics-server
rules:
- apiGroups:- ""resources:- pods- nodes- nodes/stats- namespaces- configmapsverbs:- get- list- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: system:metrics-server
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:metrics-server
subjects:
- kind: ServiceAccountname: metrics-servernamespace: kube-system

运行yaml文件

[root@master ~]# kubectl api-versions |grep metrics
metrics.k8s.io/v1beta1
[root@master ~]# kubectl top nodes
NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
master   288m         14%    1157Mi          66%
node1    129m         6%     969Mi           55%
node2    139m         6%     836Mi           48%

为了演示hpa,我们先制作一个镜像

FROM php:5-apache
COPY index.php /var/www/html/index.php
RUN chmod a+rx index.php

执行一个index.php,提高cpu的使用率

<?php$x = 0.0001;for ($i = 0; $i <= 1000000; $i++) {$x += sqrt($x);}echo "OK!";
?>

创建一个deployment

apiVersion: apps/v1
kind: Deployment
metadata:name: php-apache
spec:selector:matchLabels:run: php-apachereplicas: 1template:metadata:labels:run: php-apachespec:containers:- name: php-apacheimage: k8s.gcr.io/hpa-exampleports:- containerPort: 80resources:limits:cpu: 500mrequests:cpu: 200m---apiVersion: v1
kind: Service
metadata:name: php-apachelabels:run: php-apache
spec:ports:- port: 80selector:run: php-apache

创建hpa

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=4
[root@master ~]# kubectl get hpa
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   0%/50%    1         4         1          4h35mkubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
向pod发送查询请求提高cpu使用率[root@master ~]# kubectl get hpa
NAME         REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   106%/50%   1         4         1          4h37m
[root@master ~]# kubectl get deployment php-apache
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
php-apache   3/3     3            3           4h20m
发现hpa已经超过了预定值,随之pod的副本数也变成了3个,最多可变成4个,停止负载后,副本数也会变成一个假如targets字段有显示unknown
原因:
1、刚建立,等待一段时间再查看
2、需要自动伸缩的目标资源并没有进行资源限制

k8s之Horizontal Pod Autoscaler(Pod水平自动伸缩)相关推荐

  1. 实战:HPA(Pod 水平自动伸缩)-2021.11.23

    目录 文章目录 目录 @[toc] 实验环境 实验软件 1.基础知识 1.HPA 控制器 2.Metrics Server a.聚合 API 3.什么是`vpa` 2.实战演示 :cupid:**实战 ...

  2. Kubernetes Pod 水平自动伸缩(HPA)

    Pod 自动扩缩容 之前提到过通过手工执行kubectl scale命令和在Dashboard上操作可以实现Pod的扩缩容,但是这样毕竟需要每次去手工操作一次,而且指不定什么时候业务请求量就很大了,所 ...

  3. k8s之HPA(Pod水平自动伸缩)

    Horizontal Pod Autoscaler官方文档:Pod 水平自动扩缩 | Kubernetes Pod 水平自动扩缩(Horizontal Pod Autoscaler) 可以基于 CPU ...

  4. 22,Horizontal Pod Autoscaler(HPA),自动扩缩容

    在前面的课程中,我们已经可以实现通过手工执行kubectl scale命令实现Pod扩容或缩容,但是这显然不符合Kubernetes的定位目标–自动化.智能化. Kubernetes期望可以实现通过监 ...

  5. 通过一个实际例子理解Kubernetes里pod的自动scale - 水平自动伸缩

    kubectl scale命令用于程序在负载加重或缩小时进行pod扩容或缩小,我们通过一些实际例子来观察scale命令到底能达到什么效果. 命令行创建一个deployment: kubectl run ...

  6. HPA(Horizontal Pod Autoscaler)弹性伸缩

    在生产环境中总会遇到高并发的场景,故在kubernetes中有一种Pod 水平自动扩缩策略,故整理相关文件汇总此博文! 简述 Horizontal Pod Autoscaler(HPA,Pod水平自动 ...

  7. k8s pod容器自动伸缩

    kubernetes 弹性伸缩布局 有三种弹性伸缩: (1) CA(Cluster Autoscaler): Node级别自动扩/缩容cluster-autoscaler组件. (2) HPA(Hor ...

  8. K8S水平伸缩器 - 自动伸缩微服务实例数量

    作者:justmine 头条号:大数据达摩院 微信公众号:大数据处理系统 创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处. 为了方便大家阅读,可以关注头条号或微信公众号,后 ...

  9. kubernetes自动伸缩

    kubernetes中HPA(pod水平自动伸缩) 一.介绍 HPA的全称为(Horizontal Pod Autoscaling)它可以根据当前pod资源的使用率(如CPU.磁盘.内存等),进行副本 ...

最新文章

  1. Roundgod and Milk Tea 贪心
  2. 09JavaScript中的作用域
  3. Event Tracing for Windows
  4. 灰度图像的8位平面分解
  5. 关于WannaCry勒索病毒 你需要知道的8个问题
  6. qq html制作,jquery学习练习:制作QQ简易聊天框
  7. Oracle数据库里面查询字符串类型的字段不为空和为空的SQL语句:
  8. 【python】Python的基本数据类型以及运算符的练习题
  9. 卡片选项页面 JTabbedPane 的使用
  10. Flutter基础—质感设计
  11. 计算机java二级_关于Java计算机二级考试内容。
  12. Web页面iOS真机调试-win10
  13. 软件测试脚本语言有哪些,测试脚本是什么意思有哪些脚本
  14. 申请永久免费空间、数据库空间、域名
  15. 手写英文单词识别(1)
  16. mysql alter auto increment_修改mysql中Auto_increment值的例子
  17. 怎样下载苹果 Apple Store 官方 APP 里的限时免费应用福利?
  18. UML图六种箭头含义
  19. Meter应用中对于中文乱码的主要解决方法(转)
  20. 盛迈坤电商:关键词的优化方法

热门文章

  1. libco源码解析(2) 创建协程,co_create
  2. Problem G: 开个餐馆算算账
  3. 2022最新搭建第三方素材解析网站源码参考开发,附带小例子。
  4. 惠州商贸旅游学校计算机网络,惠州商贸旅游高级职业技术学校
  5. C# 待用户确认对话框(确定/取消)
  6. 从源码解析-Android中Zygote进程是如何fork一个APP进程的
  7. 免抠图PNG素材网站
  8. 哈佛大学开放课程:《公正:该如何做是好?》1
  9. 聊聊苹果审核——App Store Review Guidelines
  10. 智能音箱来了,语音交互设计的一点认知