将水平Pod自动缩放器与Kubernetes EKS集群一起使用

这是续集。
您可以通过以下链接以PDF格式下载本文来支持我们。

以PDF格式下载指南


这是续集。

这是续集。
这是续集。

水平吊舱自动定标器 根据观察到的CPU使用率,或 自定义指标 支持。水平吊舱自动缩放仅适用于可缩放对象。它不能用于不可缩放的对象,例如DaemonSet。

Horizo​​ntal Pod Autoscaler被实现为Kubernetes API资源和控制器。资源决定了控制器的行为。控制器会定期调整部署中的复制控制器或副本的数量,以使观察到的平均CPU使用率与用户指定的目标相匹配。

将水平Pod自动缩放器与Kubernetes EKS集群一起使用

必须先安装Metrics Server,然后才能将Horizo​​ntal Pod Autoscaler与EKS群集一起使用。请按照以下指南获取完整的安装说明。

在Amazon EKS集群上安装Kubernetes Metrics Server

使用以下命令验证Metrics服务器是否正在运行:

$ kubectl get apiservice v1beta1.metrics.k8s.io -o yaml

apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"apiregistration.k8s.io/v1beta1","kind":"APIService","metadata":{"annotations":{},"name":"v1beta1.metrics.k8s.io"},"spec":{"group":"metrics.k8s.io","groupPriorityMinimum":100,"insecureSkipTLSVerify":true,"service":{"name":"metrics-server","namespace":"kube-system"},"version":"v1beta1","versionPriority":100}}
  creationTimestamp: "2020-08-12T11:27:13Z"
  name: v1beta1.metrics.k8s.io
  resourceVersion: "130943"
  selfLink: /apis/apiregistration.k8s.io/v1/apiservices/v1beta1.metrics.k8s.io
  uid: 83c44e41-6346-4dff-8ce2-aff665199209
spec:
  group: metrics.k8s.io
  groupPriorityMinimum: 100
  insecureSkipTLSVerify: true
  service:
    name: metrics-server
    namespace: kube-system
    port: 443
  version: v1beta1
  versionPriority: 100
status:
  conditions:
  - lastTransitionTime: "2020-08-12T11:27:18Z"
    message: all checks passed
    reason: Passed
    status: "True"
    type: Available

部署示例应用程序以测试HPA

让我们部署一个测试应用程序,用它来演示Horizo​​ntal Pod Autoscaler的行为。

为演示创建演示名称空间。

$ kubectl create ns demo
namespace/demo created

$ kubectl get ns
NAME              STATUS   AGE
default           Active   2d20h
demo              Active   22s
kube-node-lease   Active   2d20h
kube-public       Active   2d20h
kube-system       Active   2d20h

通过在终端中运行以下命令来部署示例Apache Web服务器应用程序。

$ kubectl apply -f https://k8s.io/examples/application/php-apache.yaml -n demo
deployment.apps/php-apache created
service/php-apache created

您还可以使用kubectl run命令来部署应用程序并创建服务。

$ kubectl run php-apache 
  --generator=run-pod/v1 
  --image=k8s.gcr.io/hpa-example 
  --requests=cpu=200m 
  --limits=cpu=500m 
  --expose 
  --port=80

检查应用程序的状态。

$ kubectl get pods -n demo
NAME                          READY   STATUS    RESTARTS   AGE
php-apache-79544c9bd9-wccnj   1/1     Running   0          40s

创建Kubernetes HPA资源

您可以在应用程序运行时创建HPA资源。

$ kubectl autoscale deployment php-apache --cpu-percent=70 --min=1 --max=5 -n demo
horizontalpodautoscaler.autoscaling/php-apache autoscaled

上面的命令创建一个自动缩放器,当CPU使用率超过70%时,该缩放器将扩展Pod。豆荚的最小数量是 1个 最大值是 五。

使用以下命令获取自动定标器详细信息:

$ kubectl get hpa -n demo
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   0%/70%    1         5         1          80s

$ kubectl describe hpa -n demo
Name:                                                  php-apache
Namespace:                                             demo
Labels:                                                
Annotations:                                           
CreationTimestamp:                                     Fri, 14 Aug 2020 21:38:12 +0300
Reference:                                             Deployment/php-apache
Metrics:                                               ( current / target )
  resource cpu on pods  (as a percentage of request):  0% (1m) / 70%
Min replicas:                                          1
Max replicas:                                          5
Deployment pods:                                       1 current / 1 desired
Conditions:
  Type            Status  Reason               Message
  ----            ------  ------               -------
  AbleToScale     True    ScaleDownStabilized  recent recommendations were higher than current one, applying the highest recent recommendation
  ScalingActive   True    ValidMetricFound     the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request)
  ScalingLimited  False   DesiredWithinRange   the desired count is within the acceptable range
Events:           

负荷增加

从多个位置访问在Kubernetes上部署的服务,以增加负载。因此,我们将使用busybox容器来生成负载。

kubectl run -it --rm load-generator --image=busybox /bin/sh --generator=run-pod/v1 -n demo

您已登录到容器终端。运行以下命令以运行while循环,该循环到达http的服务端点:/// php-apache。

/ # while true; do wget -q -O - http://php-apache; done

打开另一个终端,查看随着负载增加,自动缩放器如何在部署中创建容器。

$ kubectl get hpa -n demo
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   83%/70%   1         5         5          9m

只要实际CPU百分比高于目标百分比,副本数就会增加到5。在这种情况下, 83%所以数量 REPLICAS 它继续增加。

使用以下命令停止加载 CTRL + C

查看Autoscaler如何缩减您的部署规模。

$ kubectl get hpa -n demo -w 

吊舱可能需要几分钟才能运行。回到1。完成后,清理设置。

$ kubectl delete -f https://k8s.io/examples/application/php-apache.yaml -n demo
deployment.apps "php-apache" deleted
service "php-apache" deleted

卸下自动定标器。

$ kubectl delete hpa php-apache -n demo
horizontalpodautoscaler.autoscaling "php-apache" deleted

最后,删除演示名称空间。

$ kubectl delete ns demo
namespace "demo" deleted

使用相同的方法在带有Metrics Server的HPA中自动缩放应用程序。

其他Kubernetes文章:

在EKS Kubernetes集群上启用CloudWatch Logs

使用Cephfs的Kubernetes的Ceph永久存储

如何创建管理员用户以访问Kubernetes仪表板

这是续集。
您可以通过以下链接以PDF格式下载本文来支持我们。

以PDF格式下载指南


这是续集。

这是续集。
这是续集。

Sidebar