当前位置: 首页 > news >正文

K8S RD: Prometheus与Kubernetes高级配置与管理实践:监控、持久化、高可用及安全机制详解

Prometheus 可视化与查询界面


Prometheus 提供两种可视化方案:

  1. 原生Web界面:内置查询控制台,支持基础监控指标检索,但功能较为局限。
  2. Grafana集成方案:通过配置Grafana数据源为Prometheus,结合 PromQL 查询语言实现动态仪表盘,利用其可视化引擎动态渲染监控仪表盘,实现多维度数据分析与展示。
# Grafana配置Prometheus数据源示例 (grafana-datasource.yaml)  
apiVersion: v1  
kind: ConfigMap  
metadata:  name: grafana-datasources  
data:  prometheus.yaml: |-  apiVersion: 1  datasources:  - name: Prometheus  type: prometheus  url: http://prometheus-service:9090  # Prometheus服务地址  access: proxy  

技术细节 Grafana需通过datasources.yaml配置Prometheus数据源:

datasources:- name: Prometheus type: prometheus url: http://prometheus-server:9090 access: proxy 

核心流程为:Prometheus 采集数据 → Grafana 拉取数据 → 可视化渲染。此方案需部署 Grafana 组件并建立数据源链路

核心优势:将 Prometheus 的存储查询能力与 Grafana 的可视化引擎解耦,提升监控数据利用率

Prometheus 数据抓取模式(推 vs 拉)


1 ) 拉模式(默认)

  • 主动抓取机制:Prometheus Server 定期访问 Targets 的 /metrics 接口拉取数据
  • 工作流程:Prometheus主动从监控目标轮询拉取数据,需在配置文件中定义抓取目标(targets)。
  • 配置示例:
    # prometheus.yml 片段  
    scrape_configs:  - job_name: 'node_exporter'  static_configs:  - targets: ['node1:9100', 'node2:9100']  # 被监控节点列表  
    

2 ) 推模式(需Pushgateway中转)

被动接收机制:通过 Pushgateway 组件中转短期任务数据

Push 指标
Pull 数据
Client
Pushgateway
Prometheus
  • 工作流程:客户端主动推送数据至Pushgateway,Prometheus再从Pushgateway拉取。
  • 适用场景:短期任务或无法暴露端点的服务。
    # 客户端推送指标示例  
    echo "metric_name 3.14" | curl --data-binary @- http://pushgateway:9091/metrics/job/job_name  
    
  • 典型用例:批处理任务、生命周期短暂的容器等无法暴露HTTP端点的场景
  • 关键约束:Pushgateway 不适用持久化监控场景,可能引发数据堆积问题。

核心差异: 推模式适用于短生命周期任务(如批处理作业),拉模式适合常驻服务监控。

Prometheus 持久化存储配置


存储类型与配置方法

存储方式配置要点适用场景
本地存储--storage.tsdb.path=/data 指定TSDB路径单机测试环境
远程存储(NFS/S3)配置 remote_writeremote_read 指向外部存储系统分布式环境
PVC动态卷通过StorageClass动态绑定云存储(AWS EBS, Ceph等)Kubernetes集群部署

1 ) 本地存储

配置prometheus.yml指定存储路径与保留策略(retention):
存储路径与保留策略(如 --storage.tsdb.path--storage.tsdb.retention.time):

# prometheus.yaml 配置片段
storage:tsdb:path: /data/prometheus  # 存储目录 retention: 30d          # 数据保留30天 

2 ) 远程存储
支持对接云存储(如S3、GCS)或分布式存储(如Ceph):

remote_write:- url: "http://remote-storage:1234/write"
remote_read:- url: "http://remote-storage:1234/read"

3 ) Kubernetes PV/PVC持久卷

通过PVC绑定底层存储(NFS/GlusterFS等),确保服务重启后数据不丢失:

# Prometheus部署模板(Helm values.yaml)
persistence:enabled: true storageClass: "ssd-storage"accessModes: ["ReadWriteOnce"]size: 100Gi 

# values.yaml (Helm部署)
server:persistentVolume:enabled: truestorageClass: "local-storage"accessModes: ["ReadWriteOnce"]size: 50Giretention: 30d  # 数据保留30天

动态绑定存储卷(支持LocalPV、NFS、Ceph)

# Prometheus StatefulSet PVC配置片段  
volumeClaimTemplates:  - metadata:  name: prometheus-storage  spec:  storageClassName: ssd  accessModes: [ "ReadWriteOnce" ]  resources:  requests:  storage: 100Gi  

