如何使用Kubernetes实现应用的自动伸缩?

如何使用 Kubernetes 实现应用的自动伸缩

自动伸缩是指在系统负荷发生变化或面临不同压力时,程序会自行调整资源,满足系统的运行需求。这种自动调整,可以是容量调整,缓解系统负荷;也可以是动态调整,增大系统的容量,应对增加的需求。

Kubernetes提供了Horizontal Pod Autoscaler(HPA),可以根据负载自动伸缩Pod。 HPA控制器默认监控Pods的CPU使用率,当超过某个值时,会自动触发Pod的增加,把负载推完集群节点上。 创建HPA非常简单,只需要指定目标Pod名称、期望容量和最大容量即可:


apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  # hpa object name
  name: my-hpa
spec:
  minReplicas: 1  #mimimal Pod count
  maxReplicas: 10 #maximum Pod count
  targetCPUUtilizationPercentage: 60 # 超过60%CPU时触发自动伸缩 
  scaleTargetRef:
    # 要进行伸缩的pod名称
    apiVersion: v1
    kind: ReplicationController
    name: my-rc # rc object name
    

在创建HPA之后,我们还需要为HPA定义Horizontal Pod Autoscaler,让它才能够自动调整容量。它可以根据HPA的定义为应用中的Pod指定最小容量、期望容量和最大容量。

这里,我们定义的HPA的期望容量为10,最小容量为1,最大容量为20:


apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: my-hpa
spec:
  minReplicas: 1   #minimal Pod count
  maxReplicas: 20  #maximum Pod count
  targetCPUUtilizationPercentage: 60 #超过60%CPU时自动伸缩
  scaleTargetRef:
    apiVersion: apps/v1
    kind: ReplicationController
    name: my-rc   # rc object name

当CPU使用率超出了我们指定的阈值时,HPA会根据定义的期望容量和最小容量增大容量,而在使用率低于阈值时,HPA会根据定义的期望容量和最大容量减少容量。

在实际使用Kubernetes实现自动伸缩之前,我们需要先在集群中安装Kubernetes。通常情况下,我们可以使用Kubernetes官方提供的工具将群集安装在特定的服务器上,比如Kubernetes的安装在Kubernetes的容器(Kubelet)上执行,安装完成后,就可以立刻运行需要的节点和服务。

在调用Kubernetes的Autoscaler时,首先我们需要提前将应用的可执行文件和其他依赖文件打包到镜像中,并将创建好的镜像push到指定的镜像源(比如Docker Hub)中,然后就可以为应用创建Replication Controller,从而将应用发布到Kubernetes群集中。

在将应用镜像发布到Kubernetes群集中后,就可以为保证应用的正确运行,创建一个Replication Controller,让Kubernetes可以按照我们的要求创建并缩放Pod,保证应用的运行。

在Replication Controller创建完成后,就可以为应用创建HPA了,我们可以指定HPA的目标Pod名称、期望容量和最大容量,以及targetCPUUtilizationPercentage ,也就是说,当实例CPU使用率超过了我们设定的阈值,HPA就会根据期望容量和最小容量自动调整容量,满足负载增加的需求,而当CPU使用率低于设定的阈值时,HPA就会根据期望容量和最大容量自动调整容量,减少负载的压力。

以上,就是利用Kubernetes实现自动伸缩的步骤。Kubernetes的HPA可以根据系统负荷自动伸缩应用,让应用的容量保持在设定的期望容量和最小容量和最大容量之间,确保系统负荷能够得到正确的调节。

随机文章