k8s之Horizontal Pod Autoscaler(Pod水平自动伸缩)
官方文档: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水平自动伸缩)相关推荐
- 实战:HPA(Pod 水平自动伸缩)-2021.11.23
目录 文章目录 目录 @[toc] 实验环境 实验软件 1.基础知识 1.HPA 控制器 2.Metrics Server a.聚合 API 3.什么是`vpa` 2.实战演示 :cupid:**实战 ...
- Kubernetes Pod 水平自动伸缩(HPA)
Pod 自动扩缩容 之前提到过通过手工执行kubectl scale命令和在Dashboard上操作可以实现Pod的扩缩容,但是这样毕竟需要每次去手工操作一次,而且指不定什么时候业务请求量就很大了,所 ...
- k8s之HPA(Pod水平自动伸缩)
Horizontal Pod Autoscaler官方文档:Pod 水平自动扩缩 | Kubernetes Pod 水平自动扩缩(Horizontal Pod Autoscaler) 可以基于 CPU ...
- 22,Horizontal Pod Autoscaler(HPA),自动扩缩容
在前面的课程中,我们已经可以实现通过手工执行kubectl scale命令实现Pod扩容或缩容,但是这显然不符合Kubernetes的定位目标–自动化.智能化. Kubernetes期望可以实现通过监 ...
- 通过一个实际例子理解Kubernetes里pod的自动scale - 水平自动伸缩
kubectl scale命令用于程序在负载加重或缩小时进行pod扩容或缩小,我们通过一些实际例子来观察scale命令到底能达到什么效果. 命令行创建一个deployment: kubectl run ...
- HPA(Horizontal Pod Autoscaler)弹性伸缩
在生产环境中总会遇到高并发的场景,故在kubernetes中有一种Pod 水平自动扩缩策略,故整理相关文件汇总此博文! 简述 Horizontal Pod Autoscaler(HPA,Pod水平自动 ...
- k8s pod容器自动伸缩
kubernetes 弹性伸缩布局 有三种弹性伸缩: (1) CA(Cluster Autoscaler): Node级别自动扩/缩容cluster-autoscaler组件. (2) HPA(Hor ...
- K8S水平伸缩器 - 自动伸缩微服务实例数量
作者:justmine 头条号:大数据达摩院 微信公众号:大数据处理系统 创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处. 为了方便大家阅读,可以关注头条号或微信公众号,后 ...
- kubernetes自动伸缩
kubernetes中HPA(pod水平自动伸缩) 一.介绍 HPA的全称为(Horizontal Pod Autoscaling)它可以根据当前pod资源的使用率(如CPU.磁盘.内存等),进行副本 ...
最新文章
- Roundgod and Milk Tea 贪心
- 09JavaScript中的作用域
- Event Tracing for Windows
- 灰度图像的8位平面分解
- 关于WannaCry勒索病毒 你需要知道的8个问题
- qq html制作,jquery学习练习:制作QQ简易聊天框
- Oracle数据库里面查询字符串类型的字段不为空和为空的SQL语句:
- 【python】Python的基本数据类型以及运算符的练习题
- 卡片选项页面 JTabbedPane 的使用
- Flutter基础—质感设计
- 计算机java二级_关于Java计算机二级考试内容。
- Web页面iOS真机调试-win10
- 软件测试脚本语言有哪些,测试脚本是什么意思有哪些脚本
- 申请永久免费空间、数据库空间、域名
- 手写英文单词识别(1)
- mysql alter auto increment_修改mysql中Auto_increment值的例子
- 怎样下载苹果 Apple Store 官方 APP 里的限时免费应用福利?
- UML图六种箭头含义
- Meter应用中对于中文乱码的主要解决方法(转)
- 盛迈坤电商:关键词的优化方法