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

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

程序员白话 | [原创]

点关注不迷路

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

相关推荐
dl7434 小时前
spirng事务原理
后端
往事随风去4 小时前
Redis的内存淘汰策略(Eviction Policies)有哪些?
redis·后端·算法
秦禹辰4 小时前
宝塔面板安装MySQL数据库并通过内网穿透工具实现公网远程访问
开发语言·后端·golang
lypzcgf4 小时前
Coze源码分析-资源库-删除插件-后端源码-应用和领域服务层
后端·go·coze·coze插件·coze源码分析·智能体平台·ai应用平台
lssjzmn4 小时前
Spring Web 异步响应实战:从 CompletableFuture 到 ResponseBodyEmitter 的全链路优化
java·前端·后端·springboot·异步·接口优化
shark_chili4 小时前
程序员必知的底层原理:CPU缓存一致性与MESI协议详解
后端
愿时间能学会宽恕5 小时前
SpringBoot后端开发常用工具详细介绍——SpringSecurity认证用户保证安全
spring boot·后端·安全
CodeSheep5 小时前
稚晖君又开始摇人了,有点猛啊!
前端·后端·程序员
小宁爱Python5 小时前
Django 从环境搭建到第一个项目
后端·python·django