如何为 HPA 自动缩放指标启用 KubeAPI 服务器

2024-03-16

我使用的是 Kube 版本 v1.13.0。由于 Heapster 从 v1.11 开始就被贬值了,所以我一直坚持启用集群 Metrics 的 API 服务器来实现 HPA。

root:~# kubectl get pods,deployment,hpa
NAME                                   READY   STATUS    RESTARTS   AGE
pod/ctauthorization-754c686bc6-6adkx   1/1     Running   0          72s
pod/ctauthorization-754c686bc6-dpsbm   1/1     Running   0          57s
pod/ctauthorization-754c686bc6-qsavs   1/1     Running   0          72s

NAME                                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.extensions/ctauthorization   3/3     3            3           72s

NAME                                                  REFERENCE                    TARGETS                           MINPODS   MAXEODS   REPLICAS   AGE
horizontalpodautoscaler.autoscaling/ctauthorization   Deployment/ctauthorization   <unknown>/1000Mi, <unknown>/50%   3         5         3          72s

有人可以指导我逐步启用 API 指标服务器或任何演示视频吗?进一步推进确实很有帮助。

如果需要任何进一步的信息,请告诉我。

谢谢 迪娜


我能够使用以下方法实现 HPAmetrics-server因为 heapster 已折旧。我已按照以下步骤操作:

  1. 克隆指标服务器 github 存储库:git clone https://github.com/kubernetes-incubator/metrics-server.git

进入目录cd deploy/1.8+并运行以下 yaml 文件:

[root@ip-10-0-1-91 1.8+]# kubectl apply -f aggregated-metrics-reader.yaml 
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
[root@ip-10-0-1-91 1.8+]# kubectl apply -f auth-reader.yaml 
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
[root@ip-10-0-1-91 1.8+]# kubectl apply -f auth-delegator.yaml 
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
[root@ip-10-0-1-91 1.8+]# kubectl apply -f metrics-apiservice.yaml 
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
[root@ip-10-0-1-91 1.8+]# kubectl apply -f resource-reader.yaml 
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
[root@ip-10-0-1-91 1.8+]# kubectl apply -f metrics-server-deployment.yaml 
serviceaccount/metrics-server created
deployment.extensions/metrics-server created
[root@ip-10-0-1-91 1.8+]# kubectl apply -f metrics-server-service.yaml 
service/metrics-server created

现在创建一个要测试自动缩放的 pod(取自 kubernetes 官方文档):

[root@ip-10-0-1-91 auto]#  kubectl run --generator=run-pod/v1 php-apache -- 
image=k8s.gcr.io/hpa-example --requests=cpu=200m --expose --port=80
service/php-apache created
deployment.apps/php-apache created

现在创建一个自动缩放部署:

[root@ip-10-0-1-91 auto]# kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
horizontalpodautoscaler.autoscaling/php-apache autoscaled

现在检查 HPA,您的指标是否出现:

[root@ip-10-0-1-91 manifests]# kubectl get hpa
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   0%/50%    1         10        1          2m

现在使用以下命令从另一个窗口生成负载:

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

它将打开一个 sh 终端,您可以使用以下命令从该 sh 终端运行负载:

while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done

您的 Pod 需要一分钟左右的时间才能承受足够的负载,然后您会看到繁荣:

[root@ip-10-0-1-91 manifests]# kubectl get hpa
NAME         REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   120%/50%   1         10        4          7m

和 pod 缩放:

希望这有助于您的 HPA 发挥作用。

EDIT:

更换metrics-server-deployment.yaml文件输入deploy/1.8+使用以下 yaml 文件:

 apiVersion: v1
 kind: ServiceAccount
 metadata:
   name: metrics-server
   namespace: kube-system
 ---
 apiVersion: extensions/v1beta1
 kind: Deployment
 metadata:
   name: metrics-server
   namespace: kube-system
   labels:
     k8s-app: metrics-server
 spec:
   selector:
     matchLabels:
       k8s-app: metrics-server
   template:
     metadata:
       name: metrics-server
       labels:
         k8s-app: metrics-server
     spec:
       serviceAccountName: metrics-server
       volumes:
       # mount in tmp so we can safely use from-scratch images and/or read-only containers
       - name: tmp-dir
         emptyDir: {}
       containers:
       - command:
         - /metrics-server
         - --metric-resolution=30s
         - --kubelet-insecure-tls
         - --kubelet-preferred-address-types=InternalIP
         name: metrics-server
         image: k8s.gcr.io/metrics-server-amd64:v0.3.1
         imagePullPolicy: Always
         volumeMounts:
         - name: tmp-dir
           mountPath: /tmp

另外,启用--authentication-token-webhook在 kubelet.conf 中,然后您将能够获取 HPA。

EDIT2:您需要在要为其创建 HPA 的部署文件(在您的情况下为 tomcat)中设置以下属性,然后只有您的 HPA 可以从您的部署中获取指标。

resources:
  requests:
    memory: "64Mi"
    cpu: "250m"
  limits:
    memory: "128Mi"
    cpu: "500m"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 HPA 自动缩放指标启用 KubeAPI 服务器 的相关文章

