使用kube-prometheus在K8s集群快速部署Prometheus+Grafana

转载说明:

  • 原创内容,请注明出处

官方提供了 Prometheus的端到端 Kubernetes 集群监控部署工具 kube-prometheus

包含如下组件:

1. 检查kubelet配置

默认情况下,kubelet 使用 token 身份验证和授权,否则 Prometheus 需要客户端证书,该证书赋予它对 kubelet 的完全访问权限,而不仅仅是 metrics。token 身份验证和授权可以实现更细粒度、更轻松的访问控制。

在控制平面查看 所有节点kubelet 两项配置

  • authentication.webhook.enabled 是否为 true
  • authorization.mode 是否为 Webhook
bash 复制代码
# k8s-control是我控制平面的node name
$ kubectl get --raw /api/v1/nodes/k8s-control/proxy/configz | jq .kubeletconfig.authentication.webhook.enabled

true

$ kubectl get --raw /api/v1/nodes/k8s-control/proxy/configz | jq .kubeletconfig.authorization.mode

"Webhook"

# k8s-worker-1是我工作节点的node name
$ kubectl get --raw /api/v1/nodes/k8s-worker-1/proxy/configz | jq .kubeletconfig.authentication.webhook.enabled

true

$ kubectl get --raw /api/v1/nodes/k8s-worker-1/proxy/configz | jq .kubeletconfig.authorization.mode

"Webhook"

2. 拉取 kube-prometheus 到控制平面

bash 复制代码
git clone git@github.com:prometheus-operator/kube-prometheus.git

3. 修改副本数

默认考虑到高可用,部分组件会多副本部署,但作为学习环境可以将副本数改为1节省云资源

bash 复制代码
# 一般只有这三个组件使用多副本(node-exporter特殊)
vim ./manifests/prometheus-prometheus.yaml 
vim ./manifests/prometheusAdapter-deployment.yaml
vim ./manifests/alertmanager-alertmanager.yaml

特殊node-exporter 组件使用来收集节点级指标的,因此必须在每个节点部署,不要去修改副本数

4. 部署

bash 复制代码
cd kube-prometheus
kubectl apply --server-side -f manifests/setup
kubectl wait \
    --for condition=Established \
    --all CustomResourceDefinition \
    --namespace=monitoring
kubectl apply -f manifests/

5. 通过 Ingress 暴露 Web

5.1. 修改 Web 端 URL

bash 复制代码
# 修改 Prometheus web url
$ vim ./manifests/prometheus-prometheus.yaml

## spec下添加如下项
spec:
  externalUrl: 'http://your-domain.com/prometheus'

---

# 修改 alertmanager web url
$ vim ./manifests/alertmanager-alertmanager.yaml

## spec下添加如下项
spec:
  externalUrl: 'http://your-domain.com/alertmanager'

---

# 修改 grafana web url
$ vim ./manifests/grafana-deployment.yaml

## spec.template.spec.containers.env下添加环境变量
- name: GF_SERVER_ROOT_URL
  value: "http://your-domain.com/grafana"
- name: GF_SERVER_SERVE_FROM_SUB_PATH
  value: "true"

5.2. 更新网络策略

bash 复制代码
# 允许ingress-nginx的pod访问 grafana svc
$ vim ./manifests/grafana-networkPolicy.yaml

## 在spec.podSelector.matchLabels中添加一行
spec:
	...
  podSelector:
	matchLabels:
	  app.kubernetes.io/component: grafana
	  app.kubernetes.io/name: grafana
	  app.kubernetes.io/part-of: kube-prometheus
	  app.kubernetes.io/name: ingress-nginx # 添加这行

## 应用资源修改
$ kubectl apply -f  ./manifests/grafana-networkPolicy.yaml

---

# 允许ingress-nginx的pod访问 alertmanager svc
$ vim ./manifests/alertmanager-networkPolicy.yaml

## 在spec.podSelector.matchLabels中添加一行
spec:
	...
  podSelector:
	matchLabels:
	  app.kubernetes.io/component: alert-router
      app.kubernetes.io/instance: main
      app.kubernetes.io/name: alertmanager
      app.kubernetes.io/part-of: kube-prometheus
      app.kubernetes.io/name: ingress-nginx # 添加这行

## 应用资源修改
$ kubectl apply -f  ./manifests/alertmanager-networkPolicy.yaml

5.3. 创建ingress资源

如下为 prometheusingress manifest ,grafanaalertmanager 类似

yaml 复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: prometheus-ingress
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - your-domain.com
      secretName: your-tls-secret
  rules:
    - host: "your-domain.com"
      http:
        paths:
          - path: /prometheus/?(.*)
            pathType: Prefix
            backend:
              service:
                name: prometheus-k8s
                port:
                  number: 9090

创作不易,希望大家多多支持,文章持续更新,我们下期见.

程序员白话 | [原创]

点关注不迷路

可以抖音搜索「程序员白话」,大家有任何问题都可以私聊我,知无不言~

相关推荐
一 乐8 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
码事漫谈9 小时前
Protocol Buffers 编码原理深度解析
后端
码事漫谈9 小时前
gRPC源码剖析:高性能RPC的实现原理与工程实践
后端
踏浪无痕11 小时前
AI 时代架构师如何有效成长?
人工智能·后端·架构
程序员小假11 小时前
我们来说一下无锁队列 Disruptor 的原理
java·后端
武子康12 小时前
大数据-209 深度理解逻辑回归(Logistic Regression)与梯度下降优化算法
大数据·后端·机器学习
maozexijr12 小时前
Rabbit MQ中@Exchange(durable = “true“) 和 @Queue(durable = “true“) 有什么区别
开发语言·后端·ruby
源码获取_wx:Fegn089512 小时前
基于 vue智慧养老院系统
开发语言·前端·javascript·vue.js·spring boot·后端·课程设计
独断万古他化13 小时前
【Spring 核心: IoC&DI】从原理到注解使用、注入方式全攻略
java·后端·spring·java-ee
毕设源码_郑学姐13 小时前
计算机毕业设计springboot基于HTML5的酒店预订管理系统 基于Spring Boot框架的HTML5酒店预订管理平台设计与实现 HTML5与Spring Boot技术驱动的酒店预订管理系统开
spring boot·后端·课程设计