优化策略:

  • 启用压缩:启用TSDB压缩减少磁盘占用(--storage.tsdb.wal-compression=true) 或 (--storage.tsdb.compression
  • 保留策略:通过retention.time控制数据生命周期。

数据生命周期管理

  • 保留策略:启动参数 --storage.tsdb.retention.time=30d 控制数据保留周期
  • 空间优化:启用 --storage.tsdb.wal-compression 进行写入压缩,降低磁盘占用
    灾难恢复原则:存储卷必须与Prometheus实例分离,防止节点故障导致数据丢失。

Prometheus 高可用(HA)部署方案


核心挑战:原生不支持HA,需借助多实例与协同工具。

Prometheus 不原生支持HA,需通过以下架构实现:

Prometheus集群
上传数据
上传数据
聚合查询
聚合查询
对象存储
Prometheus实例1
Prometheus实例2
Thanos Query
Grafana

1 ) 方案1:多实例冗余

部署配置完全相同的Prometheus实例,同时抓取相同目标,实现数据冗余。

2 ) 方法二:Thanos集成

2.1. 组件架构:

  • Sidecar容器: 每个Prometheus实例侧挂Thanos Sidecar容器,与每个Prometheus实例同Pod运行,上传数据至对象存储(如S3)
  • Store Gateway:从对象存储读取数据
  • Query:聚合多实例数据并提供统一查询入口

部署示例(Kubernetes Pod内共存):

# Prometheus + Thanos Sidecar部署片段  
containers:  
- name: prometheus  image: prom/prometheus:v2.30  
- name: thanos-sidecar  image: thanosio/thanos:v0.24  args:  - sidecar  - --prometheus.url=http://localhost:9090  - --objstore.config-file=/etc/thanos/bucket.yaml  

2.2. 故障转移:Query组件负载均衡查询请求,单实例故障不影响整体可用性。

核心组件作用

  • Thanos Sidecar:挂载于每个Prometheus Pod,实时同步数据到对象存储
    • 多实例数据通过对象存储持久化
  • Thanos Query:提供全局查询入口,合并多实例数据并实现负载均衡
    故障转移逻辑:任一Prometheus实例宕机,Query自动切换至健康实例获取数据。

Prometheus 持续查询机制 (Recording Rules)

机制:定期预计算常用查询,结果存储为新时间序列,提升查询效率

# recording_rules.yml 示例  
groups:  
- name: http_requests_total_5m  rules:  - record: job:http_requests_total:rate5m  expr: sum(rate(http_requests_total[5m])) by (job)  

持续查询(Continuous Queries) 定期执行预定义PromQL,将结果保存为新时间序列,用于:

  • 长期趋势分析(如CPU日均使用率)
  • 降低实时查询计算开销
# 示例:计算5分钟平均CPU使用率并持久化 
CREATE CONTINUOUS QUERY cq_cpu_avg ON metrics 
BEGIN SELECT avg(cpu_usage) INTO cpu_avg_5m FROM node_cpu GROUP BY time(5m), instance 
END 

Kubernetes RBAC 配置与管理

核心概念

RBAC(Role-Based Access Control)通过角色绑定控制资源权限:

  • Role:命名空间内权限集合(如Pod读写权限)
  • ClusterRole:跨命名空间权限
  • RoleBinding:将Role绑定到用户/服务账号
# 创建Role 
apiVersion: rbac.authorization.k8s.io/v1 
kind: Role 
metadata:namespace: dev name: pod-editor 
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "list", "create", "delete"]
---
# 创建RoleBinding 
apiVersion: rbac.authorization.k8s.io/v1 
kind: RoleBinding 
metadata:name: bind-pod-editor namespace: dev 
subjects:
- kind: User name: dev-user apiGroup: rbac.authorization.k8s.io 
roleRef:kind: Role name: pod-editor apiGroup: rbac.authorization.k8s.io 

Kubernetes 敏感信息传递 (Secrets)

Secret资源使用方式

1 )Secret资源加密存储

# 创建存储MySQL密码的Secret
kubectl create secret generic mysql-pass \--from-literal=password='S!B\*d$zDsb='

2 ) 环境变量注入:

env:- name: DB_PASSWORD valueFrom:secretKeyRef:name: db-secret key: password 

3 ) 卷挂载:

volumes:- name: cred-volume secret:secretName: db-secret 
containers:- volumeMounts:- name: cred-volume mountPath: "/etc/credentials"

安全实践:启用Secret加密(EncryptionConfiguration)保护静态数据。

4 )容器注入方式对比