随机推荐

  • 传单地图上的 d3 圆圈

    我使用以下代码生成带有圆圈的地图 http jsbin com OTaKEDor 2 edit http jsbin com OTaKEDor 2 edit
  • 底层连接已关闭:(HttpWebRequest) - C#

    我正在编写一段代码来通过 POST 请求验证用户名和密码 但收到一条错误消息 提示 底层连接已关闭 我正在尝试将带有 GET 请求的旧代码转换为带有 POST 请求的新代码 我的 GET 代码工作正常 旧代码 string url http
  • sed 命令的子进程调用给出错误

    我有一个文本文件 其中包含以下行 PIXEL SCALE 1 0 size of pixel in arc 要将其中的 1 0 替换为 0 3 我尝试通过 python 脚本中的 subprocess call 使用 sed 遵循 sed
  • Maven - 从子 pom 访问父 pom 上的属性

    在多模块项目结构中 myApp moduleA pom xml moduleB pom xml pom xml 如果我在parent pom中有以下属性
  • 何时实现WebMvcConfigurer来配置Spring MVC?

    我正在学习带有 Java 配置 无 xml 的 Spring MVC 我有一个简单的问题 我看到有两种配置 Spring bean 的方法 方法一 Configuration EnableWebMvc ComponentScan baseP
  • 权限拒绝:打开提供程序 com.android.providers.contacts.ContactsProvider2

    我是 Android 新手 我使用 Android Studio 和 LoginActivity 模板从头开始创建了一个应用程序 我的目标是 SDK 23 最低版本是 15 Android Studio 生成了以下清单
  • Java:设置 Integer = null 可以吗?

    我有一个函数 如果参数存在于数据库中 则返回一个 ID 号 如果不是 则返回 null 这是在乞求空指针异常吗 不允许使用负 ID 号 但我认为让不存在的参数返回 null 而不是像 1 这样的错误代码会更清楚 你怎么认为 private
  • 权限被拒绝:/var/www/abc/.htaccess pcfg_openfile:无法检查 htaccess 文件,确保它可读?

    大家好 我的网站使用 PHP 系统使用 ubuntu linux 即使正确配置了所有内容后 我在 apache 的 error log 文件中收到上述错误 我对此做了很多研究 但无法解决该问题 有人可以在这方面帮助我吗 以下是我的 htac
  • 将 .findBy() 与 Ember 数据填充的数组控制器结合使用

    背景 我正在编写一些功能测试来测试我的路由器是否正确导航和加载我的模型 到目前为止 一切都很好 即使考虑到这个问题 我已经创建了a fiddle http jsfiddle net magLM 2 供您欣赏 它不起作用 尽管有分叉 但我在
  • 方法不会覆盖 Eclipse 中的包可见方法

    从 Eclipse Java 编译器设置 方法不会覆盖包可见方法 包默认方法在不同的包中不可见 因此无法被覆盖 启用此选项时 编译器会以错误或警告的形式发出此类情况的信号 如何触发此警告 错误 我正在寻找代码示例 Foo java pack
  • 替换 dplyr 链的所有列中的 NA

    问题替换 dplyr 链中的 NA https stackoverflow com questions 21714867 replace na in a dplyr chain结果转化为解决方案 dt group by a mutate b
  • Kotlin 中的静态扩展方法

    如何在 Kotlin 中定义静态扩展方法 这可能吗 我目前有一个扩展方法 如下所示 public fun Uber doMagic context Context 可以在实例上调用上述扩展 uberInstance doMagic cont
  • 如何让我的设备振动?

    我正在使用 AS3 为 Android 制作 Flash 游戏 我希望用户知道他通过使设备振动一秒钟来按下按钮 有人可以向我解释如何才能做到这一点吗 我是否需要导入特定的类以及代码应该是什么样子 提前致谢 要使用振动扩展 AIR 应用程序将
  • ASP.NET MVC 单向路由

    是否可以在 Asp net MVC 的 RouteCollection 中定义一个路由 以便它只执行 URL 重写 部分并忽略 Html Actionlink 的 URL 生成 事实上 我想在控制器和操作之间添加一个关键字 控制器 关键字
  • 如何在没有 XIB 的情况下将选项卡栏添加到现有视图控制器

    I m 尝试避免使用 Interface Builder越多越好 目前 我通过代码创建了视图控制器 并通过代码更改了视图 我现在需要其中一个步骤将应用程序发送到一个新的观点标签栏 这也将使我改变观点 理想情况下 我要做的就是告诉当前视图控制
  • 如何保持React状态与MySQL数据库同步

    Scene 我正在构建一个简单的日历 Web 应用程序 它使用 React 作为前端 使用 MySQL 作为服务器后端 该应用程序在首次安装时从服务器检索所有事件的列表 将它们显示给用户并允许进行 CRUD 操作 一切都按预期进行 Ques
  • 从 ExtJS 请求到 node.js 时出现 CORS 问题。请求或响应标头不正确?

    我在网络内两个不同域之间向 Nodejs 服务器发出 ExtJS AJAX 请求时遇到问题 非常感谢任何帮助 当尝试从 ExtJS 客户端的 http 和 https 时 响应失败 但我本地的 Curl 通过 http 返回 200 OK
  • 在.NET / Visual Studio中定义TRACE常量

    在 Visual Studio 2010 中 如果您转到项目的属性并转到 生成 选项卡 则会有一个 定义 TRACE 常量 复选框 这相当于执行 define TRACE System Diagnostics Trace 的所有方法都有一个
  • 如何在 Android 中发送 vcard/contacts/?vcf var SMS 或 MMS?

    我想修改可以发送 contacts vcard vcf 文件 的Android源代码 彩信或短信 Android默认方式是通过蓝牙 我找了很多方法 但都行不通 我知道vcf格式是这样的 BEGIN VCARD VERSION 2 1 N l
  • 如何为 HPA 自动缩放指标启用 KubeAPI 服务器

    我使用的是 Kube 版本 v1 13 0 由于 Heapster 从 v1 11 开始就被贬值了 所以我一直坚持启用集群 Metrics 的 API 服务器来实现 HPA root kubectl get pods deployment