当前位置: 首页 > 知识库问答 >
问题:

如何为HPA Autoscaling Metrics启用KubeAPI服务器

缪兴腾
2023-03-14

我使用的是Kube v 1 . 13 . 0版。由于Heapster从v1.11开始贬值,我不得不启用集群指标的API服务器来实现HPA。

附图仅供参考

有人能指导我逐步启用API Metrics服务器或任何演示视频吗。这将非常有助于进一步进行。

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

谢谢Deena

共有1个答案

宇文灿
2023-03-14

我能够在堆贬值时使用指标服务器实现HPA。我遵循了以下步骤:

  1. 克隆度量服务器github repo:git克隆https://github.com/kubernetes-incubator/metrics-server.git

进入目录 cd 部署/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

在吊舱上装载足够的负载需要一分钟左右,您会看到一个吊杆:

[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

和豆荚缩放:

希望这有助于您的HPA工作。

编辑:

用以下yaml文件替换< code>deploy/1.8 中的< code > metrics-server-deployment . 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

此外,在kubelet.conf中启用< code >-authentic ation-token-web hook ,然后您将能够获得HPA。

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

resources:
  requests:
    memory: "64Mi"
    cpu: "250m"
  limits:
    memory: "128Mi"
    cpu: "500m"
 类似资料:
  • gRPC新手,找不到任何关于如何在服务器端启用SSL的例子。我使用openssl生成了一个密钥对,但是它报错说私钥无效。 这是我的代码

  • 问题内容: 我有一个像下面的方法这样的现有服务: 有没有一种简单的方法可以同时允许JSONP调用和JSON(检测它)。这是本地人吗? 问题答案: 更新您的配置,如下所示: 请参阅此处的博客文章,其中提供了创建可跨域访问的wcf服务的演练。 这将使您的服务能够接受来自跨域来源的请求。 在确定是否填充您的响应(jsonp中的p)方面, 感谢@carlosfigueira: 如果使用.Net 4,则JS

  • 问题内容: 我已经安装并正在osx上运行一个node.js服务器。我已经释放了一个聊天模块,并且正在愉快地运行它。我更改了一些内容,需要重新启动服务器才能看到效果。 我只知道如何通过关闭终端窗口,然后重新对其进行操作,然后再次运行节点chatdemo.js来重新启动。 有什么方法可以重启而不关闭终端吗? 谢谢。 问题答案: 如果它仅在运行(不是守护程序),则使用。 如果是守护进程,则可以尝试: 凡

  • 我希望payara服务器作为服务运行。我以sudo的身份登录asadmin,并使用create-service命令。给出了以下输出。 这将在 /etc/init.d/ 文件夹中创建payara_production脚本,但一旦重新启动计算机,就不会执行此脚本。我必须手动启动payara才能运行它。 “您已经创建了服务,但是您需要自己启动它”是什么意思,我在之前使用的GlassFish版本中没有类似

  • 问题内容: 我尝试将答案和论坛主题进行30种组合,但未找到正确的答案。 我需要做所有事情,但是如何启用curl int wamp服务器,因为我需要这样做? 有什么解决办法吗?我尝试取消注释-不起作用?我尝试插入wamp任务栏图标-php扩展名-php_curl我尝试将php_curl.dll复制到Win sistem中 不行 我需要做什么? 问题答案: 步骤如下: 关闭WAMP(如果正在运行) 导

  • 本文向大家介绍如何使用PowerShell启动Windows服务?,包括了如何使用PowerShell启动Windows服务?的使用技巧和注意事项,需要的朋友参考一下 要启动特定的Windows服务,您需要使用Start-Service命令。 示例 上面的命令,将启动服务名称假脱机程序。要检查服务是否已启动,请使用Get-Service –Name Spooler命令。 输出结果 该命令不会显示命