K8s的api-server将所有的数据持久化到了etcd中,显然k8s本身不能处理这种频率的采集,而且这种监控数据变化快且都是临时数据,因此需要有一个组件单独处理他们,k8s版本只存放部分在内存中,于是metric-server的概念诞生了
Metrics-Server是集群核心监控数据的聚合器,用来替换之前的heapster
容器相关的 Metrics 主要来自于 kubelet 内置的 cAdvisor 服务,有了Metrics-Server之后,用户就可以通过标准的 Kubernetes API 来访问到这些监控数据。
metric api的使用:
(1)Metrics API 只可以查询当前的度量数据,并不保存历史数据。
(2)Metrics API URI 为 /apis/metrics.k8s.io/,在 k8s.io/metrics 维护。
(3)必须部署 metrics-server 才能使用该 API,metrics-server 通过调用 Kubelet Summary API 获取数据
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等组件来完成
Metrics server定时从Kubelet的Summary API(类似/ap1/v1/nodes/nodename/stats/summary)采集指标信息,这些聚合过的数据将存储在内存中,且以metric-api的形式暴露出去。
Metrics server复用了api-server的库来实现自己的功能,比如鉴权、版本等,为了实现将数据存放在内存中吗,去掉了默认的etcd存储,引入了内存存储(即实现Storage interface)。因为存放在内存中,因此监控数据是没有持久化的,可以通过第三方存储来拓展,这个和heapster是一致的
资源下载:https://github.com/kubernetes-incubator/metrics-server
Kubernetes 监控架构
核心流程(黑色部分):这是 Kubernetes正常工作所需要的核心度量,从 Kubelet、cAdvisor等获取度量数据,再由metrics-server提供给 Dashboard、HPA 控制器等使用。
监控流程(蓝色部分):基于核心度量构建的监控流程,比如 Prometheus 可以从 metrics-server获取核心度量,从其他数据源(如 Node Exporter 等)获取非核心度量,再基于它们构建监控告警系统。
(1)下载应用文件
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
kubectl apply -f components.yaml
kubectl -n kube-system get pod
(2)解决报错
kubectl describe -n kube-system pod metrics-server-7f9d59986d-l9z79
kubectl logs -n kube-system metrics-server-7f9d59986d-l9z79
报错2:x509: certificate signed by unknown authority
注意: Metric Server 支持一个参数 --kubelet-insecure-tls,可以跳过这一检查,然而官方也明确说了,这种方式不推荐生产使用。
(3)解决方案:启用TLS Bootstrap 证书签发
kubectl -n kube-system get svc
kubectl describe -n kube-system svc metrics-server
vim /var/lib/kubelet/config.yaml
systemctl restart kubelet.service
kubectl get csr
kubectl get pod -n kube-system
kubectl describe -n kube-system svc metrics-server
,Endpoints被分配到ip(4)测试
kubectl top node
kubectl -n kube-system top pod
kubectl get --raw “/apis/metrics.k8s.io/v1beta1/nodes/server1”
Dashboard可以给用户提供一个可视化的 Web 界面来查看当前集群的各种信息。用户可以用 Kubernetes Dashboard 部署容器化的应用、监控应用的状态、执行故障排查任务以及管理 Kubernetes 各种资源
官网:https://github.com/kubernetes/dashboard
(1)下载部署文件:
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml
(2)应用文件:kubectl apply -f recommended.yaml
kubectl get ns
kubectl -n kubernetes-dashboard get all
kubectl -n metallb-system get pod
kubectl -n kubernetes-dashboard get svc
(3) 修改服务的类型:kubectl -n kubernetes-dashboard edit svc kubernetes-dashboard
,设置外部访问的ip
kubectl -n kubernetes-dashboard get svc
kubectl -n kubernetes-dashboard describe sa kubernetes-dashboard
kubectl -n kubernetes-dashboard describe secrets kubernetes-dashboard-token-skbn6
kubectl apply -f rbac.yaml
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
Dashboard如果无法展示metrics-server的数据指标,可以通过以下两种方式解决: