K8S-Demo集群实践16:部署Kube-Prometheus
kube-prometheus 是一整套监控解决方案,使用 Prometheus 采集集群指标,Grafana 做展示,包含如下组件:
- The Prometheus Operator
- Highly available Prometheus
- Highly available Alertmanager
- Prometheus node-exporter
- Prometheus Adapter for Kubernetes Metrics APIs (k8s-prometheus-adapter)
- kube-state-metrics
- Grafana
一、准备容器镜像
- 因为容器镜像文件较大,如果不提前推送到私有容器镜像仓库,部署过程可能会失败
1、下载容器镜像
- quay.io/prometheus-operator/prometheus-operator:v0.44.1
- quay.io/prometheus-operator/prometheus-config-reloader:v0.44.1
- quay.io/prometheus-operator/prometheus-operator:v0.44.1
- quay.io/brancz/kube-rbac-proxy:v0.8.0
- quay.io/prometheus/prometheus:v2.22.1
- quay.io/prometheus/alertmanager:v0.21.0
- quay.io/prometheus/node-exporter:v1.0.1
- directxman12/k8s-prometheus-adapter:v0.8.2
- quay.io/coreos/kube-state-metrics:v1.9.7
- grafana/grafana:7.3.5
2、并推送到私有容器镜像仓库harbor.demo
- harbor.demo/middleware/prometheus-operator/prometheus-operator:v0.44.1
- harbor.demo/middleware/prometheus-operator/prometheus-config-reloader:v0.44.1
- harbor.demo/middleware/prometheus-operator/prometheus-operator:v0.44.1
- harbor.demo/middleware/brancz/kube-rbac-proxy:v0.8.0
- harbor.demo/middleware/prometheus/prometheus:v2.22.1
- harbor.demo/middleware/prometheus/alertmanager:v0.21.0
- harbor.demo/middleware/prometheus/node-exporter:v1.0.1
- harbor.demo/middleware/k8s-prometheus-adapter:v0.8.2
- harbor.demo/middleware/coreos/kube-state-metrics:v1.9.7
- harbor.demo/middleware/grafana:7.3.5
二、部署 kube-prometheus
1、下载部署yaml文件
[root@master1 ~]# cd /opt/install
[root@master1 install]# git clone https://github.com/coreos/kube-prometheus.git
2、修改yaml文件中的容器镜像地址
- /opt/install/kube-prometheus/manifests/setup/prometheus-operator-deployment.yaml
- /opt/install/kube-prometheus/manifests/alertmanager-alertmanager.yaml
- /opt/install/kube-prometheus/manifests/grafana-deployment.yaml
- /opt/install/kube-prometheus/manifests/kube-state-metrics-deployment.yaml
- /opt/install/kube-prometheus/manifests/node-exporter-daemonset.yaml
- /opt/install/kube-prometheus/manifests/prometheus-prometheus.yaml
- /opt/install/kube-prometheus/manifests/prometheus-adapter-deployment.yaml
3、部署 prometheus-operator
[root@master1 ~]# cd /opt/install/kube-prometheus
[root@master1 kube-prometheus]# kubectl apply -f manifests/setup
4、部署 promethes metric adapter
[root@master1 ~]# cd /opt/install/kube-prometheus
[root@master1 kube-prometheus]# kubectl apply -f manifests/
三、查看运行状态
1、查看服务运行状态
[root@master1 kube-prometheus]# kubectl get svc -n monitoring
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alertmanager-main ClusterIP 10.8.182.125 <none> 9093/TCP 2d
alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 2d
grafana NodePort 10.8.31.234 <none> 3000:31253/TCP 2d
kube-state-metrics ClusterIP None <none> 8443/TCP,9443/TCP 2d
node-exporter ClusterIP None <none> 9100/TCP 2d
prometheus-adapter ClusterIP 10.8.5.198 <none> 443/TCP 2d
prometheus-k8s ClusterIP 10.8.212.162 <none> 9090/TCP 2d
prometheus-operated ClusterIP None <none> 9090/TCP 2d
prometheus-operator ClusterIP None <none> 8443/TCP 2d
- 问题:为什么有的服务ClusterIP显示为None?
- 有时不需要或不想要负载均衡,以及单独的 Service IP,遇到这种情况,可以通过指定 Cluster IP(spec.clusterIP)的值为 “None” 来创建 Headless Service
- 这个选项允许开发人员自由定义寻找服务的方式,从而降低与 Kubernetes 系统的耦合性。 应用仍然可以使用一种自注册的模式和适配器,对其它需要发现机制的系统能够很容易地基于这个 API 来构建。
- 对这类 Service 并不会分配 Cluster IP,kube-proxy 不会处理它们,而且平台也不会为它们进行负载均衡和路由。
- DNS 如何实现自动配置,依赖于 Service 是否定义了 selector。
2、查看Pod运行状态
[root@master1 kube-prometheus]# kubectl get pod -n monitoring
NAME READY STATUS RESTARTS AGE
alertmanager-main-0 2/2 Running 20 2d
alertmanager-main-1 2/2 Running 7 2d
alertmanager-main-2 2/2 Running 15 2d
grafana-5d4bc79f5b-zfzgc 1/1 Running 10 2d
kube-state-metrics-575986bd49-l7drz 3/3 Running 29 2d
node-exporter-bxk7r 2/2 Running 16 2d
node-exporter-jj7vp 2/2 Running 16 2d
node-exporter-s2rbn 2/2 Running 14 2d
node-exporter-t78rb 2/2 Running 16 2d
node-exporter-trc5c 2/2 Running 16 2d
node-exporter-zgc4d 2/2 Running 20 2d
prometheus-adapter-6dd6c8dd64-jpjx4 1/1 Running 15 2d
prometheus-k8s-0 2/2 Running 16 2d
prometheus-k8s-1 2/2 Running 21 2d
prometheus-operator-79476dd78-lw6cc 2/2 Running 8 2d
3、查看endpoints
[root@master1 kube-prometheus]# kubectl get ep -n monitoring
NAME ENDPOINTS AGE
alertmanager-main 172.8.104.54:9093,172.8.135.28:9093,172.8.166.191:9093 2d
alertmanager-operated 172.8.104.54:9094,172.8.135.28:9094,172.8.166.191:9094 + 6 more... 2d
grafana 172.8.135.30:3000 2d
kube-state-metrics 172.8.104.55:9443,172.8.104.55:8443 2d
node-exporter 192.168.66.10:9100,192.168.66.11:9100,192.168.66.12:9100 + 3 more... 2d
prometheus-adapter 172.8.104.52:6443 2d
prometheus-k8s 172.8.135.33:9090,172.8.166.190:9090 2d
prometheus-operated 172.8.135.33:9090,172.8.166.190:9090 2d
prometheus-operator 172.8.166.132:8443 2d
4、查看configmap
[root@master1 kube-prometheus]# kubectl get cm -n monitoring
NAME DATA AGE
adapter-config 1 2d
grafana-dashboard-apiserver 1 2d
grafana-dashboard-cluster-total 1 2d
grafana-dashboard-controller-manager 1 2d
grafana-dashboard-k8s-resources-cluster 1 2d
grafana-dashboard-k8s-resources-namespace 1 2d
grafana-dashboard-k8s-resources-node 1 2d
grafana-dashboard-k8s-resources-pod 1 2d
grafana-dashboard-k8s-resources-workload 1 2d
grafana-dashboard-k8s-resources-workloads-namespace 1 2d
grafana-dashboard-kubelet 1 2d
grafana-dashboard-namespace-by-pod 1 2d
grafana-dashboard-namespace-by-workload 1 2d
grafana-dashboard-node-cluster-rsrc-use 1 2d
grafana-dashboard-node-rsrc-use 1 2d
grafana-dashboard-nodes 1 2d
grafana-dashboard-persistentvolumesusage 1 2d
grafana-dashboard-pod-total 1 2d
grafana-dashboard-prometheus 1 2d
grafana-dashboard-prometheus-remote-write 1 2d
grafana-dashboard-proxy 1 2d
grafana-dashboard-scheduler 1 2d
grafana-dashboard-statefulset 1 2d
grafana-dashboard-workload-total 1 2d
grafana-dashboards 1 2d
prometheus-k8s-rulefiles-0 1 2d
四、访问 Prometheus UI
- 端口转发
[root@master1 ~]# kubectl port-forward --address 0.0.0.0 pod/prometheus-k8s-0 -n monitoring 9090:9090
Forwarding from 0.0.0.0:9090 -> 9090
Handling connection for 9090
Handling connection for 9090
- 在浏览器访问 http://192.168.66.10:9090/graph
五、访问 Grafana UI
- 通过NodePort方式暴露服务:http://192.168.66.10:31253/login
- 这里IP地址可以是集群中任何一个节点的IP地址
- 默认用户名:admin 密码:admin,第一次登录会提示设置新密码
- 登录成功看到如下界面
- 下载一个中文模板并导入 https://grafana.com/grafana/dashboards/13105,该模板全面展示集群资源,包含K8S整体资源总览、微服务资源明细、Pod资源明细及K8S网络带宽,优化重要指标展示
附专栏链接
K8S-Demo集群实践00:搭建镜像仓库Harbor+安全扫描
K8S-Demo集群实践01:准备VMware虚拟机模板
K8S-Demo集群实践02:准备VMware虚拟机3台Master+3台Node
K8S-Demo集群实践03:准备集群各组件间HTTPS通讯需要的x509证书
K8S-Demo集群实践04:部署etcd三节点高可用集群
K8S-Demo集群实践05:安装kubectl并配置集群管理员账户
K8S-Demo集群实践06:部署kube-apiserver到master节点(3个无状态实例)
K8S-Demo集群实践07:kube-apiserver高可用方案
K8S-Demo集群实践08:部署高可用kube-controller-manager集群
K8S-Demo集群实践09:部署高可用kube-scheduler集群
K8S-Demo集群实践10:部署ipvs模式的kube-proxy组件
K8S-Demo集群实践11:部署ipvs模式的kube-kubelet组件
K8S-Demo集群实践12:部署Calico网络
K8S-Demo集群实践13:部署集群CoreDNS
K8S-Demo集群实践14:部署集群监控服务Metrics Server
K8S-Demo集群实践15:部署Kubernetes Dashboard
K8S-Demo集群实践16:部署Kube-Prometheus
K8S-Demo集群实践17:部署私有云盘owncloud(10.6版本)
K8S-Demo集群实践18:构建宇宙中第一个基础容器镜像
- 先用起来,通过操作实践认识k8s,积累多了自然就理解了
- 把理解的知识分享出来,自造福田,自得福缘
- 追求简单,容易使人理解,知识的上下文也是知识的一部分,例如版本,时间等
- 欢迎留言交流,也可以提出问题,一般在周末回复和完善文档
- Jason@vip.qq.com 2021-1-28