K8S安装metrics-server

K8S安装metrics-server

使用kubeadm安装完成的集群,运行kubectl top node等命令式,报错:error: Metrics API not available。这是因为缺少metrics-server。

[root@k8s-master1 ~]# kubectl top node
error: Metrics API not available

简介

于 Kubernetes,Metrics API 提供了一组基本的指标,以支持自动伸缩和类似的用例。 该 API 提供有关节点和 Pod 的资源使用情况的信息, 包括 CPU 和内存的指标。如果将 Metrics API 部署到集群中, 那么 Kubernetes API 的客户端就可以查询这些信息,并且可以使用 Kubernetes 的访问控制机制来管理权限。

HorizontalPodAutoscaler (HPA) 和 VerticalPodAutoscaler (VPA) 使用 metrics API 中的数据调整工作负载副本和资源,以满足客户需求。

你也可以通过 kubectl top 命令来查看资源指标。

说明:

Metrics API 及其启用的指标管道仅提供最少的 CPU 和内存指标,以启用使用 HPA 和/或 VPA 的自动扩展。 如果你想提供更完整的指标集,你可以通过部署使用 CustomMetrics API 的第二个指标管道来作为简单的 Metrics API 的补充。

资源指标管道架构

资源管道架构

  • cAdvisor: 用于收集、聚合和公开 Kubelet 中包含的容器指标的守护程序。

  • kubelet: 用于管理容器资源的节点代理。 可以使用 /metrics/resource 和 /stats kubelet API 端点访问资源指标。

  • 节点层面资源指标: kubelet 提供的 API,用于发现和检索可通过 /metrics/resource 端点获得的每个节点的汇总统计信息。

  • metrics-server: 集群插件组件,用于收集和聚合从每个 kubelet 中提取的资源指标。 API 服务器提供 Metrics API 以供 HPA、VPA 和 kubectl top 命令使用。Metrics Server 是 Metrics API 的参考实现。

  • Metrics API: Kubernetes API 支持访问用于工作负载自动缩放的 CPU 和内存。 要在你的集群中进行这项工作,你需要一个提供 Metrics API 的 API 扩展服务器。

Metrics API

metrics-server 实现了 Metrics API。此 API 允许你访问集群中节点和 Pod 的 CPU 和内存使用情况。 它的主要作用是将资源使用指标提供给 K8s 自动缩放器组件。

下面是一个 minikube 节点的 Metrics API 请求示例,通过 jq 管道处理以便于阅读:

kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes/minikube" | jq '.'

这是使用 curl 来执行的相同 API 调用:

curl http://localhost:8080/apis/metrics.k8s.io/v1beta1/nodes/minikube

下面是一个 kube-system 命名空间中的 kube-scheduler-minikube Pod 的 Metrics API 请求示例, 通过 jq 管道处理以便于阅读:

kubectl get --raw "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/kube-scheduler-minikube" | jq '.'

这是使用 curl 来完成的相同 API 调用:

curl http://localhost:8080/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/kube-scheduler-minikube

Metrics API 在 k8s.io/metrics 代码库中定义。

兼容性矩阵

Metrics Server Metrics API group/version Supported Kubernetes version
0.7.x metrics.k8s.io/v1beta1 1.19+
0.6.x metrics.k8s.io/v1beta1 1.19+
0.5.x metrics.k8s.io/v1beta1 1.8+
0.4.x metrics.k8s.io/v1beta1 1.8+
0.3.x metrics.k8s.io/v1beta1 1.8-1.21

备注:

低于 v1.16 的Kubernetes 需要增加 --authorization-always-allow-paths=/livez,/readyz 命令行参数。

部署metrics-server

metrics-server支持YAML和helm chart两种类型的安装。支持单副本和高可用两种安装方式。

单副本安装:

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

高可用安装:高可用安装要求至少有两个node节点用于调度。

Kubernetes v1.21+:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml

Kubernetes v1.19-1.21:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability.yaml

本文使用的k8s版本为1.27.6,使用YAML进行安装,选用0.7.0版本,安装高可用方案:

[root@k8s-master1 ~]# kubectl get node
NAME          STATUS   ROLES           AGE     VERSION
k8s-master1   Ready    control-plane   3d20h   v1.27.6
k8s-node1     Ready    <none>          3d20h   v1.27.6
k8s-node2     Ready    <none>          3d20h   v1.27.6

# 下载yaml文件
[root@k8s-master1 ~]# mkdir metrics-server
[root@k8s-master1 ~]# cd metrics-server/
[root@k8s-master1 metrics-server]#  wget curl https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.1/high-availability-1.21+.yaml

# 修改yaml文件, args增加参数`- --kubelet-insecure-tls`, 同时镜像指向阿里云仓库
[root@k8s-master1 metrics-server]# vi high-availability-1.21+.yaml

      containers:
      - args:
        - --cert-dir=/tmp
        - --secure-port=10250
        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
        - --kubelet-use-node-status-port
        - --metric-resolution=15s
        - --kubelet-insecure-tls
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.7.1
        imagePullPolicy: IfNotPresent
        livenessProbe:
          failureThreshold: 3

# 部署metric-server
[root@k8s-master1 metrics-server]# kubectl apply -f high-availability-1.21+.yaml
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
poddisruptionbudget.policy/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created

# 查看部署的容器
[root@k8s-master1 metrics-server]# kubectl get pod -n kube-system
NAME                                  READY   STATUS    RESTARTS        AGE
coredns-7bdc4cb885-bqtks              1/1     Running   2 (3d20h ago)   3d20h
coredns-7bdc4cb885-mzldj              1/1     Running   2 (3d20h ago)   3d20h
etcd-k8s-master1                      1/1     Running   3 (3d20h ago)   3d20h
kube-apiserver-k8s-master1            1/1     Running   2 (3d20h ago)   3d20h
kube-controller-manager-k8s-master1   1/1     Running   2 (3d20h ago)   3d20h
kube-proxy-89x7n                      1/1     Running   2 (3d20h ago)   3d20h
kube-proxy-mcjr2                      1/1     Running   2 (3d20h ago)   3d20h
kube-proxy-msv6d                      1/1     Running   2 (3d20h ago)   3d20h
kube-scheduler-k8s-master1            1/1     Running   2 (3d20h ago)   3d20h
metrics-server-7b7569c7d6-mgt2d       1/1     Running   0               82s
metrics-server-7b7569c7d6-zv57w       1/1     Running   0               82s

# 验证获取资源信息
[root@k8s-master1 metrics-server]# kubectl top node
NAME          CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
k8s-master1   120m         3%     2670Mi          34%
k8s-node1     676m         16%    9295Mi          120%
k8s-node2     655m         16%    9280Mi          120%

helm chart安装可参考:https://artifacthub.io/packages/helm/metrics-server/metrics-server

参考资料

官网文档:https://kubernetes.io/zh-cn/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/

官网github:https://github.com/kubernetes-sigs/metrics-server#installation

posted @   lldhsds  阅读(435)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示