1、概述

本文档主要介绍如何在k8s集群中部署prometheus server用来作为监控的数据采集服务器,这样做可以很方便的对k8s集群中的指标、pod的、节点的指标进行采集和监控。

2、下载镜像并且上传到本地的habor

可以先将prometheus server的镜像下载并且导入到本地的镜像仓库中。

镜像版本信息

  1. docker pull prom/prometheus:v2.33.1

3、节点添加标签

为了保证prometheus的数据可以在重启或者重新调度之后依然在一个主机上,可以考虑设置节点标签,然后通过标签的方式将pod绑定到该节点上,当然也可以用pvc的方式。

3.1、查看节点的标签

  1. [root@nccztsjb-node-23 ~]# kubectl get nodes --show-labels
  2. NAME STATUS ROLES AGE VERSION LABELS
  3. nccztsjb-node-23 Ready control-plane,master 23d v1.23.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=nccztsjb-node-23,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
  4. nccztsjb-node-24 Ready <none> 23d v1.23.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=nccztsjb-node-24,kubernetes.io/os=linux
  5. nccztsjb-node-25 Ready ingress 23d v1.23.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=nccztsjb-node-25,kubernetes.io/os=linux,node-role.kubernetes.io/ingress=
  6. [root@nccztsjb-node-23 ~]#

3.2、在nccztsjb-node-25加入标签

  1. [root@nccztsjb-node-23 ~]# kubectl label node nccztsjb-node-25 node-role.kubernetes.io/prometheus-server=
  2. node/nccztsjb-node-25 labeled
  3. [root@nccztsjb-node-23 ~]# kubectl get nodes
  4. NAME STATUS ROLES AGE VERSION
  5. nccztsjb-node-23 Ready control-plane,master 23d v1.23.2
  6. nccztsjb-node-24 Ready <none> 23d v1.23.2
  7. nccztsjb-node-25 Ready ingress,prometheus-server 23d v1.23.2

标签已经增加。

4、创建yaml配置文件

  1. cat >prometheus.yaml <<EOF
  2. ---
  3. # 创建命名空间
  4. apiVersion: v1
  5. kind: Namespace
  6. metadata:
  7. name: monitoring
  8. ---
  9. # 创建serviceaccount
  10. apiVersion: v1
  11. kind: ServiceAccount
  12. metadata:
  13. name: prometheus
  14. namespace: monitoring
  15. ---
  16. # 对serviceaccount进行授权绑定,给cluster-admin角色权限
  17. apiVersion: rbac.authorization.k8s.io/v1
  18. kind: ClusterRoleBinding
  19. metadata:
  20. name: prometheus
  21. roleRef:
  22. apiGroup: rbac.authorization.k8s.io
  23. kind: ClusterRole
  24. name: cluster-admin
  25. subjects:
  26. - kind: ServiceAccount
  27. name: prometheus
  28. namespace: monitoring
  29. ---
  30. # 创建configmap用来指定配置,本例主要是获取cadvisor数据即容器数据
  31. apiVersion: v1
  32. kind: ConfigMap
  33. metadata:
  34. name: prometheus-config
  35. labels:
  36. name: prometheus-config
  37. namespace: monitoring
  38. data:
  39. prometheus.yml: |-
  40. global:
  41. scrape_interval: 5s
  42. evaluation_interval: 5s
  43. rule_files:
  44. - /etc/prometheus/prometheus.rules
  45. alerting:
  46. alertmanagers:
  47. - scheme: http
  48. static_configs:
  49. - targets:
  50. - "alertmanager.monitoring.svc:9093"
  51. scrape_configs:
  52. - job_name: "kubernetes-cadvisor"
  53. scrape_interval: 10s
  54. scrape_timeout: 10s
  55. scheme: https #要加,否则默认使用http的协议
  56. metrics_path: /metrics/cadvisor
  57. tls_config:
  58. ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  59. insecure_skip_verify: true
  60. authorization:
  61. credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  62. kubernetes_sd_configs:
  63. - role: node
  64. relabel_configs:
  65. - action: labelmap
  66. regex: __meta_kubernetes_node_label_(.+)
  67. ---
  68. #创建deployment
  69. apiVersion: apps/v1
  70. kind: Deployment
  71. metadata:
  72. name: prometheus
  73. namespace: monitoring
  74. spec:
  75. selector:
  76. matchLabels:
  77. app: prometheus
  78. replicas: 1
  79. template:
  80. metadata:
  81. labels:
  82. app: prometheus
  83. spec:
  84. securityContext:
  85. runAsUser: 0
  86. runAsGroup: 0
  87. fsGroup: 0
  88. serviceAccountName: prometheus
  89. containers:
  90. - name: prometheus
  91. image: 172.20.58.152/prom/prometheus:v2.33.1
  92. ports:
  93. - containerPort: 9090
  94. name: default
  95. resources:
  96. requests:
  97. cpu: 500m
  98. memory: 500M
  99. limits:
  100. cpu: 1
  101. memory: 1Gi
  102. volumeMounts:
  103. - name: config-volume
  104. mountPath: /etc/prometheus
  105. - name: prometheus-data
  106. mountPath: /prometheus
  107. volumes:
  108. - name: config-volume
  109. configMap:
  110. name: prometheus-config
  111. - name: prometheus-data #设置数据存储盘在本地
  112. hostPath:
  113. path: /data/prometheus/data
  114. type: ""
  115. nodeSelector:
  116. node-role.kubernetes.io/prometheus-server: "" #使用3中创建的标签
  117. ---
  118. # 创建service可以用于外部的访问,端口30909
  119. kind: Service
  120. apiVersion: v1
  121. metadata:
  122. name: prometheus
  123. namespace: monitoring
  124. spec:
  125. selector:
  126. app: prometheus
  127. type: LoadBalancer
  128. ports:
  129. - protocol: TCP
  130. port: 9090
  131. targetPort: 9090
  132. nodePort: 30909
  133. EOF

