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

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

程序员白话 | [原创]

点关注不迷路

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

相关推荐
千码君201613 小时前
Go语言:对其语法的一些见解
开发语言·后端·golang
yuuki23323313 小时前
【C语言】预处理详解
c语言·windows·后端
合作小小程序员小小店13 小时前
web网页开发,在线%考试,教资,题库%系统demo,基于vue,html,css,python,flask,随机分配,多角色,前后端分离,mysql数据库
前端·vue.js·后端·前端框架·flask
顾漂亮13 小时前
Redis深度探索
java·redis·后端·spring·缓存
努力也学不会java13 小时前
【Spring】Spring事务和事务传播机制
java·开发语言·人工智能·spring boot·后端·spring
小姐姐味道14 小时前
Claude Skills:被过度吹嘘的的概念翻新!
后端·github·claude
新青年57914 小时前
Go语言项目打包上线流程
开发语言·后端·golang
陈随易14 小时前
PaddleOCR-VL可太强了,图片识别转文字的巅峰之作
前端·后端·程序员
Ray6614 小时前
Delete vs Truncate vs Drop
后端