kubernetes资源监控(Metrics-server、Dashboard图形化监控)

k8s资源监控

Metrics-Server是集群核心监控数据的聚合器,用来替换之前的heapster。

容器相关的 Metrics 主要来自于 kubelet 内置的 cAdvisor 服务,有了Metrics-Server之后,用户就可以通过标准的 Kubernetes API 来访问到这些监控数据。
Metrics API 只可以查询当前的度量数据,并不保存历史数据。
Metrics API URI 为 /apis/metrics.k8s.io/,在 k8s.io/metrics 维护。
必须部署 metrics-server 才能使用该 API,metrics-server 通过调用 Kubelet Summary API 获取数据。
示例:
http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/nodes
http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/nodes/
http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/namespace//pods/

Metrics Server 并不是 kube-apiserver 的一部分,而是通过 Aggregator 这种插件机制,在独立部署的情况下同 kube-apiserver 一起统一对外服务的。

kube-aggregator 其实就是一个根据 URL 选择具体的 API 后端的代理服务器。

  • Metrics-server属于Core metrics(核心指标),提供API metrics.k8s.io,仅提供Node和Pod的CPU和内存使用情况。而其他Custom Metrics(自定义指标)由Prometheus等组件来完成。

资源下载:https://github.com/kubernetes-incubator/metrics-server

Metrics-server部署

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

#建议下载文件到本地,下载相应镜像,存放至habor仓库中,能更好的修改文件,以便运行
docker pull bitnami/metrics-server:0.4.2

状态必须是running

[root@server2 监控]# kubectl get pod -n kube-system
metrics-server-7f9d59986d-tsjg4           1/1     Running   12         13m

部署后改错

部署后查看Metrics-server的Pod日志:
eg:
kubectl logs -n kube-system metrics-server-7f9d59986d-tsjg4

  • 错误1:dial tcp: lookup server2 on 10.96.0.10:53: no such host

    • 这是因为没有内网的DNS服务器,所以metrics-server无法解析节点名字。可以直接修改coredns的configmap,讲各个节点的主机名加入到hosts中,这样所有Pod都可以从CoreDNS中解析各个节点的名字。

    • $ kubectl edit configmap coredns -n kube-system
      apiVersion: v1
      data:
      Corefile: |

      ready
      hosts {
      172.25.0.11 server1
      172.25.0.12 server2
      172.25.0.13 server3
      fallthrough
      }
      kubernetes cluster.local in-addr.arpa ip6.arpa {

解析后
删掉pod,重载

[root@server2 metrics]# kubectl  delete  pod -n kube-system  coredns-7f89b7bc75-6qrcp 
pod "coredns-7f89b7bc75-6qrcp" deleted
[root@server2 metrics]# kubectl  delete  pod -n kube-system  coredns-7f89b7bc75-slwxx  --force 
  • 报错2:x509: certificate signed by unknown authority

启用TLS Bootstrap 证书签发
需要在master端和每个节点处都进行此操作

  • vim /var/lib/kubelet/config.yaml

    serverTLSBootstrap: true

  • systemctl restart kubelet

  • $ kubectl get csr

NAME        AGE     REQUESTOR                     CONDITION
csr-f29hk   5s      system:node:node-standard-2   Pending
csr-n9pvr   3m31s   system:node:node-standard-3   Pending
  • $ kubectl certificate approve csr-n9pvr
    certificatesigningrequest.certificates.k8s.io/csr-n9pvr approved

  • 报错3: Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)
    如果metrics-server正常启动,没有错误,应该就是网络问题。修改metrics-server的Pod 网络模式:
    hostNetwork: true

  • 部署成功后就可以看到

  • server2: master端

    • $kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes/server2"
{"kind":"NodeMetrics","apiVersion":"metrics.k8s.io/v1beta1","metadata":{"name":"server2","selfLink":"/apis/metrics.k8s.io/v1beta1/nodes/server2","creationTimestamp":"2021-03-25T21:52:12Z"},"timestamp":"2021-03-25T21:51:51Z","window":"30s","usage":{"cpu":"136114266n","memory":"1324632Ki"}}
  • $kubectl top node
NAME      CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
server2   137m         6%     1293Mi          68%       
server3   62m          3%     594Mi           66%   

Dashboard部署

Dashboard可以给用户提供一个可视化的 Web 界面来查看当前集群的各种信息。用户可以用 Kubernetes Dashboard 部署容器化的应用、监控应用的状态、执行故障排查任务以及管理 Kubernetes 各种资源。

网址:https://github.com/kubernetes/dashboard

下载部署文件:

  • $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml
[root@server2 监控]# kubectl -n  kubernetes-dashboard get svc
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
dashboard-metrics-scraper   ClusterIP   10.99.152.77     <none>        8000/TCP   56s
kubernetes-dashboard        ClusterIP   10.104.113.243   <none>        443/TCP    56s

修改为NodePort方式,以便外部访问

kubectl -n kubernetes-dashboard edit svc kubernetes-dashboard

Type: NodePort

通过节点ip: port的方式访问


[root@server2 监控]# kubectl -n  kubernetes-dashboard get svc
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.99.152.77     <none>        8000/TCP        2m59s
kubernetes-dashboard        NodePort    10.104.113.243   <none>        443:32100/TCP   2m59s

登陆dashboard需要认证,需要获取dashboard pod的token:
$ kubectl describe secrets kubernetes-dashboard-token-**** -n kubernetes-dashboard

[root@server2 监控]# kubectl get secrets   -n kubernetes-dashboard
NAME                               TYPE                                  DATA   AGE
default-token-dcx2k                kubernetes.io/service-account-token   3      5m4s
kubernetes-dashboard-certs         Opaque                                0      5m4s
kubernetes-dashboard-csrf          Opaque                                1      5m4s
kubernetes-dashboard-key-holder    Opaque                                2      5m4s
kubernetes-dashboard-token-24mbr   kubernetes.io/service-account-token   3      5m4s
[root@server2 监控]# kubectl describe secrets  kubernetes-dashboard-token-24mbr -n kubernetes-dashboard

kubernetes资源监控(Metrics-server、Dashboard图形化监控)

kubernetes资源监控(Metrics-server、Dashboard图形化监控)

默认dashboard对集群没有操作权限,需要授权:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard

能图形化动态管理

kubernetes资源监控(Metrics-server、Dashboard图形化监控)

kubernetes资源监控(Metrics-server、Dashboard图形化监控)

  • Dashboard如果无法展示metrics-server的数据指标,可以通过以下两种方式解决:

  • 修改dashboard-metrics-scraper 的Pod网络模式: hostNetwork: true

  • 通过node或pod的亲和性设置,让dashboard-metrics-scraper和metrics-server的Pod处于同一个node节点。

上一篇:Kubernetes 集成 KubeEdge 需要注意的问题汇总


下一篇:k8s从入门到放弃-第十章DashBoard