本文首发于本人的知乎专栏。
0 前置要求
请确认你的服务器上已正确安装Docker, Kubernetes, Ingress-Nginx。
关于Ingress-Nginx的使用,可以参考这篇。
1 Kube-state-metrics
1.1 简介
项目地址:
Kube-state-metrics 是一个与Kubernetes API服务器交互的服务,以获得关于所有API对象的所有细节,如Deployments、Pods、Daemonsets、Statefulsets等。
它主要是以Prometheus格式产生指标,其稳定性与Kubernetes API相同。总的来说,它提供的Kubernetes对象和资源指标是你无法直接从本地Kubernetes监控组件中获得的。
Kube-state-metrics 服务在/metrics URI上公开了所有的指标。Prometheus 可以抓取Kube-state-metrics 暴露的所有指标。
以下是我们可以从Kube-state-metrics中获得的一些重要指标。
- 节点状态,节点容量(CPU和内存)
- 复制集的合规性(每个部署的复制所需的/可用的/不可用的/更新的状态)
- Pod状态(等待、运行、准备等)
- Ingress 指标
- PV、PVC 指标
- Daemonset 和 Statefulset指标
- 资源请求和限制
- Job 和 Cronjob 指标
1.2 部署
我的服务器上的kubernetes版本是v1.19,所以我选用了v2.3.0版本的Kube-state-metrics。
如果你的版本与我相同,你可以直接使用下面的部署文件,否则请自行修改为可用的版本。
# clone部署文件
git clone https://github.com/devopscube/kube-state-metrics-configs.git
# 一键部署
kubectl apply -f kube-state-metrics-configs/
# 查看Deployment的状态
kubectl get deployments kube-state-metrics -n kube-system
如果你在pull k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.3.0镜像过程中遇到了问题,可以先pul我上传到Docker Hub的镜像,再重命名:
docker pull placebo0531/kube-state-metrics:v2.3.0
docker tag placebo0531/kube-state-metrics:v2.3.0 k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.3.0
然后你可以重新部署。
确认状态没有问题以后,可以进入下一步。
2 Prometheus
2.1 简介
Prometheus是一个高扩展性的开源监控框架。它为Kubernetes容器编排平台提供开箱即用的监控功能。另外,在可观察性领域,它正变得越来越流行,因为它有助于指标和警报。
Prometheus的架构如下:
2.2 部署
git clone https://github.com/Placeboy/kubernetes-prometheus.git
# 创建命名空间
kubectl create namespace monitoring
# 一键部署
kubectl apply -f kubernetes-prometheus
然后访问http:/prometheus.example.com/prometheus/graph,应该可以看到如下界面:
点击 Status → Targets,可以看到类似下面的界面:
回到主页,在搜索框中输入container_cpu_usage_seconds_total,点击回车,选择”Graph”,可以看到过去一小时各个容器的CPU使用情况:
现在我们可以进行最后一项工作——部署Grafana。
3 Grafana
3.1 简介
Grafana是一个开源的轻量级仪表盘工具。它可以与许多数据源集成,如Prometheus、AWS云观察、Stackdriver等。
3.2 部署
git clone https://github.com/Placeboy/kubernetes-grafana.git
# 一键部署
kubectl apply -f kubernetes-grafana
访问 http://你的服务器IP:32000/,可以看到如下界面:
用户名和密码都是admin。
登陆成功以后,点击加号,点击Import按钮:
我们使用ID为8588的模板,点击右边的Load:
在下拉框中选择prometheus作为数据源,点击下方的Import:
大功告成!
参考文章
How To Setup Kube State Metrics On Kubernetes Cluster