注入方式实现命令/配置安全等级
环境变量注入env.valueFrom.secretKeyRef中(日志泄露风险)
卷挂载volumes[0].secret.secretName + volumeMounts

Kubernetes 容器安全管理


策略实施方法
最小权限原则容器以非root用户运行:securityContext: { runAsUser: 1000 }
安全上下文禁用特权容器:securityContext: { privileged: false }
网络策略隔离限制Pod间通信:NetworkPolicy 定义ingress/egress规则
镜像漏洞扫描使用Trivy/Clair扫描镜像,阻断高风险镜像部署
RBAC授权控制限制服务账号权限(如automountServiceAccountToken: false
定期更新维护滚动更新基础镜像(Alpine/Distroless)修复CVE
审计日志监控启用审计日志(--audit-log-path)并集成SIEM系统

核心防御层级

最小特权原则
安全上下文
网络策略
镜像扫描
RBAC管控

容器安全管理实践

1 )最小权限原则:容器以非root用户运行

securityContext:  runAsUser: 1000  runAsGroup: 3000  allowPrivilegeEscalation: false  

2 )安全上下文(SecurityContext):限制内核能力。

securityContext:privileged: false capabilities:drop: ["ALL"]add: ["NET_BIND_SERVICE"]  

3 )网络策略隔离:

apiVersion: networking.k8s.io/v1  
kind: NetworkPolicy  
metadata:  name: db-isolation  
spec:  podSelector:  matchLabels:  role: db  ingress:  - from:  - podSelector:  matchLabels:  role: frontend  

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy 
spec:podSelector: {matchLabels: {app: db}}ingress:- from: [{podSelector: {matchLabels: {app: web}}}]

4 )镜像漏洞扫描:使用Trivy或Clair定期扫描镜像。

5 )RBAC 与认证:强制 TLS 证书和服务账号认证

6 )定期更新:基础镜像与依赖项漏洞修复

7 )审计日志:启用 kube-apiserver 审计日志监控安全事件结合kube-audit记录安全事件

Kubernetes 多环境部署策略


隔离维度实现方式适用场景
命名空间隔离prod/staging/dev 命名空间划分环境严格隔离
配置与变量注入ConfigMap + 环境变量动态切换应用配置差异化
标签选择器nodeSelector: env: production硬件资源分区

1 ) 命名空间隔离

kubectl create namespace dev 
kubectl create namespace prod# 简单示例
kubectl create ns dev
kubectl create ns prod

2 ) 配置差异化

  • ConfigMap按环境划分:configmap-dev.yaml / configmap-prod.yaml

    envFrom:- configMapRef:name: dev-config 
    
  • 环境变量直配

    env:- name: LOG_LEVEL value: "DEBUG"
    
  • 使用Kustomize管理环境变量与配置文件

    # kustomization.yaml 
    bases:- ../base 
    patchesStrategicMerge:- env_vars.yaml 
    

3 ) 节点标签调度:分配专用节点至特定环境

kubectl label nodes node01 env=production 
kubectl label nodes node02 env=development 
# 标记节点 
kubectl label nodes node1 env=dev 
# Pod指定节点 
nodeSelector:env: dev 

spec:  nodeSelector:  tier: prod  

Kubernetes 与 CI/CD 工具集成方式


1 )Jenkins Kubernetes 插件:动态创建 Agent Pod

2 )kubeconfig 多集群管理:切换上下文部署

kubectl config use-context dev-cluster 

3 )Helm 包管理:版本化应用发布

helm upgrade --install myapp ./chart -f values-prod.yaml 

Kubernetes 集群备份方案

备份策略:

  • 全量备份(ETCD 快照)
  • 增量备份(仅变化数据)
  • 周期性执行(如每日)
  • 多版本存储
类型说明工具
ETCD全量备份备份整个集群状态etcdctl snapshot save
增量备份仅备份变更资源(如Velero)Velero + Restic
周期性备份定时任务(如CronJob)K8s CronJob
  • 全量备份:ETCD快照(含所有资源状态)。
  • 增量备份:仅备份变更数据(如Velero)。

ETCD备份命令

ETCDCTL_API=3 etcdctl snapshot save snapshot.db \--endpoints=https://127.0.0.1:2379 \--cacert=/etc/etcd/ca.crt \--cert=/etc/etcd/server.crt \--key=/etc/etcd/server.key # 简化
etcdctl --endpoints=$ENDPOINT snapshot save snapshot.db

Velero备份示例:

velero install --provider aws --bucket velero-backups \  --secret-file ./credentials-aws  
velero create backup daily-backup --include-namespaces prod  

