【问题标题】:Docker Kubernetes (Mac) - Autoscaler unable to find metricsDocker Kubernetes (Mac) - Autoscaler 无法找到指标
【发布时间】:2019-06-04 00:38:25
【问题描述】:

我已经通过 Docker 在我的 Mac 上安装了 Kubernetes 的本地实例。

walkthrough 上关于如何在部署中激活自动缩放之后,我遇到了一个问题。自动缩放器无法读取指标。

当我运行 kubectl describe hpa 时,当前的 cpu 使用率返回为 unknown / 50% 并带有警告:

警告 FailedGetResourceMetric: Horizo​​ntal-pod-autoscaler 无法获取资源 cpu 的指标: 无法从 API 获取指标:服务器找不到 请求的资源(获取 pods.metrics.k8s.io)

警告 FailedComputeMetricsReplicas 水平 pod-autoscaler 无法获得 cpu 利用率:无法 获取资源 cpu 的指标:无法从 API 获取指标: 服务器找不到请求的资源(获取 pods.metrics.k8s.io)

我已经通过git clone https://github.com/kubernetes-incubator/metrics-server.git安装了metrics-server,并通过kubectl create -f deploy/1.8+安装了它

【问题讨论】:

    标签: docker kubernetes


    【解决方案1】:

    终于搞定了.. 以下是我为使事情顺利进行所采取的完整步骤:

    1. 让 Kubernetes 在 Docker 中运行

    2. 使用kubectl delete -n kube-system deployments.apps metrics-server从您的 Kubernetes 实例中删除任何以前的 metrics-server 实例

    3. 使用git clone https://github.com/kubernetes-incubator/metrics-server.git 克隆指标服务器

    4. 编辑文件 deploy/1.8+/metrics-server-deployment.yaml 以通过添加以前不存在的 command 部分来覆盖默认命令。新部分将指示 metrics-server 允许不安全的通信会话(不要验证所涉及的证书)。仅针对 Docker 执行此操作,而不针对 metrics-server 的生产部署:

      containers:
      - name: metrics-server
          image: k8s.gcr.io/metrics-server-amd64:v0.3.1
          command:
            - /metrics-server
            - --kubelet-insecure-tls
      
    5. 使用 kubectl create -f deploy/1.8+ 将 metrics-server 添加到您的 Kubernetes 实例(如果 .yaml 出现错误,请改为:kubectl apply -f deploy/1.8+

    6. 删除自动扩缩器并将其再次添加到您的部署中。它现在应该显示当前的 cpu 使用情况。

    2020 年 7 月编辑:

    除了metrics-server 已更改并且该文件不再存在之外,上述大多数步骤都适用。

    repo 现在建议像这样安装它:

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

    所以我们现在可以下载这个文件了,

    curl -L https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml --output components.yaml
    

    args (L88) 下添加--kubelet-insecure-tlsmetrics-server 部署并运行

    kubectl apply -f components.yaml
    

    【讨论】:

    • 这在 Windows 上对我不起作用。我仍然是未知数/50%
    • @DavidBrossard 我能感觉到你。你找到修复了吗?
    • 它最终做到了,但我不记得为什么了。也许我只需要等待它拿起它
    • 仍然不能像@David 提到的那样在 Windows 上工作。 “kubectl top nodes”命令也不能正常工作。
    • 您的步骤对我来说也是如此。无法在除此处以外的其他任何地方找到此文档,因此感谢您发布它。
    【解决方案2】:

    对于使用内部 IP 的人来说,这里可能对您有用。按照上面的@Mr.Turtle 步骤4。添加更多命令。

      containers:
      - name: metrics-server
        image: k8s.gcr.io/metrics-server-amd64:v0.3.3
        command:
          - /metrics-server
          - --kubelet-insecure-tls
          - --kubelet-preferred-address-types=InternalIP
    

    【讨论】:

      【解决方案3】:

      我们升级到 AWS EKS 版本 1.13.7,那时我们开始遇到 HPA 问题,结果在我的部署中,我必须为 resources.requests.cpu=200m 指定一个值,HPA 开始为我工作。

      【讨论】:

      • 这应该是评论吗?
      【解决方案4】:

      在使用我的 kubernetes kubeadm 实验室时遇到了同样的问题,更新的过程在这里 https://github.com/kubernetes-sigs/metrics-server

      这解决了问题: Horizo​​ntal-pod-autoscaler 无法获取资源 cpu 的指标:无法从资源指标 API 中获取指标:服务器找不到请求的资源(获取 pods.metrics.k8s.io)

      【讨论】:

      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面更改/删除,仅链接答案可能会失效。
      【解决方案5】:

      如果有人在修复这个问题时仍然遇到问题,这可以帮助我在 minikube 上修复它:

      我有 2 个具有相同标签的部署,如下所示:

      kind: Deployment
      metadata:
        name: webserver
      spec:
        selector:
          matchLabels:
            app: web
        template:
          metadata:
            labels:
              app: web
      
      ---
      
      kind: Deployment
      metadata:
        name: database
      spec:
        selector:
          matchLabels:
            app: web
        template:
          metadata:
            labels:
              app: web
      

      我重命名了数据库的标签和 matchLabels(例如,改名为 app:db),然后删除了两个部署并应用了新配置 - 等等,它起作用了。 (经过数小时尝试解决问题..)

      此问题的更多信息:https://github.com/kubernetes/kubernetes/issues/79365

      【讨论】:

        猜你喜欢
        • 2020-02-18
        • 2022-09-29
        • 2023-04-10
        • 1970-01-01
        • 2021-06-10
        • 2018-09-24
        • 2019-05-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多