做网站公司电话,企业简介,怎样建设小游戏网站,学校网页制作模板目录 HPA相关知识 HPA#xff08;Horizontal Pod Autoscaling#xff09;Pod 水平自动伸缩#xff0c;Kubernetes 有一个 HPA 的资源#xff0c;HPA 可以根据 CPU 利用率自动伸缩一个 Replication Controller、 Deployment 或者Replica Set 中的 Pod 数量。
#xff08;1… 目录 HPA相关知识 HPAHorizontal Pod AutoscalingPod 水平自动伸缩Kubernetes 有一个 HPA 的资源HPA 可以根据 CPU 利用率自动伸缩一个 Replication Controller、 Deployment 或者Replica Set 中的 Pod 数量。
1HPA 基于 Master 上的 kube-controller-manager 服务启动参数 horizontal-pod-autoscaler-sync-period 定义的时长默认为30秒周期性的检测 Pod 的 CPU 使用率。
2HPA 与之前的 RC、Deployment 一样也属于一种 Kubernetes 资源对象。通过追踪分析 RC 控制的所有目标 Pod 的负载变化情况 来确定是否需要针对性地调整目标Pod的副本数这是HPA的实现原理。
3metrics-server 也需要部署到集群中 它可以通过 resource metrics API 对外提供度量数据。 HPA部署和运用 进行HPA的部署和配置
//在所有 Node 节点上传 metrics-server.tar 镜像包到 /opt 目录
cd /opt/
docker load -i metrics-server.tar#在主master节点上执行
kubectl apply -f components.yamlmastrt节点拖入components.yaml
#部署完毕后可以通过命令来监视pod的资源占用
kubectl top podskubectl top nodes HPA伸缩的测试演示
创建一个用于测试的pod资源
apiVersion: apps/v1
kind: Deployment
metadata:name: centos-testlabels:test: centos1
spec:replicas: 1selector:matchLabels: test: centos1template:metadata:labels:test: centos1spec:containers:- name: centosimage: centos: 7command: [/bin/bash,-c,yum -y install epel-release;yum -y install stress;sleep 3600]resources:limits:cpu: 1memory: 512Mi
#设置资源限制。使用hpa必须添加资源限制字段否则无法判断。
---
apiVsersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:name: hpa-centos7
spec:scaleTargetRef:apiVersion: apps/v1
#表示需要监控的类型是什么kind: Deploymentname: centos-test
#这里表示你需要监控谁minReplicas: 1
#表示最小有几个maxReplicas: 5
#超过副本最大有几个targetCPUUtilzationPercentage: 50//设定cpu使用的阀值。高于50%缩容低于50%扩容进入容器占用2个cpustress --cpu 2 HPA的规则 1.定义pod的时候必须要有资源限制否则HPA无法进行监控
2.扩容是即时的只要超过阀值就会立刻扩容不是立刻扩容到最大副本数。他会在最小值和最大值波动如果扩容数量满足了需求则不会在扩容。
3.缩容是缓慢的。如果业务的峰值较高回收的策略太积极的话可能会产生业务的崩溃。
周期性的获取数据缩容的机制问题。
如果业务的峰值较高回收的策略太积极的话可能会产生业务的崩溃。
pod的副本数扩缩容有两种方式
1、 手动的方式修改控制器的副本数。
命令行可以通过 kubectl scale deployment pod名称 --replicas5
修改yaml文件。通过apply -f部署更新
2、 自动扩缩容HPA
hpa监控的是cpu 资源限制
pod的资源限制在部署pod的时候加入resources字段通过limits/request来对pod进行限制。
除了pod的资源限制还有命名空间的资源限制 命名空间 资源限制 lucky-zzr项目---部署在test1的命名空间如果lucky-zzr不做限制或者命名空间不做限制他依然会占满所有集群资源
k8s集群部署pod的最大数量10000个
实验举例
vim ns.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: centos-test2namespace: test1labels:test: centos2
spec:replicas: 11selector:matchLabels:test: centos2template:metadata:labels:test: centos2spec:containers:- name: centosimage: centos:7command: [/bin/bash, -c, yum -y install epel-release;yum -y install stress;sleep 3600]resources:limits:cpu: 1000mmemory: 512Mi---apiVersion: v1
kind: ResourceQuota
metadata:name: ns-resourcenamespace: test1
spec:hard:
#硬限制pods: 10
#表示在这个命名空间内只能部署10个podrequests.cpu: 2
#最多只能占用多个个cpurequests.memory: 1Gi
#最多只能占用多少内存limits.cpu: 4
#最大需要多少cpulimits.memory: 2Gi
#最大需要多少内容configmaps: 10
#当前命名空间内能创建最大的configmap的数量 10个persistentvolumeclaims: 4
#当前命名空间只能使用4个pvcsecrets: 9
#创建加密的secrets。只能9个services: 5
#创建service只能5个services.nodeports: 2
#nodeport类型的svc只能2个
设置副本数为11个测试。当命名空间限制了之后最多只能部署10个 通过命名空间的方式对容器进行限制
apiVersion: apps/v1
kind: Deployment
metadata:name: centos-testnamespace: test2Labels:test: centos1
spec:replicas: 1selector:matcjhLabels: test: centos1template:metdata:labels:test: centos1spec:containers:- name: centosimage: centos:7command: [/bin/bash,-c,yum -y install epel-release;yum -y install stress;sleep 3600]
---
apiVersion: v1
kind: LimitRange
#表示使用limitrange来进行资源控制的类型。
metadata:name: test2-centosnamespace: test2
spec:limits:default:memory: 512Micpu: 1defaultRequest:memory: 256Micpu: 0.5type: Container#default--limit
#defaultRequest---request
#type支持Container ,pod ,pvc
通过命名空间对pod进行统一限制
好处是不需要对每个pod进行限制
缺点是不够灵活 HPA自动伸缩如果使用nodeName的方式将固定在一个node上观察扩容之后阀值是否会下降
实验举例
apiVersion: apps/v1
kind: Deployment
metadata:name: centos-testlabels:test: centos1
spec:replicas: 1selector:matchLabels:test: centos1template:metadata:labels:test: centos1spec:containers:- name: centosimage: centos:7command: [/bin/bash, -c, yum -y install epel-release;yum -y install stress;sleep 3600]resources:limits:cpu: 1000mmemory: 512MinodeName: node01
#设置资源限制。使用hpa必须添加资源限制字段否则无法判断---apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:name: hpa-centos
spec:scaleTargetRef:apiVersion: apps/v1
#表示需要监控的类型是什么,基于什么控制器创建的kind: Deploymentname: centos-test
#这里表示你需要监控谁minReplicas: 1
#表示最小有几个maxReplicas: 5
#超过副本最大有几个targetCPUUtilizationPercentage: 50
#设定cpu使用的阀值
测试即使在同一个node节点上阀值还是会下降。实验完成
总结 HPA自动扩缩容
命名空间的两种方式
ResourceQuota可以对命名空间进行资源限制
LimitRange直接声明在命名空间中创建的pod容器的资源限制。这是一种统一限制。所有的pod都受这个条件的制约。
只要是在命名空间内不管创建多少都需要使用我声明的资源限制。
pod的资源限制resources、limit
pod的资源限制是我们创建时候声明好的这时必加选项。
对命名空间、使用cpu、内存一定会做限制
命名空间的资源限制ResourceQuota
一般是对命名空间的cpu和内存做限制
命名空间统一资源限制LimitRange
核心pod一定要做资源限制否则会占用集群的全部资源命名空间也需要做限制否则还是会占用集群的全部资源。防止整个集群的资源被一个服务或者一个命名空间占满。
HPA自动伸缩