Prometheus 监控平台部署 (云原生环境)

目录

简介

[一、基于 Kubernetes 的 Prometheus 监控方案概述](#一、基于 Kubernetes 的 Prometheus 监控方案概述)

[1. 核心组件及功能](#1. 核心组件及功能)

[2. 监控流程详解](#2. 监控流程详解)

[3. 关键监控指标说明](#3. 关键监控指标说明)

[二、Prometheus 与相关组件部署](#二、Prometheus 与相关组件部署)

[1. 克隆项目代码](#1. 克隆项目代码)

[2. 安装 Prometheus Operator](#2. 安装 Prometheus Operator)

[3. 安装 Prometheus Stack](#3. 安装 Prometheus Stack)

[4. 查看容器运行状态](#4. 查看容器运行状态)

[三、ServiceMonitor 配置与应用](#三、ServiceMonitor 配置与应用)

[1. ServiceMonitor 作用与查看](#1. ServiceMonitor 作用与查看)

[2. ServiceMonitor 工作原理](#2. ServiceMonitor 工作原理)

[四、Grafana 配置与访问](#四、Grafana 配置与访问)

[1. 修改 Grafana Service 类型](#1. 修改 Grafana Service 类型)

[2. 访问 Grafana 并配置数据源](#2. 访问 Grafana 并配置数据源)

[3. 导入监控模板](#3. 导入监控模板)

[五、Prometheus 访问配置](#五、Prometheus 访问配置)

[1. 修改 Prometheus Service 类型](#1. 修改 Prometheus Service 类型)

[2. 访问 Prometheus 并查看监控目标](#2. 访问 Prometheus 并查看监控目标)

[六、监控 MySQL 数据库](#六、监控 MySQL 数据库)

[1. 部署 MySQL](#1. 部署 MySQL)

[2. 部署 MySQL Exporter](#2. 部署 MySQL Exporter)

[3. 配置 ServiceMonitor 监控 MySQL](#3. 配置 ServiceMonitor 监控 MySQL)

[4. 在 Grafana 中添加 MySQL 监控模板](#4. 在 Grafana 中添加 MySQL 监控模板)

七、对接钉钉报警

[1. 部署 DingTalk 组件](#1. 部署 DingTalk 组件)

[2. 修改 DingTalk 配置文件](#2. 修改 DingTalk 配置文件)

[3. 启动 DingTalk 服务](#3. 启动 DingTalk 服务)

[4. 配置 Alertmanager 对接 DingTalk](#4. 配置 Alertmanager 对接 DingTalk)

[5. 测试钉钉报警](#5. 测试钉钉报警)

总结


简介

在传统架构中,Zabbix、Nagios 等监控工具占据主流,但面对 Kubernetes 这类云原生平台,它们在容器集群监控方面显得力不从心。本文将介绍基于 Kubernetes 的 Prometheus 监控方案,从环境部署到实际应用,带您一步步搭建完整的企业级监控体系,包括 Prometheus 与 Grafana 部署、服务监控配置、MySQL 监控集成以及钉钉报警对接等核心功能。

一、基于 Kubernetes 的 Prometheus 监控方案概述

1. 核心组件及功能

在 Kubernetes 监控中,node - exporter + Prometheus + Grafana 组成的组合被广泛采用,各组件功能如下:

  • node - exporter:节点级指标导出工具,可采集节点的 CPU、内存、磁盘、网络等关键指标,并通过 Metrics 接口暴露数据,为监控提供基础数据来源。
  • Prometheus:集时间序列数据库与监控报警功能于一身,能够主动抓取 Cadvisor 和 node - exporter 暴露的 Metrics 接口数据,将容器和节点的时序数据存储起来,同时提供强大的 PromQL 查询语言用于监控分析和报警设置。
  • Grafana:专业的图表和 Dashboard 工具,可将 Prometheus 作为数据源,通过编写 PromQL 查询语句,以直观的图表形式展示 K8S 集群的 CPU 使用率、内存使用率、网络流量等监控指标。

2. 监控流程详解

Kubernetes 集群的监控流程清晰且有序,主要分为以下步骤:

  1. 数据采集层部署:在 Kubernetes 集群的每个节点上安装 Cadvisor 和 node - exporter,其中 Cadvisor 负责容器级指标采集,node - exporter 负责节点级指标采集。
  2. 数据存储与处理:部署 Prometheus,通过配置使其能够抓取 Cadvisor 和 node - exporter 的 Metrics 接口数据,将容器(containers)和节点(nodes)的时序数据妥善存储。
  3. 可视化展示:利用 Grafana 构建监控仪表盘,选择 Prometheus 作为数据源,通过编写 PromQL 查询语句,直观展示 K8S 集群的各类监控指标。
  4. 报警机制设置:根据监控需求设置 Prometheus 报警规则,当监控指标超过设定阈值时,及时发送报警信息,保障集群稳定运行。

在实际部署中,node - exporter 以 DaemonSet 形式运行,确保每个节点都能被监控;Prometheus 通过部署 Prometheus Operator 以 Deployment 形式运行,实现 Metrics 抓取和报警功能;Grafana 则通过部署 Grafana Operator 实现仪表盘展示。

3. 关键监控指标说明

Kubernetes 集群的监控指标众多,涵盖集群运行状态的各个方面,主要包括:

  • 资源利用率指标:CPU 利用率(节点、Pod、容器级别)、内存利用率(节点、Pod、容器级别)、网络流量(节点、Pod、容器的收发包大小和带宽利用率)、磁盘使用率(节点磁盘空间使用情况)。
  • 组件状态指标:Pod 状态(Running、Waiting、Succeeded、Failed 等状态数量)、节点状态(Ready、NotReady 和 Unreachable 状态数量)、容器重启次数(单个容器或 Pod 内所有容器的重启次数)。
  • 核心组件性能指标:API 服务指标(Kubernetes API Server 的请求 LATENCY、请求 QPS、错误码数量等)、集群组件指标(etcd、kubelet、kube - proxy 等组件的运行指标)。

基于这些指标可设置相应报警规则,例如 CPU 利用率超过 80% 报警、内存利用率超过 90% 报警、Pod / 节点 NotReady 状态超过 10% 报警、API Server 请求 LATENCY 超过 200ms 报警等,具体阈值需根据集群大小和服务负载评估确定。

二、Prometheus 与相关组件部署

1. 克隆项目代码

首先需要从 Github 克隆 kube - prometheus 项目的指定分支,命令如下:

复制代码
[root@k8s - master ~]# git clone -b release - 0.10 https://github.com/prometheus - operator/kube - prometheus.git

命令解释 :​​git clone​​​用于克隆远程仓库代码,​​-b release - 0.10​​指定克隆的分支为 release - 0.10,该分支包含了适配当前部署需求的稳定版本代码。

2. 安装 Prometheus Operator

Prometheus Operator 是 CoreOS 开源项目,提供了 Kubernetes 原生方式运行和管理 Prometheus 的能力,能自动创建、配置和管理 Prometheus 实例,并与 Kubernetes 服务发现机制集成,大幅简化部署工作量。

安装命令如下:

复制代码
[root@k8s - master ~]# cd kube - prometheus/
[root@k8s - master kube - prometheus]# kubectl apply --server - side -f manifests/setup

命令解释 :​​cd kube - prometheus/​​​进入克隆下来的项目目录;​​kubectl apply​​​用于应用 Kubernetes 资源配置,​​--server - side​​​特性将配置逻辑从 kubectl 移至 API 服务器,解决所有权冲突问题,​​-f manifests/setup​​指定应用 setup 目录下的配置文件,完成 Prometheus Operator 的基础环境部署。

若需删除 Prometheus Operator,可执行以下命令:

复制代码
kubectl delete --ignore - not - found=true -f manifests/setup

命令解释 :​​kubectl delete​​​用于删除 Kubernetes 资源,​​--ignore - not - found=true​​​表示忽略未找到资源的错误,​​-f manifests/setup​​指定删除 setup 目录下配置文件对应的资源。

3. 安装 Prometheus Stack

待 Operator 容器启动后,安装 Prometheus Stack,命令如下:

复制代码
[root@k8s - master kube - prometheus]# kubectl apply --server - side -f manifests/

命令解释 :​​-f manifests/​​指定应用 manifests 目录下的所有配置文件,该目录包含了 Prometheus、Alertmanager、Grafana 等全套监控告警组件的配置,即 kube - prometheus - stack 全家桶。

删除 Prometheus Stack 的命令为:

复制代码
kubectl delete --ignore - not - found=true -f manifests/ -f manifests/setup

4. 查看容器运行状态

安装完成后,查看监控命名空间下的 Pod 状态,确认组件是否正常运行:

复制代码
[root@k8s - master ~]# kubectl get pod -n monitoring

正常情况下,会显示 alertmanager、blackbox - exporter、grafana、kube - state - metrics、node - exporter、prometheus 等组件的 Pod 处于 Running 状态,如下所示(部分示例):

复制代码
NAME                                   READY   STATUS    RESTARTS   AGE
alertmanager - main - 0                2/2     Running   0          79m
grafana - 5fc7f9f55d - x4gv4           1/1     Running   0          87m
prometheus - k8s - 0                   2/2     Running   0          79m

命令解释 :​​kubectl get pod​​​用于获取 Pod 列表,​​-n monitoring​​指定查看 monitoring 命名空间下的 Pod,通过 STATUS 列可确认 Pod 是否正常运行。

三、ServiceMonitor 配置与应用

1. ServiceMonitor 作用与查看

ServiceMonitor 用于定义如何监控一组动态服务,通过标签选择器确定需要监控的 Service,实现服务的自动发现和监控配置,无需手动重新配置。

查看已有的 ServiceMonitor:

复制代码
[root@k8s - master ~]# kubectl get servicemonitors -A

执行后会列出 monitoring 命名空间下的各类 ServiceMonitor,如 alertmanager - main、coredns、grafana、kube - apiserver 等,示例如下:

复制代码
NAMESPACE   NAME                     AGE
monitoring  alertmanager - main      2m9s
monitoring  coredns                 2m6s
monitoring  grafana                 2m7s

命令解释 :​​kubectl get servicemonitors​​​用于获取 ServiceMonitor 列表,​​-A​​表示查看所有命名空间下的 ServiceMonitor。

2. ServiceMonitor 工作原理

为使 Prometheus 监控 Kubernetes 内的应用,需存在 Endpoints 对象(本质是 IP 地址列表),通常由 Service 对象通过标签选择器匹配 Pod 自动填充。Prometheus Operator 的 ServiceMonitor 会发现这些 Endpoints 对象,并配置 Prometheus 监控对应的 Pod,其 spec.endpoints 部分用于配置需要抓取指标的端口。

四、Grafana 配置与访问

1. 修改 Grafana Service 类型

默认 Grafana 的 Service 类型为 ClusterIP,仅集群内部可访问,需修改为 NodePort 类型以便外部访问:

复制代码
[root@k8s - master ~]# kubectl edit svc grafana -n monitoring

命令解释 :​​kubectl edit svc​​​用于编辑 Service 配置,​​grafana​​​为 Service 名称,​​-n monitoring​​指定命名空间。

在编辑界面中,将​​type: ClusterIP​​​修改为​​type: NodePort​​,并可指定 nodePort(如 32082),修改后保存退出。

查看修改后的 Grafana Service 信息:

复制代码
[root@k8s - master ~]# kubectl get svc grafana -n monitoring

输出如下:

复制代码
NAME      TYPE       CLUSTER - IP    EXTERNAL - IP   PORT(S)          AGE
grafana   NodePort   10.99.26.98     <none>          3000:32082/TCP   28m

命令解释 :​​kubectl get svc​​用于获取 Service 信息,可看到 TYPE 已变为 NodePort,以及映射的节点端口 32082。

2. 访问 Grafana 并配置数据源

通过以下 URL 访问 Grafana:​​http://<K8S集群任意节点的IP>:32082​​​。

默认登录账号密码为 admin/admin,首次登录会提示修改密码,可选择跳过。

Grafana 默认已配置 Prometheus 数据源,若需手动配置:

  1. 单击首页左侧的 "Add your first data source"。
  2. 选择 Prometheus 数据源。
  3. 在 HTTP 配置项下的 URL 填写 "http://prometheus - k8s:9090"(prometheus - k8s 为 K8s 集群内的 Service 名),点击 "Save & Test" 保存并测试。

3. 导入监控模板

导入 Node 节点监控模板步骤:

  1. 单击首页左侧 "+" 按钮,选择 "Import"。
  2. 输入模板 ID:13105,单击 "Load" 加载。
  3. 最后单击 "Import" 完成导入,即可在 Dashboard 查看 Node 节点监控数据。

其他常用模板可在 Grafana 官网(​​https://grafana.com/grafana/dashboards/​​)查找,如 Kubernetes Cluster(7249)、Docker and system monitoring(893)等。

五、Prometheus 访问配置

1. 修改 Prometheus Service 类型

同样将 Prometheus 的 Service 类型修改为 NodePort:

复制代码
[root@k8s - master ~]# kubectl edit svc prometheus - k8s -n monitoring

在编辑界面中,将​​type: ClusterIP​​​修改为​​type: NodePort​​,并指定 nodePort(如 9090 对应 32370)。

查看修改后的 Prometheus Service 信息:

复制代码
[root@k8s - master ~]# kubectl get svc -n monitoring prometheus - k8s

输出示例:

复制代码
NAME             TYPE       CLUSTER - IP       EXTERNAL - IP   PORT(S)          AGE
prometheus - k8s  NodePort   10.105.187.25     <none>          9090:32370/TCP   33m

2. 访问 Prometheus 并查看监控目标

通过 URL​​http://<K8S集群任意节点的IP>:32370​​访问 Prometheus。在 Prometheus 界面中,点击 "Status"->"Targets" 可查看所有监控目标的状态,确认各 ServiceMonitor 对应的目标是否正常(up 状态)。

Prometheus 告警规则有三个状态:

  • inactive:未被触发。
  • pending:已触发但未达到 for 设定时间。
  • firing:触发且达到设定时间,会发送告警。

六、监控 MySQL 数据库

1. 部署 MySQL

在 Kubernetes 中部署 MySQL:

复制代码
[root@k8s - master ~]# kubectl create deploy mysql --image=mysql:5.7.23

命令解释 :​​kubectl create deploy​​​用于创建 Deployment,​​mysql​​​为 Deployment 名称,​​--image=mysql:5.7.23​​指定使用的镜像及版本。

设置 MySQL 密码:

复制代码
[root@k8s - master ~]# kubectl set env deploy/mysql MYSQL_ROOT_PASSWORD=pd123

命令解释 :​​kubectl set env​​​为 Deployment 设置环境变量,​​deploy/mysql​​​指定 Deployment,​​MYSQL_ROOT_PASSWORD=pd123​​设置 root 用户密码。

查看 MySQL Pod 状态:

复制代码
[root@k8s - master ~]# kubectl get pod

输出示例:

复制代码
NAME                     READY   STATUS    RESTARTS   AGE
mysql - 58dd9c4df4 - 17fgd 1/1     Running   0          2m53s

创建 Service 暴露 MySQL 端口:

复制代码
[root@k8s - master ~]# kubectl expose deployment mysql --type NodePort --port=3306

命令解释 :​​kubectl expose deployment​​​为 Deployment 创建 Service,​​--type NodePort​​​指定 Service 类型,​​--port=3306​​指定服务端口。

查看 MySQL Service 信息:

复制代码
[root@k8s - master ~]# kubectl get svc -l app=mysql

输出示例:

复制代码
NAME    TYPE       CLUSTER - IP     EXTERNAL - IP   PORT(S)          AGE
mysql   NodePort   10.96.116.184    <none>          3306:31152/TCP   37s

访问测试 MySQL:

复制代码
[root@k8s - master ~]# dnf -y install mysql  # 安装MySQL客户端
[root@k8s - master ~]# mysql -u root -ppwd123 -h 192.168.207.137 -P31152  # 连接测试,IP为K8S节点IP,端口为映射的NodePort

设置 MySQL 访问权限:

复制代码
[root@k8s - master ~]# grant all on *.* to exporter@'%' identified by 'exporter';

命令解释:创建 exporter 用户并授权,允许其从任意主机(%)访问所有数据库,密码为 exporter,供 exporter 采集数据使用。

2. 部署 MySQL Exporter

创建 mysql - exporter.yaml 配置文件:

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql - exporter
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s - app: mysql - exporter
  template:
    metadata:
      labels:
        k8s - app: mysql - exporter
    spec:
      containers:
      - name: mysql - exporter
        image: registry.cn - beijing.aliyuncs.com/dotbalo/mysqld - exporter
        env:
        - name: DATA_SOURCE_NAME
          value: "exporter:exporter@(mysql.default:3306)/"  # 数据库连接信息,格式为用户名:密码@(服务名:端口)/
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 9104  # exporter暴露指标的端口
---
apiVersion: v1
kind: Service
metadata:
  name: mysql - exporter
  namespace: monitoring
  labels:
    k8s - app: mysql - exporter
spec:
  type: ClusterIP
  selector:
    k8s - app: mysql - exporter
  ports:
  - name: api
    port: 9104
    protocol: TCP

部署 MySQL Exporter:

复制代码
[root@k8s - master ~]# kubectl create -f mysql - exporter.yaml

命令解释 :​​kubectl create -f​​根据配置文件创建 Deployment 和 Service 资源。

查看部署结果:

复制代码
[root@k8s - master ~]# kubectl get -f mysql - exporter.yaml

测试能否获取 metrics 数据:

复制代码
[root@k8s - master ~]# curl 10.109.16.46:9104/metrics | tail -n 5  # 10.109.16.46为mysql - exporter Service的ClusterIP

若能获取到指标数据,说明 Exporter 工作正常。

3. 配置 ServiceMonitor 监控 MySQL

创建 mysql - sm.yaml 配置文件:

复制代码
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: mysql - exporter
  namespace: monitoring
  labels:
    k8s - app: mysql - exporter
spec:
  jobLabel: k8s - app
  endpoints:
  - port: api  # 对应Service中定义的端口名
    interval: 30s  # 抓取间隔
    scheme: http
  selector:
    matchLabels:
      k8s - app: mysql - exporter  # 匹配mysql - exporter Service的标签
  namespaceSelector:
    matchNames:
    - monitoring  # 监控的命名空间

创建 ServiceMonitor:

复制代码
[root@k8s - master ~]# kubectl create -f mysql - sm.yaml

在 Prometheus 的 "Targets" 页面中,可查看 mysql - exporter 的监控目标是否正常(up 状态)。

4. 在 Grafana 中添加 MySQL 监控模板

导入 MySQL 监控模板,模板 ID:6239,步骤同 Node 节点模板导入,完成后即可查看 MySQL 监控数据。

七、对接钉钉报警

1. 部署 DingTalk 组件

下载 Prometheus Webhook DingTalk:

复制代码
wget https://github.com/timonwong/prometheus - webhook - dingtalk/releases/download/v2.0.0/prometheus - webhook - dingtalk - 2.0.0.linux - amd64.tar.gz

解压并部署:

复制代码
tar -xf prometheus - webhook - dingtalk - 2.0.0.linux - amd64.tar.gz
mv prometheus - webhook - dingtalk - 2.0.0.linux - amd64 /usr/local/dingtalk

2. 修改 DingTalk 配置文件

进入配置目录并修改配置:

复制代码
cd /usr/local/dingtalk
mv config.example.yml config.yml
vi config.yml

配置文件内容示例(关键部分):

复制代码
targets:
  webhook1:
    url: https://oapi.dingtalk.com/robot/send?access_token=你的机器人access_token
    secret: 你的机器人secret(可选)
  # 可配置多个webhook

配置解释 :​​url​​​为钉钉机器人的 Webhook 地址,需替换为实际创建的机器人地址;​​secret​​用于签名验证,增强安全性。

3. 启动 DingTalk 服务

创建系统服务配置:

复制代码
cat > /etc/systemd/system/prometheus - webhook - dingtalk.service << 'EOF'
[Unit]
Description=Prometheus Webhook DingTalk
After=network.target

[Service]
User=root
Group=root
WorkingDirectory=/usr/local/dingtalk
ExecStart=/usr/local/dingtalk/prometheus - webhook - dingtalk
Restart=always
RestartSec=5
Environment="CONFIG_FILE=/usr/local/dingtalk/config.yml"

[Install]
WantedBy=multi - user.target
EOF

启动服务并设置开机自启:

复制代码
sudo systemctl daemon - reload
sudo systemctl start prometheus - webhook - dingtalk
sudo systemctl enable prometheus - webhook - dingtalk

查看服务状态:

复制代码
sudo systemctl status prometheus - webhook - dingtalk

确认服务处于 Running 状态,同时可通过​​ss -n1pt | grep 8060​​查看 8060 端口是否被监听(默认端口)。

4. 配置 Alertmanager 对接 DingTalk

编辑 Alertmanager 配置文件:

复制代码
cd /root/kube - prometheus/manifests/
vi alertmanager - secret.yaml

修改配置文件中的 receivers 和 route 部分,示例如下:

复制代码
stringData:
  alertmanager.yml: |
    global:
      resolve_timeout: 5m
    inhibit_rules:
    - equal:
      - namespace
      - alertname
      source_matchers:
      - severity = critical
      target_matchers:
      - severity =~ info
    - equal:
      - namespace
      - alertname
      source_matchers:
      - severity = info
      target_matchers:
      - severity = info
    receivers:
    - name: webhook
      webhook_configs:
      - url: http://192.168.207.137:8060/dingtalk/webhook2/send  # DingTalk服务地址
        send_resolved: true
    route:
      group_by:
      - namespace
      group_interval: 50s
      group_wait: 30s
      receiver: webhook
      repeat_interval: 1h
      routes:
      - matchers:
        - alertname = Watchdog
        receiver: webhook
      - matchers:
        - severity = critical
        receiver: webhook
      - matchers:
        - alertname = TargetDown
        receiver: webhook

配置解释 :​​receivers​​​定义接收者为 webhook,指定 DingTalk 服务的 URL;​​route​​定义告警路由规则,将各类告警发送到 webhook 接收者。

应用配置:

复制代码
kubectl replace -f alertmanager - secret.yaml

若配置修改后未生效,可删除后重新创建:

复制代码
kubectl delete -f alertmanager - secret.yaml
kubectl create -f alertmanager - secret.yaml

修改 Alertmanager 的 Service 类型为 NodePort 以便访问:

复制代码
kubectl edit svc -n monitoring alertmanager - main

查看 Alertmanager Service 信息:

复制代码
kubectl get svc -n monitoring alertmanager - main

通过​​http://<K8S集群任意节点的IP>:<NodePort>​​访问 Alertmanager 页面。

5. 测试钉钉报警

停止 MySQL 服务模拟故障:

复制代码
kubectl scale deployment mysql --replicas=0

命令解释 :​​kubectl scale deployment​​​用于调整 Deployment 的副本数量,​​--replicas=0​​表示停止所有 MySQL Pod。

等待一段时间后,若报警规则触发,钉钉机器人会发送报警信息,确认报警功能正常后,可恢复 MySQL 服务:

复制代码
kubectl scale deployment mysql --replicas=1

总结

本文介绍了在 Kubernetes 环境中搭建 Prometheus 企业级监控体系的流程,从核心组件部署、ServiceMonitor 配置、Grafana 可视化展示,到 MySQL 数据库监控集成以及钉钉报警对接。通过这套方案,能够监控 Kubernetes 集群及应用的运行状态,及时发现并预警潜在问题,为云原生应用的稳定运行提供有力保障。在实际应用中,可根据具体需求调整监控指标和报警阈值,进一步优化监控策略。

相关推荐
__Smile°21 分钟前
Gitlab+Jenkins+K8S+Registry 建立 CI/CD 流水线
linux·ci/cd·docker·kubernetes·gitlab·jenkins
用户30750093037933 小时前
配置containerd镜像管理
kubernetes
鼠鼠我捏,要死了捏4 小时前
基于Spring Boot Actuator与Prometheus的自定义指标监控与性能优化实战指南
spring boot·prometheus·monitoring
only_Klein11 小时前
K8S部署ELK(二):部署Kafka消息队列
elk·kafka·kubernetes
Adorable老犀牛17 小时前
Exporters | 安装elasticsearch_exporter
elasticsearch·prometheus·exporter
David爱编程18 小时前
kube-proxy与CNI 的关系详解:职责划分与协同机制
云原生·容器·kubernetes
JuiceFS19 小时前
3000 台 JuiceFS Windows 客户端性能评估
后端·云原生·云计算
伊织code1 天前
MoonBit 月兔 - 云和边缘计算 AI云原生编程语言及开发平台
人工智能·云原生·边缘计算