目录
HPA概念
安装HPA的依赖环境
安装metrics-server
手动扩缩容
自动扩缩容
yaml文件
创建HPA
自动扩容
自动缩容
命名空间资源限制
HPA概念
HPA是针对pod的数量进行自动扩缩容。(是针对控制器deployment、replicaset、StatefulSet创建的pod)
HPA是基于cpu的利用率才实现pod数量的自动伸缩。
安装HPA的依赖环境
作用就是:可以使用 kubectl top 查看
安装metrics-server
三台主机都操作:
把metrics-server 镜像拖入到三台节点主机上
docker load -i metrics-server.tar
回到master主机上操作:
把components部署文件拖入到/opt/hpa/目录下
kubectl apply -f hpa.yaml
此时kubectl top node 就能查看了
手动扩缩容
方式一:命令行: kubectl scale deployment nginx1 -n xy102 --replicas=1
方式二:在yaml文件:kubectl edit deployment nginx1 -n xy102
进入之后修改replicas即可
自动扩缩容
yaml文件
前置必要条件:必须是控制器创建、而且必须能设置副本数,就是控制器的类型必须是deployment、replicaset、StatefulSet。
配置的必要条件:必须要声明pod的资源控制(limits)
依赖环境:metrices-server,它是k8s使用集群资源的集中查询器。它的作用是收集资源使用的数据,然后给HPA、scheduler等等使用。
创建HPA
vim hpa.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hpa-test1
labels:
hpa: test1
spec:
replicas: 1
selector:
matchLabels:
hpa: test1
template:
metadata:
labels:
hpa: test1
spec:
containers:
- name: centos
image: centos:7
command: ["/bin/bash", "-c", "yum install -y epel-release --nogpgcheck && yum install -y stress --nogpgcheck && sleep 3600"]
volumeMounts:
- name: yum1
mountPath: /etc/yum.repos.d/
resources:
limits:
cpu: "1"
memory: 512Mi
volumes:
- name: yum1
hostPath:
path: /etc/yum.repos.d/
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: hpa-centos1
spec:
scaleTargetRef:
#匹配需要监控的控制器类型和名称
apiVersion: apps/v1
kind: Deployment
name: hpa-test1
#资源占用率高,要扩容,需要声明扩容的数量
#资源占用率低,要缩容,需要声明最小的保持数量
#定义扩缩容的指标(阈值):
minReplicas: 1
maxReplicas: 6
targetCPUUtilizationPercentage: 50
#占用主机cpu的50%
kubectl apply -f hpa.yaml
kubectl logs -f 查看
如果报这样的错,节点上有本地源local.repo的把本地源删了就行
kubectl top node 查看节点使用情况
kubectl get hpa 查看hpa
自动扩容
进入这个容器 然后运行 stress -c 4
回到node节点上 top 查看内存
再打开一个master查看 kubectl get hpa
注:这里的50%是节点cpu的使用率,只有超过节点cpu的使用率的阈值才会扩容。
此时replicas副本数量就增加了,然后过一会阈值会自动降下来。
自动缩容
退出主节点上stress -c 4的测试环境,它会自动缩容。
扩容和缩容的速度有区别:
扩容:一旦达到峰值,会立即扩容。因为要保证pod的正常工作,扩容必须要快。
缩容:速度会相对较慢。缩容的时候为了保证pod的资源突然又变大了,可以继续维持pod的数量,在一定时间之内,pod占用的资源维持在较低的比率,然后开始慢慢的缩容。
StatefulSet能够实现扩缩容
最小的pod数是1,但是副本的数量定义是3,缩容会缩到1。
命名空间资源限制
kubectl create ns xy102 创建命名空间
apiVersion: v1
kind: ResourceQuota
metadata:
name: ns-xy102
namespace: xy102
#对指定的命名空间进行资源限制
spec:
hard:
pods: "20"
#设置该命名空间可以创建pod的最大数量
requests.cpu: "2"
#只能使用2个cpu
requests.memory: 1Gi
#只能使用一个G的内存
limits.cpu: "3"
limits.memory: 2Gi
#limits最多能使用多少
configmaps: "10"
#创建configmap的数量限制
persistentvolumeclaims: "4"
#创建pvc请求的限制
secrets: "10"
#创建加密配置文件的限制
services: "10"
#创建service的限制
kubectl describe namespaces xy102 查看命名空间详细情况
limitRange
limitRange的作用:只要是创建在这个命名空间的pod,都会根据limitRange的配置来对所有的pod进行统一的资源限制。
vim limit.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: xy102-limit
namespace: xy102
#指定命名空间
spec:
limits:
- default:
#直接加default就相当于是上限
memory: 1Gi
cpu: "4"
defaultRequest:
#这个就是软限制
memory: 1Gi
cpu: "4"
type: Container
#支持的类型,可以是Container、pod、pvc