使用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

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

程序员白话 | [原创]

点关注不迷路

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

相关推荐
秧歌star51921 分钟前
救命!Spring 启动又崩了?!循环依赖又踩坑
后端
程序员爱钓鱼31 分钟前
Python编程实战:综合项目 —— Flask 迷你博客
后端·python·面试
程序员爱钓鱼33 分钟前
Python编程实战:综合项目 —— 迷你爬虫项目
后端·python·面试
Qiuner1 小时前
Spring Boot 进阶:application.properties 与 application.yml 的全方位对比与最佳实践
java·spring boot·后端
leonardee1 小时前
【玩转全栈】----Django基本配置和介绍
java·后端
绝无仅有1 小时前
电商大厂面试题解答与场景解析(二)
后端·面试·架构
绝无仅有1 小时前
某电商大厂场景面试相关的技术文章
后端·面试·架构
李昊哲小课2 小时前
手写 Spring Boot 嵌入式Tomcat项目开发教学
spring boot·后端·tomcat
IT_陈寒2 小时前
React性能优化实战:我用这5个技巧将组件渲染速度提升了70%
前端·人工智能·后端
程序员三明治2 小时前
SpringBoot YAML 配置读取机制 + 数据库自动初始化原理
数据库·spring boot·后端