1 需求分析

接到一个需求,需要对deployment根据流量进行自动伸缩的操作。
原理:
根据metrics-server提供的监控数据,对pod进行分析,然后计算出最优的replicas,最后进行scale操作(replicas=最优replicas)

2 执行过程

如下程序是获取监控的数据

  1. try:
  2. ret_metrics = self.api_client.call_api(
  3. '/apis/custom.metrics.k8s.io/v1beta1/namespaces/' + namespace + '/pods/*/' + metricName + '/', 'GET',
  4. auth_settings=['BearerToken'], response_type='json', _preload_content=False)
  5. except Exception as e:
  6. logger.error(f"{str(e)}")
  7. return None

计算出最优replicas,然后执行scale操作

  1. def patch_namespaced_deployment_scale_api(self, deployment_name, namespace, scale_replicas):
  2. body = {'api_version': 'autoscaling/v1', 'kind': 'Scale', 'spec': {'replicas': scale_replicas}}
  3. result = self.apis_api.patch_namespaced_deployment_scale(name=deployment_name, namespace=namespace,
  4. body=body).to_dict()
  5. return result