Linux企业实战之容器(二十三)——Kubernetes(12)

kubernetes资源监控

  • 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 获取数据。
  • Metrics Server 并不是 kube-apiserver 的一部分,而是通过 Aggregator 这种插件机制,在独立部署的情况下同 kube-apiserver 一起统一对外服务的。

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

Linux企业实战之容器(二十三)——Kubernetes(12)_第1张图片

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

  • Metrics-server部署

    • 步骤一:下载yaml文件,准备好metrics-server镜像

Linux企业实战之容器(二十三)——Kubernetes(12)_第2张图片

wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml
vim components.yaml
kubectl apply -f components.yaml
kubectl get pod -n kube-system

Linux企业实战之容器(二十三)——Kubernetes(12)_第3张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第4张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第5张图片

  • 步骤二:解决部署后出现的一些问题
kubectl -n kube-system logs metrics-server-7cdfcc6666-p8fpm

问题一:dial tcp: lookup server2 on 10.96.0.10:53: no such host
Linux企业实战之容器(二十三)——Kubernetes(12)_第6张图片
这是因为没有内网的DNS服务器,所以metrics-server无法解析节点名字。可以直接修改coredns的configmap,讲各个节点的主机名加入到hosts中,这样所有Pod都可以从CoreDNS中解析各个节点的名字。

kubectl -n kube-system edit cm coredns
kubectl -n kube-system logs metrics-server-7cdfcc6666-p8fpm

Linux企业实战之容器(二十三)——Kubernetes(12)_第7张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第8张图片

  • 问题二:x509: certificate signed by unknown authority
kubectl -n kube-system logs metrics-server-7cdfcc6666-p8fpm

Linux企业实战之容器(二十三)——Kubernetes(12)_第9张图片

在超户模式下(集群节点中的三台主机都做如下操作):
vim /var/lib/kubelet/config.yaml
systemctl restart kubelet

Linux企业实战之容器(二十三)——Kubernetes(12)_第10张图片
在这里插入图片描述

kubectl get csr
kubectl certificate approve csr-mmt9w
kubectl get csr
kubectl top node

Linux企业实战之容器(二十三)——Kubernetes(12)_第11张图片
在这里插入图片描述

  • 问题三:Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)
    在这里插入图片描述
vim components.yaml
kubectl apply -f components.yaml
kubectl get pod -n kube-system
kubectl -n kube-system logs metrics-server-5579555b6b-fvjs2
kubectl top node
kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes/server1"
kubectl top pod

Linux企业实战之容器(二十三)——Kubernetes(12)_第12张图片
在这里插入图片描述

Linux企业实战之容器(二十三)——Kubernetes(12)_第13张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第14张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第15张图片
在这里插入图片描述

这种查看单一的节点的资源监控方式可能会不太清晰,我们可以安装一个小工具,这样可以看得更加清晰

Linux企业实战之容器(二十三)——Kubernetes(12)_第16张图片

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
vim /etc/yum.repos.d/epel.repo

[epel]
name=epel
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
enabled=1
gpgcheck=0

yum repolist

Linux企业实战之容器(二十三)——Kubernetes(12)_第17张图片

yum install -y jq

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

Linux企业实战之容器(二十三)——Kubernetes(12)_第18张图片

  • APIService、Service、Pod、kubelet之间的关系

Linux企业实战之容器(二十三)——Kubernetes(12)_第19张图片

  • Dashboard部署

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

相关连接:https://github.com/kubernetes/dashboard

  • 步骤一:下载部署需要的yaml文件,然后下载需要的镜像并且上传到私有仓库
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
vim recommended.yaml

Linux企业实战之容器(二十三)——Kubernetes(12)_第20张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第21张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第22张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第23张图片

  • 步骤二:使用下载好的yaml文件来创建相关的service、secret等资源,修改service方式为NodePort,以便外部访问。
kubectl apply -f recommended.yaml
kubectl get namespace
kubectl  -n kubernetes-dashboard get svc
kubectl describe svc kubernetes-dashboard  -n kubernetes-dashboard 
kubectl edit svc kubernetes-dashboard  -n kubernetes-dashboard 
kubectl describe svc kubernetes-dashboard  -n kubernetes-dashboard

Linux企业实战之容器(二十三)——Kubernetes(12)_第24张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第25张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第26张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第27张图片

  • 步骤三:查看pod所在的节点,并且查看service对外的端口,然后在浏览器进行访问
kubectl get pod -o wide -n kubernetes-dashboard
kubectl get svc -o wide -n kubernetes-dashboard
kubectl describe secrets kubernetes-dashboard-token-9ctnf -n kubernetes-dashboard

在这里插入图片描述
Linux企业实战之容器(二十三)——Kubernetes(12)_第28张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第29张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第30张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第31张图片

解决方法:

Linux企业实战之容器(二十三)——Kubernetes(12)_第32张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第33张图片

kubectl -n kubernetes-dashboard get sa
vim dashboard-rbac.yaml
kubectl apply -f dashboard-rbac.yaml

Linux企业实战之容器(二十三)——Kubernetes(12)_第34张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第35张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第36张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第37张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第38张图片
Linux企业实战之容器(二十三)——Kubernetes(12)_第39张图片

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

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

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

你可能感兴趣的:(容器)