编辑
2024-04-01
Docker
00

目录

需求
flask服务端
制作镜像
生成yaml文件
部署 flask webhook
测试

需求

做一个flask的server端,接收alertmanager发送的告警并打印。

flask服务端

bash
# app.py 内容 from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/') def index(): return 'Hello' @app.route('/alert', methods=['POST']) def alert(): # 获取当前时间 current_time = datetime.datetime.now() # 格式化时间为 '年-月-日 时:分:秒' 的格式 formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S") # 解析 JSON 数据 data = request.get_json() print("Received alert " + formatted_time + ":", data) # 做一些处理,比如发送邮件、短信等 # process_alert(data) # 返回成功响应 return jsonify(status="success", message="Alert received") if __name__ == '__main__': app.run(host='0.0.0.0', port=8080)
# 运行flask程序 python3 app.py

制作镜像

bash
# 生成 requirements.txt 文件 pip freeze > requirements.txt # 编写 Dockerfile 文件 # Dockerfile 文件内容 cat > Dockerfile <<EOF # 使用官方 Python 运行时作为父镜像 FROM python:3.8-slim # 设置工作目录为 /app WORKDIR /app # 将当前目录内容复制到位于 /app 中的容器中 COPY . /app # 安装 requirements.txt 中指定的所有必需包 RUN pip install --no-cache-dir -r requirements.txt # 使端口 8080 可供此容器外的环境使用 EXPOSE 8080 # # 定义环境变量 # ENV FLASK_APP=app.py # ENV FLASK_RUN_HOST=0.0.0.0 # 运行 Flask 应用 CMD ["python3", "app.py"] EOF # 制作镜像 docker build -t flask-webhook . # 将镜像上传到 dockerhub docker tag flask-webhook:latest mrliulei/flask-webhook:v1 docker push mrliulei/flask-webhook:v1

生成yaml文件

bash
cat > flask-webhook.yaml <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: flask-app-deployment spec: replicas: 2 selector: matchLabels: app: flask-app template: metadata: labels: app: flask-app spec: containers: - name: flask-app image: mrliulei/flask-webhook:v1 ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: flask-app-service spec: type: NodePort ports: - port: 80 targetPort: 8080 nodePort: 30007 protocol: TCP selector: app: flask-app EOF

部署 flask webhook

bash
kubectl create -f flask-webhook.yaml

测试

  • 修改alertmanager config,发送端到我们的webhook
  • 然后查看该日志就可以了
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:liulei

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!