修改控制器的pod副本数
1、yml文件中修改replicas数量
2、在dashboard修改deployment的pod值;此修改只是临时生效,重建yml文件后,pod数量会恢复,以yml文件为准
3、通过kubectl scale命令;此修改只是临时生效,重建yml文件后,pod数量会恢复
4、通过kubectl edit编辑deployment
5、通过HPA控制器
手动调整pod数量:
kubectl scale 参数对运行在k8s 环境中的pod 数量进行扩容(增加)或缩容(减小)。
1、kubectl scale deployment/nginx-deployment --replicas=2 -n default #指定deployment的名称
2、root@master1:~# kubectl get deployment -n default #查看扩容后控制器的pod数量
NAME READY UP-TO-DATE AVAILABLE AGE
net-test1 3/3 3 3 4d12h
nginx-deployment 2/2 2 2 5m42s
kubectl autoscale deployment/nginx-deploymen --min=2 --max=5 --cpu-percent=50 -n default
#自动扩容指定deployment的pod数量,当pod的cpu资源利用率达到50%,最大pod数量扩容到5个,最小2个pod数量
HPA自动伸缩pod数量
kubectl autoscale 参数自动控制在k8s集群中运行的pod数量(水平自动伸缩),需要提前设置pod范围及触发条件。
k8s从1.1版本开始增加了名称为HPA(Horizontal Pod Autoscaler)的控制器,用于实现基于pod中资源
(CPU/Memory)利用率进行对pod的自动扩缩容功能的实现,早期的版本只能基于Heapster组件实现对CPU利用率
做为触发条件,但是在k8s 1.11版本开始使用Metrices Server完成数据采集(采集pod的CPU/内存),然后将采集到的数据通过
API(Aggregated API,汇总API),例如metrics.k8s.io、custom.metrics.k8s.io、external.metrics.k8s.io,然后
再把数据提供给HPA控制器进行查询,以实现基于某个资源利用率对pod进行扩缩容的目的。
控制管理器(kube-controller-manager)默认每隔15s(可以通过–horizontal-pod-autoscaler-sync-period修改)查询metrics的资源使用情况
kube-controller-manager支持以下三种metrics指标类型:
->预定义metrics(比如Pod的CPU)以利用率的方式计算
->自定义的Pod metrics,以原始值(raw value)的方式计算
->自定义的object metrics
支持两种metrics查询方式:
->Heapster
->自定义的REST API
支持多metrics,即支持多种数据采集方式,采集pod指标数据
运维通过master的API创建一个HPA控制器,由HPA控制器对deployment进行自动伸缩,通过调用kube-controller-manager对pod数量进行管理;
配置了HPA的deployment发现pod的资源利用率超过了之前所设定的值,通过调用kube-controller-manager服务创建pod,直到pod的资源利用率低于所设定的值;HPA会通过metrics API获取当前HPA所管理的deployment内部的POD的资源利用率
工作过程:
HPA通过master api(Metrices Server通过api server把采集到的数据记录到etcd中,HPA会通过master api获取到etcd中pod的数据)获取到deployment中pod的指标数据,再与HPA提前定义好的值做对比,如果资源利用率超出定义的值,则会通过kube-controller-manager新建pod,直到资源利用率低于hpa所定义的值;
kube-controller-manager默认每隔15s会查询metrics的资源使用情况
准备metrics-server
https://github.com/kubernetes-incubator/metrics-server #使用metrics-server作为HPA数据源。
1、cd /usr/local/src
2、git clone https://github.com/kubernetes-sigs/metrics-server.git #将项目克隆下来
3、git clone https://github.com/kubernetes-sigs/metrics-server.git
4、cd metrics-server/deploy/kubernetes/
5、grep image ./* #部署容器时,有的镜像国外网站下载不下来,需要更换成国内地址
6、vim metrics-server-deployment.yaml
image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6 #将镜像地址更换成国内阿里云地址
7、kubectl apply -f . #将当前目录下所有yml文件全部创建
8、cd /opt/k8s-data/yaml/magedu/tomcat-app1/
9、vim hpa.yaml
#apiVersion: autoscaling/v2beta1
apiVersion: autoscaling/v1 #定义API版本
kind: HorizontalPodAutoscaler #对象类型
metadata: #定义对象元数据
namespace: linux #hpa创建后隶属的namespace
name: linux-tomcat-app1-podautoscaler #hpa对象名称
labels:
app: linux-tomcat-app1 #自定义的label名称
version: v2beta1 #自定义的api版本
spec: #定义对象具体信息
scaleTargetRef: #定义水平伸缩的目标对象,Deployment、ReplicationController/ReplicaSet
apiVersion: apps/v1 #目标对象的API版本
#apiVersion: extensions/v1beta1
kind: Deployment #目标对象类型为deployment
name: linux-tomcat-app1-deployment #目标deployment的具体名称
minReplicas: 2 #最小pod数
maxReplicas: 4 #最大pod数
targetCPUUtilizationPercentage: 60 #CPU资源利用率
#metrics: #k8s-1.9之前使用此方法指定水平伸缩,现版本已经淘汰
#- type: Resource
# resource:
# name: cpu
# targetAverageUtilization: 60
#- type: Resource
# resource:
# name: memory
10、kubectl apply -f hpa.yaml
11、hpa的yml文件一般与服务的yml文件分开
12、kubectl describe deployment/linux-tomcat-app1-deployment -n linux
#desired 最终期望处于READY状态的副本数
updated 当前完成更新的副本数(已经成为READY状态的副本数)
total 总计副本数
available 当前可用的副本数
unavailable 不可用副本数
13、kubectl get hpa -n linux #查看指定namespace下的hpa控制器
注意
如果hpa的最小值高于业务yml文件replicas的值,以hpa值为准;
如果yml文件中的replicas值高于hpa的最小值,以hpa的最小值为准;
如果hpa控制器发现所监控的deployment下有pod的CPU资源利用率超过所指定的数值,会进行扩展pod,直到该deployment内各个pod的cpu利用率低于所指定的值为止;