Pod 自动扩缩容

18 篇文章 0 订阅
9 篇文章 0 订阅

文章目录


Pod 自动扩缩容

我们可以手动实现 Pod 的扩缩容,但是如果业务请求量很大的时候,就很麻烦了,所以我们需要去实现自动扩缩容。如果 Kubernetes 系统能够根据 Pod 当前的负载的变化情况来自动的进行扩缩容就好了,因为这个过程本来就是不固定的,频繁的发生,所以手动实现扩缩容是不现实的。

Kubernetes 为我们提供了一个资源对象: Horizontal Pod Autoscaling (Pod 水平自动伸缩)简称 HPA 。HPA通过监控分析 RC 或者 Deployment 控制的所有 Pod 的负载变化情况来确定是否需要调整 Pod 的副本数量,这是 HPA 最基本的原理。

在这里插入图片描述
HPA 在 Kubernetes 集群中被设计成一个 controller ,我们可以简单的通过 kubectl autoscale 命令来创建一个 HPA 资源对象,HPA Controller 默认 30s轮询一次,(可通过 kube-controller-manager的标志 – horizontal - pod - autoscale - sync - period 进行配置),查询指定的资源 (RC 或者 Deployment)中的 Pod 的资源使用率,并且创建时设定的值和指标做对比,从而实现自动伸缩的功能。

当你创建了 HPA 后, HPA 会从 Heapster 或者用户自定义的 RESTClient 端获取每一个Pod 利用率或原始值的平均值,然后和 HPA 中定义的指标进行对比,同时计算出需要伸缩的具体值并进行相应的操作,目前,HPA 可以从两个地方获取数据:

  • Heapster:仅支持 CPU 使用率
  • 自定义监控:
    从 Heapster 获取监控数据来进行自动扩缩容的方法,所以首先我们得安装 Heapster ,部署 Heapster ,我使用的是 Heapster 1.4.2 版本的,前往 Heapster 的github 页面 Heapster

我们将该目录下的yaml 文件保存到我们的集群上,然后使用 kubectl 命令行工具创建即可,另外创建完成后,如果需要在 Dashboard 当中看到监控图标,我们还需要在 Dashboard 中配置我们的 Heapster - host。

同样的我们来创建一个 Deployment 管理的 Nginx Pod ,然后利用 HPA 来进行自动扩缩容,定义 Deployment 的 YAML 文件如下 :

---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: hpa-nginx-deploy
  labels:
    app: nginx-demo
spec:
  revisionHistoryLimit: 15
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

然后创建 Deployment :

$ kubectl create -f hpa-deploy-demo.yaml

现在我们来创建一个 HPA ,可以使用 kubectl autoscale 命令来创建:

$ kubectl autoscale deployment hpa-nginx-deploy --cpu-percent=10 --min=1 --max=10
deployment "hpa-nginx-deploy" autoscaled
···
$ kubectl get hpa                                                         
NAME        REFERENCE              TARGET    CURRENT   MINPODS   MAXPODS   AGE
hpa-nginx-deploy   Deployment/hpa-nginx-deploy   10%       0%        1         10        13s

此命令创建了一个关联资源 hpa-nginx-deploy 的 HPA ,最小的 Pod 副本数为 1 ,最大为 10 ,HPA 会根据设定的 cpu 使用率(10%)动态的增加或者减少 Pod 数量。

当然除了使用 kubectl autoscale 命令来创建外,我们可以通过创建 YAML 文件的形式来创建 HPA 资源对象,如果我们不知道怎么编写的话,我们可以查看上面的命令行创建的 HPA 的YAML文件

$ kubectl get hpa hpa-nginx-deploy -o yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  creationTimestamp: 2017-06-29T08:04:08Z
  name: nginxtest
  namespace: default
  resourceVersion: "951016361"
  selfLink: /apis/autoscaling/v1/namespaces/default/horizontalpodautoscalers/nginxtest
  uid: 86febb63-5ca1-11e7-aaef-5254004e79a3
spec:
  maxReplicas: 5 //资源最大副本数
  minReplicas: 1 //资源最小副本数
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment //需要伸缩的资源类型
    name: nginxtest  //需要伸缩的资源名称
  targetCPUUtilizationPercentage: 50 //触发伸缩的cpu使用率
status:
  currentCPUUtilizationPercentage: 48 //当前资源下pod的cpu使用率
  currentReplicas: 1 //当前的副本数
  desiredReplicas: 2 //期望的副本数
  lastScaleTime: 2017-07-03T06:32:19Z

我们现在根据上面的 YAML 文件就可以自己来创建 一个基于 YAML的 HPA 描述文件了。现在我们来增大负载进行测试,我们来创建一个 busybox,并且循环访问上面创建的服务。

$ kubectl run -i --tty load-generator --image=busybox /bin/sh
If you don't see a command prompt, try pressing enter.
/ # while true; do wget -q -O- http://172.16.255.60:4000; done

下图可以看到,HPA 已经开始工作了:

$ kubectl get hpa
NAME        REFERENCE              TARGET    CURRENT   MINPODS   MAXPODS   AGE
hpa-nginx-deploy   Deployment/hpa-nginx-deploy   10%       29%        1         10        27m

同时我们查看相关资源 hpa-nginx-deploy 的副本数量,副本数量已经从原来的 1 变成了 3 。

$ kubectl get deployment hpa-nginx-deploy
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hpa-nginx-deploy   3         3         3            3           4d

再次查看 HPA ,由于副本数量的增加,使用率也保持在了 10% 左右。

$ kubectl get hpa
NAME        REFERENCE              TARGET    CURRENT   MINPODS   MAXPODS   AGE
hpa-nginx-deploy   Deployment/hpa-nginx-deploy   10%       9%        1         10        35m

同样的这个时候我们关掉 bustbox来减少负载,然后等待一段时间观察下 HPA 和 Deployment 对象

$ kubectl get hpa     
NAME        REFERENCE              TARGET    CURRENT   MINPODS   MAXPODS   AGE
hpa-nginx-deploy   Deployment/hpa-nginx-deploy   10%       0%        1         10        48m
$ kubectl get deployment hpa-nginx-deploy
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hpa-nginx-deploy   1         1         1            1           4d

可以看到副本数量已经从 3 变成了 1 。

不过当前的 HPA 只有 CPU 使用率这一个指标,还不是很灵活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值