如何在 Amazon EKS 上设置 Kubernetes Metrics Server 和 Horizontal Pod Autoscaler?

上次更新时间:2020 年 5 月 18 日

我想要在 Amazon Elastic Kubernetes Service (Amazon EKS) 上设置 Kubernetes Metrics Server 和 Horizontal Pod Autoscaler (HPA)。

解决方法

设置您的环境

1.    创建一个 Amazon Elastic Compute Cloud (Amazon EC2) 实例

2.    在您的 Amazon EC2 实例上安装 kubectl

3.    在 EC2 实例上安装配置最新版本的 AWS 命令行界面 (AWS CLI)。

4.    将您的 kubeconfig 文件配置为指向 Amazon EKS 集群。

创建 Kubernetes Metrics Server

1.    要安装 Metrics Server,请运行以下命令:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml

2.    要确认 Metrics Server 是否正在运行,请运行以下命令:

kubectl get pods -n kube-system -l k8s-app=metrics-server

输出与以下类似:

kubectl get pods -n kube-system -l k8s-app=metrics-server
metrics-server-85cc795fbf-79d72   1/1     Running   0          22s

创建 php-apache 部署和服务

1.    要创建 php-apache 部署,请运行以下命令:

kubectl create deployment php-apache --image=k8s.gcr.io/hpa-example

2.    要设置 CPU 请求,请运行以下命令:

kubectl patch deployment php-apache -p='{"spec":{"template":{"spec":{"containers":[{"name":"hpa-example","resources":{"requests":{"cpu":"200m"}}}]}}}}'

重要提示:如果您未正确设置 cpu 的值,则将不会定义 Pod 的 CPU 利用率指标,且无法扩展 HPA。

3.    要将部署公开为服务,请运行以下命令:

kubectl create service clusterip php-apache --tcp=80

4.    要创建 HPA,请运行以下命令:

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

5.    要确认 HPA 已创建,请运行以下命令。

kubectl get hpa

6.    要创建一个连接到您先前创建的部署的单元,请运行以下命令:

kubectl run --generator=run-pod/v1 -i --tty load-generator --image=busybox /bin/sh

7.    要测试您在步骤 1 中所用命名空间内的单元上的负载,请运行以下脚本:

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

注意:要退出负载生成器单元的 while 循环和 tty 会话,请使用 CTRL + C 取消循环,然后使用 CTRL + D 退出会话。

8.    要查看 HPA 如何根据 CPU 利用率指标扩展单元,请运行以下命令(最好从另一个终端窗口):

kubectl get hpa -w

Metrics Server 现已启动并运行,您可以用它来获取基于资源的指标。

9.    要清理用于测试 HPA 的资源,请运行以下命令:

kubectl delete hpa,service,deployment php-apache
kubectl delete pod load-generator

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?