5、安装delployment

基于4中创建的yaml配置文件来部署deploymetn

  1. [root@nccztsjb-node-23 ~]# kubectl apply -f prometheus.yaml
  2. namespace/monitoring created
  3. serviceaccount/prometheus created
  4. clusterrolebinding.rbac.authorization.k8s.io/prometheus created
  5. configmap/prometheus-config created
  6. deployment.apps/prometheus created
  7. service/prometheus created

查看创建的pod

  1. [root@nccztsjb-node-23 ~]# kubectl get pod -n monitoring -o wide
  2. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  3. prometheus-55b9769449-2tq4l 1/1 Running 0 51s 172.39.21.81 nccztsjb-node-25 <none> <none>
  4. [root@nccztsjb-node-23 ~]#

已经运行并且是运行在节点nccztsjb-node-25上的。

6、访问prometheus

prometheus本身是包含了一个web界面的,可以通过service直接访问。

查看service

  1. [root@nccztsjb-node-23 ~]# kubectl get svc -n monitoring
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. prometheus LoadBalancer 10.98.172.41 <pending> 9090:30909/TCP 2m28s
  4. [root@nccztsjb-node-23 ~]#

使用任意的节点IP:30909进行访问

status->targets可以看到target的信息

OK,可以看到配置的job的信息。

以上就是在k8s中部署prometheus server的过程,如果想要更改prometheus.yml的配置,修改configmap就可以。

后面会有部署node export和通过grafana显示的部署过程。

