自动扩展作为一个长久的议题,一直为人们津津乐道,系统能够根据负载的变化对计算资源的分配进行自动的扩增或者收缩,无疑是一个非常吸引人的特征,它能够最大可能减少费用或者其他代价。
自动扩展主要分为两种,其一是水平扩展,针对实例数目的增减,其二是垂直扩展,即单个实例可以使用的资源
hpa操作对象是rc或者deployment对应的pod资源,根据观察到的CPU实际使用量与用户的期望值进行比对,做出是否需要增减实例的决策,controller目前使用heapster来检测CPU使用率,检测周期为30s。
期望值比对比如deployment设置的pod数量为2,但是hpa最小资源数设置的是3,过30s就会自动将deployment的pod数量改为3。
在hpa检测到CPU的实际使用量之后,会求出当前的CPU使用率,然后hpa会通过调整副本数量使得CPU使用率尽量向期望值靠近,另外考虑到自动伸缩的决策可能需要一段时间才能生效,甚至在短时间内会引入一些噪声,例如当pod所需要的CPU负荷过大,从而运行一个新的pod分流,在创建的过程中,系统的CPU使用量可能会有一个攀升的过程,所以再每次做出决策后的端时间内,将不再进行扩展决策,对于scaleup而言,这个时间段为3分钟,scaledown为5分钟。
对deployment资源的nginx做一个弹性伸缩
1)创建弹性伸缩 [root@k8s-master delpoyment]# kubectl autoscale deployment nginx-deployment --max=10 --min=5 --cpu-percent=80 deployment "nginx-deployment" autoscaled 2)查看资源 [root@k8s-master delpoyment]# kubectl get hpa NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE nginx-deployment Deployment/nginx-deployment 80% 0% 5 10 40m [root@k8s-master delpoyment]# kubectl get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx-deployment 5 5 5 5 41mk8s默认创建的资源都会存到default命名空间中,这样看起来很乱,假如我想起的资源,资源名一样这时无法创建,一个名称空间中不允许有相同的资源名称,这时就可以创建多个namespace,企业环境中也是一个项目一个名称空间
将刚刚创建的tomcat资源迁移到新的namespace中
1)创建一个新的namespace为nginx02 [root@k8s-master nginx]# kubectl create namespace nginx02 namespace "nginx02" created 2)修改配置文件,将namespace指定为nginx02 [root@k8s-master nginx]# sed -ri '/namespace:/c \ \ namespace: nginx02' k8s_pod.yml 3)更新配置 [root@k8s-master nginx]# kubectl apply -f k8s_pod.yml pod "nginx3" created 5)查看新的名称空间发现资源已迁移过来 [root@k8s-master nginx]# kubectl get pod -n nginx02 NAME READY STATUS RESTARTS AGE nginx3 1/1 Running 0 21s