Kubernetes 资源优化管理

1 ) 资源配额(Requests/Limits)

resources:requests:cpu: "100m"memory: "256Mi"limits:cpu: "500m"memory: "1Gi"

2 ) 自动扩缩容

  • HPA(水平扩展):基于CPU/内存扩缩Pod数量
    apiVersion: autoscaling/v2 
    kind: HorizontalPodAutoscaler 
    metadata:name: app-hpa 
    spec:scaleTargetRef:apiVersion: apps/v1 kind: Deployment name: my-app minReplicas: 2 maxReplicas: 10 metrics:- type: Resource resource:name: cpu target:type: Utilization averageUtilization: 80 
    
  • VPA(垂直扩展):自动调整Pod资源规格(注意:需避免与HPA同时使用)

3 ) 节点亲和性调度

affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: disktypeoperator: Invalues: ["ssd"]

4 ) 调度优化

  • 污点与容忍度:taints/tolerations
  • Pod拓扑分布约束:topologySpreadConstraints

容器安全补丁管理


1 ) 基础镜像更新

  • 使用Alpine/Distroless等最小化镜像
  • 定期重建镜像:FROM alpine:3.18(锁定小版本)

2 ) 漏洞扫描流水线

定期扫描镜像漏洞(工具:Trivy/Clair)

无漏洞
高危漏洞
CI构建镜像
Trivy扫描
推送至仓库
阻断部署
trivy image my-app:latest  

3 ) 更新应用程序依赖项并重构镜像

4 )安全上下文加固

securityContext:readOnlyRootFilesystem: true allowPrivilegeEscalation: false capabilities:drop: ["ALL"]

Kubernetes 故障转移与自愈

机制实现原理
控制器自愈Deployment/StatefulSet自动重建故障Pod,维持replicas数量
健康检查Liveness探针失败时重启容器;Readiness探针屏蔽流量
控制平面高可用多Master节点运行etcd/API-Server,故障时Leader选举切换
存储卷故障转移StatefulSet + PersistentVolume自动挂载新节点
服务负载均衡Service通过Endpoint列表动态路由,自动剔除不可用Pod

1 ) 控制器自愈:Deployment/ReplicaSet 维持 Pod 副本数

Deployment自愈:Pod故障后自动重建

2 ) 健康检查(Liveness探针示例):

livenessProbe:  httpGet:  path: /healthz  port: 8080  initialDelaySeconds: 15  periodSeconds: 20  

3 ) 控制平面HA:Master节点多实例部署(kube-apiserver负载均衡)

4 )服务负载均衡:Service 自动路由至健康 Pod

http://www.dtcms.com/a/597934.html

相关文章:

  • 建设一个直播网站要多少钱重庆旅游网站建设
  • 跟我一起学做网站知更鸟wordpress主题下载
  • 【开发者导航】面向生成式模型研发的多模态开发库:Diffusers
  • 小白如何搭建一个网站小游戏入口免费游戏
  • Vue Router (重定向和别名)
  • 邮件服务器是不是网站服务器如何建立自己的网站平台
  • 打工人日报#20251111
  • 服装网站建设美丽网站建设开发公司排名
  • Flutter for HarmonyOS开发指南(六):测试、调试与质量保障体系
  • 可信网站认证哪里有上海网站建设海淘科技
  • 【Java】2025版一天学会Java基础到高级
  • 内核哈希表RTL_DYNAMIC_HASH_TABLE的使用分析与总结
  • 网站的管理更新维护做网站用什么语言比较简单
  • “湖湘杯”——湖南网安基地的四年进化论
  • 网站里自动切换图片怎么做烟台百度网站推广
  • Kafka Partition 深度解析:原理、策略与实战优化
  • 基于深度学习的车辆动态红外特性预测研究
  • 不仅仅是 AI:PawSQL 如何实现“可信 AI SQL 优化”?
  • 网站的备案号网站维护 公司简介
  • Qt之信号和槽
  • Matlab编写压缩感知重建算法集
  • QT-- 理解项目文件
  • app外包网站网站建设是固定资产吗
  • MySQL核心知识点梳理
  • 天长做网站的电子商务网站基础建设
  • 【论文阅读】Hypercomplex Prompt-aware Multimodal Recommendation
  • 邵阳优秀网站建设有什么网站可以做数学题
  • Linux 内存管理 (4):buddy 管理系统的建立
  • 华为、思科、锐捷、华三定时备份配置命令对照表
  • 网站的404如何做湖北做网站的