k8s集群中部署prometheus server的更多相关文章

  1. 终于解决 k8s 集群中部署 nodelocaldns 的问题

    自从开始在 kubernetes 集群中部署 nodelocaldns 以提高 dns 解析性能以来,一直被一个问题困扰,只要一部署 nodelocaldns ,在 coredns 中添加的 rewr ...

  2. 实操教程丨如何在K8S集群中部署Traefik Ingress Controller

    注:本文使用的Traefik为1.x的版本 在生产环境中,我们常常需要控制来自互联网的外部进入集群中,而这恰巧是Ingress的职责. Ingress的主要目的是将HTTP和HTTPS从集群外部暴露给 ...

  3. k8s集群中部署Rook-Ceph高可用集群

    先决条件 为确保您有一个准备就绪的 Kubernetes 集群Rook,您可以按照这些说明进行操作. 为了配置 Ceph 存储集群,至少需要以下本地存储选项之一: 原始设备(无分区或格式化文件系统) ...

  4. 使用Kubeadm创建k8s集群之部署规划(三十)

    前言 上一篇我们讲述了使用Kubectl管理k8s集群,那么接下来,我们将使用kubeadm来启动k8s集群. 部署k8s集群存在一定的挑战,尤其是部署高可用的k8s集群更是颇为复杂(后续会讲).因此 ...

  5. K8S集群安装部署

    K8S集群安装部署   参考地址:https://www.cnblogs.com/xkops/p/6169034.html 1. 确保系统已经安装epel-release源 # yum -y inst ...

  6. docker swarm英文文档学习-8-在集群中部署服务

    Deploy services to a swarm在集群中部署服务 集群服务使用声明式模型,这意味着你需要定义服务的所需状态,并依赖Docker来维护该状态.该状态包括以下信息(但不限于): 应该运 ...

  7. k8s 集群中的etcd故障解决

    一次在k8s集群中创建实例发现etcd集群状态出现连接失败状况,导致创建实例失败.于是排查了一下原因. 问题来源 下面是etcd集群健康状态: [root@docker01 ~]# cd /opt/k ...

  8. 将 master 节点服务器从 k8s 集群中移除并重新加入

    背景 1 台 master 加入集群后发现忘了修改主机名,而在 k8s 集群中修改节点主机名非常麻烦,不如将 master 退出集群改名并重新加入集群(前提是用的是高可用集群). 操作步骤 ssh 登 ...

  9. k8s集群中遇到etcd集群故障的排查思路

    一次在k8s集群中创建实例发现etcd集群状态出现连接失败状况,导致创建实例失败.于是排查了一下原因. 问题来源 下面是etcd集群健康状态: 1 2 3 4 5 6 7 8 9 10 11 [roo ...

随机推荐

  1. 设置Linux的一些文本输出方式

    更新一下yum咯 yum install -y epel-release 火车 sudo yum install sl $ sl 放火 sudo yum install libaa-bin 小老鼠 s ...

  2. 简单谈谈 TCP/IP

    1.前言 IP 或 ICMP.TCP 或 UDP.TELNET 或 FTP.以及 HTTP 等都属于 TCP/IP 协议. 他们与 TCP 或 IP 的关系紧密,是互联网必不可少的组成部分.TCP/I ...

  3. phpAdmin写webshell的方法

    一.常规导入shell的操作    创建数据表导出shell    CREATE TABLE `mysql`.`shadow9` (`content` TEXT NOT NULL );    INSE ...

  4. MINItest软件架构总结

    MINItest软件架构总结 ----helloWen MINItest软件架构总结1. Problem Description2. Analysis3. Solution3.1. 通过读取设备信息来 ...

  5. 《剑指offer》面试题59 - II. 队列的最大值

    问题描述 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value.push_back 和 pop_front 的均摊时间复杂度都是O(1). 若队列为空,pop_ ...

  6. 【数据结构与算法】蓄水池抽样算法(Reservoir Sampling)

    问题描述 给定一个数据流,数据流长度 N 很大,且 N 直到处理完所有数据之前都不可知,请问如何在只遍历一遍数据(O(N))的情况下,能够随机选取出 m 个不重复的数据. 比较直接的想法是利用随机数算 ...

  7. [Windows]为windows系统鼠标右键添加软件和图标

    转载自 https://blog.csdn.net/p312011150/article/details/81207059 一.打开注册表 首先打开windows的注册表,当然了,我个人倾向于 (1) ...

  8. 【刷题-LeetCode】222. Count Complete Tree Nodes

    Count Complete Tree Nodes Given a complete binary tree, count the number of nodes. Note: Definition ...

  9. 前端HTML基础之form表单

    目录 一:form表单 1.form表单功能 2.表单元素 二:form表单搭建(注册页面) 1.编写input会出现黄色阴影问题 三:完整版,前端代码(注册页面) 四:type属性介绍 1.inpu ...

  10. rm误操作 which查看命令存放路径

    目录 一:rm误操作 which查看命令存放路径 一:rm误操作 which查看命令存放路径 解决rm命令误操作 让别人使用不了自己的rm命令 将rm命令改一个名称 mv rm abc 查看命令存放路 ...