HPAのkubernetes

Kubernetes伸縮性のプロフィール

手動実行することによって、kubectl scale展開の修飾によってコマンドまたは複製の数は、ポッドスケーリング能力を達成することができます。また、定期的なタスクを介して、予測可能なピークビジネスシーンの数に伸縮ポッドタイミング達成することができます。しかし、実際には制御不能な要求のピーク時のトラフィック量の中でより多くのアプリケーションシナリオインチ これは、自動リソースポッドによって弾性的に伸縮性の監視、使用、およびQPSや他の指標へのアクセスを実現するために、例えば、いくつかの自動格納式の手段を使用するように私たちを必要とします。

2次元から伸縮性の自動サポートをKubernetes:

  • クラスタAutoScaler:伸縮ハンドルkubernetesノードノード・クラスタ、クラウドホスティングサービスおよびリソース監視サービスのIaaSベンダーに大きく依存しています
  • HPA(水平ポッドAutoscaler):ポッドは、データを収集した監視サービスリソース監視メトリックを依存して、自動的に設定伸縮性レプリカを処理します

HPAについて

HPAは、オブジェクトKubernetesの性質上のリソースです。モニタリング指標関連する変化は、定期的にターゲットポッドのコピー数を調節するために標的かどうかを決定するために、展開制御をチェックすることにより、ポッドを標的とします。

典型的には、アプリケーションは、容量、CPUやメモリの使用量をスケーリングすることによって実現されます。HPA取得し、CPU使用率指数は、独自の監視システムheapster kubernetesから派生しながら実際には、kubernetesそれらの以前のバージョンでは、HPAは、CPUスケーリング能力の使用をサポートしています。

kubernetes 1.8バージョンの初めから、代わりにメトリクスAPIで取得したリソースのインデックスを使用します。時代遅れheapster電流。

kubernetes-HPA

Kubernetes資源指標は二つのタイプに分けられます。

  • コア指標(コア指標):各ノード上で開示されたkubelet取得インデックス情報要約APIは、典型的にのみCPU、メモリ使用情報が含まれています
  • custom metrics(自定义指标):允许用户从外部的监控系统当中采集自定义指标,如应用的qps等

在autoscaling/v1版本中只支持CPUUtilizationPercentage一种指标,在autoscaling/v2beta1中增加支持custom metrics,autoscaling/v2beta2支持自定义指标

下面以cpu使用率指标来说明hpa是如何来根据指标使用伸缩的:

CPUUtilizationPercentage即cpu使用率的百分比。hpa判断的标准是目标Pod所有副本自身的CPU利用率的平均值。一个Pod自身的CPU利用率是该Pod当前的CPU的使用量除以它的CPU Request的值。

比如定义一个Pod的CPU Request为0.4,而当前的Pod的CPU使用量为0.2,则它的CPU使用率为 50%,这样计算一个Deployment的所有Pod的cpu使用率的平均值。如果某一刻该值超过80%,则意味着当前的Pod 副本数很可能不足以支撑接来下更多的请求,需要进行动态扩容,而当前请求高峰时段过去后,Pod的 CPU 利用率又会降下来,此时对应的Pod副本数应该自动减少到一个合理的水平。

CPUUtilizationPercentage计算过程中使用到的Pod的CPU使用量通常是1min内的平均值。

Metrics Server

前面我们说到,核心指标的采集是通过metrics api获取,而Metrics Server实现了Resurce Metrics API。Metrics Server 是集群范围资源使用数据的聚合器。由Metrics Server从每个节点上的Kubelet公开的Summary API 中采集指标信息。也就是说,如果需要使用kubernetes的HPA功能,需要先安装Metrics Server。

1. 生成metrics-server证书

创建metrics-server-csr.json文件,内容如下:

{
  "CN": "aggregator",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Hubei",
      "L": "Wuhan",
      "O": "k8s",
      "OU": "System"
    }
  ]
}

生成metrics-server证书和密钥

cfssl gencert --ca ca.pem --ca-key ca-key.pem --config ca-config.json --profile kubernetes metrics-server-csr.json | cfssljson --bare metrics-server

关于生成证书指令中,使用的ca.pem ca-key.pem以及ca-config.json,可参考《手动部署一个单节点kubernetes》

2. 修改kubernetes master 配置文件

在kube-apiserver的启动指令中添加如下参数:

kube-apiserver
  ...
  --requestheader-client-ca-file=/etc/kubernetes/ssl/ca.pem
  --requestheader-allowed-names=aggregator
  --requestheader-extra-headers-prefix=X-Remote-Extra-
  --requestheader-group-headers=X-Remote-Group
  --requestheader-username-headers=X-Remote-User
  --proxy-client-cert-file=/etc/kubernetes/ssl/metrics-server.pem
  --proxy-client-key-file=/etc/kubernetes/ssl/metrics-server-key.pem

在kube-controller-manager的启动指令中添加如下参数:

kube-controller-manager
  ...
  --horizontal-pod-autoscaler-use-rest-clients=true \
  --horizontal-pod-autoscaler-downscale-delay=5m0s \
  --horizontal-pod-autoscaler-upscale-delay=1m0s \
  --horizontal-pod-autoscaler-sync-period=20s \
  ...

配置项说明:

  • horizontal-pod-autoscaler-use-rest-clients: 开启基于rest-clients的自动伸缩
  • horizontal-pod-autoscaler-sync-period:自动伸缩的检测周期为20s,默认为30s
  • horizontal-pod-autoscaler-upscale-delay:当检测到满足扩容条件时,延迟多久开始缩容,即该满足的条件持续多久开始扩容,默认为3分钟
  • horizontal-pod-autoscaler-downscale-delay:当检测到满足缩容条件时,延迟多久开始缩容,即该满足条件持续多久开始缩容,默认为5分钟

3. 安装metrics-server

metrics-server代码仓库地址: https://github.com/kubernetes-incubator/metrics-server

当前最新的release版本为v0.3.6,下载最新版本。然后执行如下操作:

cd deploy/1.8+/

sed -i '[email protected]/metrics-server-amd64:[email protected]/google_containers/metrics-server-amd64:v0.3.6@g' metrics-server-deployment.yaml

kubectl apply -f ./

以上操作会在kube-system命名空间启动一个名为metrics-server的pods以提供实时的数据采集。

HPA配置示例

下面是 HPA 定义的一个具体例子:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
  namespace: default
spec:
  maxReplicas: 10
  minReplicas: 4
  scaleTargetRef:
    kind: Deployment
    name: nginx-demo
  targetCPUUtilizationPercentage: 90

HPAオブジェクト上で定義されたとおり、対象物がこれらの値CPUUtilizationPercentageポッド要求コピーが90%の限界が膨張、収縮または膨張の自動動的挙動をトリガ超えるポッド内展開のnginxの-デモコピーと呼ばれる制御でありますこれは、制約が10 4ポッドを受信した場合に介在するコピーの数との間で満たさなければなりません。

コマンドに加えて作成し、リソースオブジェクトHPAの道を作成することなく、簡単なコマンドを以下により直接HPAオブジェクトと同等のものを作成するためにkubectlを呼び出すことによって、YAMLファイル間で定義することができます。

kubectl autoscale deployment php-apache --cpu-percent=90 --min=1 --max=10

おすすめ

転載: www.cnblogs.com/breezey/p/11711077.html