第四步下:安装rancher 监控,缺告警
本来想监控与告警一起写,但最近几天研究了rancher的告警,按照文档说法,配置了但没有触发,网上找了一些资料,有的在rancer 2.6成功的,但我用同样的方法在2.7.1和2.7.2配置了,都没有触发成功。我还专门在rancher github上留了贴 Can not send alert email · Issue #41274 · rancher/rancher · GitHub,希望后面的版本有改进,所以本文先以监控为主要内容
具体部署环境与第四步上一样
服务器IP | 用途 | 环境说明 |
10.10.10.5 | 部署rancher | centos 8 安装docker |
10.10.10.6 | k8s-master1 ,etcd | centos 8 安装docker |
10.10.10.7 | k8s-master2 ,etcd | centos 8 安装docker |
10.10.10.8 | k8s-master3,etcd | centos 8 安装docker |
10.10.10.9 | k8s-node1,worker | centos 8 安装docker |
10.10.10.10 | k8s-node2,worker | centos 8 安装docker |
这里要注意,由于安装监控的时候,启动了持久化,所以一定要先安装longhorn后才能安装告警
1、安装监控
在rancher管理界面进入某个集群,点击 “应用--->charts--->Monitoring”,具体如下图:
2、设置prometheus和grafna持久化,设置存储类型为longhorn,使用longhorn来进行持久化,具体如下图:
3、如果安装成功,会看到监控选项,点击能看到prometheus和grafana的入口,longhorn能看到prometheus和grafana的volumn,具体如下图:
注意:可以使用 用户名:admin 密码:prom-operator来登录grafana
4、设置监控指标输出地址
1)、预先准备了一个go gin的应用程序,并加入了prometheus指标的输出,默认指标输出地址是 /metrics,然后把该程序打包成镜像,部署到k8s,建立了一个service名字叫hellworld,具体代码和dockerfile如下:
package main
import (
"github.com/prometheus/client_golang/prometheus/promhttp"
"net/http"
"github.com/gin-gonic/gin"
)
// prometheus metircs
func PromHandler(handler http.Handler) gin.HandlerFunc {
return func(c *gin.Context) {
handler.ServeHTTP(c.Writer, c.Request)
}
}
func setupRouter() *gin.Engine {
// 初始化 Gin 框架默认实例,该实例包含了路由、中间件以及配置信息
r := gin.Default()
// Ping 测试路由
r.GET("/hi", func(c *gin.Context) {
c.String(http.StatusOK, "hello world!")
})
r.GET("metrics", PromHandler(promhttp.Handler()))
return r
}
func main() {
// 设置路由信息
r := setupRouter()
// 启动服务器并监听 8080 端口
r.Run(":8080")
}
FROM golang:1.20.2
# AS build
ENV GO111MODULE=on \
GOPROXY=https://goproxy.cn,direct
RUN mkdir -p /api
WORKDIR /api
COPY . .
RUN go mod download
RUN GOOS=linux CGO_ENABLED=1 GOARCH=amd64 go build -o ./app
CMD ["./app"]
2)、 在helloworld服务加上 app =hellowrold标签,具体如下图:
3)、建立 ServiceMonitor yaml,具体如下图,
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: helloworldsm
namespace: test
spec:
endpoints:
- port: helloworldport
selector:
matchLabels:
app: hellowrold
注意如下内容:
matchLabels:
app: hellowrold
#这里是第2)步加入的service标签
endpoints:
- port: helloworldport
#这里是在部署deployment的时候指定端口映射时起的名字,具体见下面第三幅图片
4)、如果一切正常,能在prometheus 目标里面看到监控指标的地址,并显示up,具体如下图: