
可观测性实验应保留哪些证据当 Kubernetes 生产集群突发 CoreDNS 响应延迟或 Pod 批量 Enter CrashLoopBackOff 时运维团队最需要的不是大模型洋洋洒洒生成的长篇分析报告而是能在 30 秒内完成诊断并降级的止损手段。很多团队在引入 AI 辅助排障后发现直接让大模型去检索未经过筛选的原始日志不仅耗时数分钟还极易返回模棱两可的修复意见错失最佳止损时机。云原生环境的止损核心在于“确定性的防线隔离与上下文编排”。大模型应当作为 SRE 知识库检索与上下文构建的“增强引擎”而非不受约束的控制终端。只有将 LLM 的智能检索、向量知识库与确定性的自动化巡检脚本相结合才能建立既快速又安全的故障止损机制。智能检索与 RAG 知识增强的上下文编排在紧急排障场景中将整个集群的原始 yaml 或日志直接投喂给大模型会迅速引发上下文污染。标准的做法是建立基于 RAG (Retrieval-Augmented Generation) 的确定性上下文编排器。当集群发生 Pod 频繁重启时自动化巡检脚本首先抓取极窄范围内的核心指标Event 列表、Recent Logs、Resource Quotas随后从向量数据库中匹配对应的历史故障 SOP拼装为高浓缩的 Prompt 输入给大模型。自动化运维巡检脚本与止损控制器设计为了实现日常巡检与故障止损的标准化我们需要编写能够被 AI 引擎和 SRE 团队共同调用的确定性巡检与止损脚本。下面的 Python 脚本展示了如何收集 K8s 节点与 Pod 的关键健康度特征将其转换为确定性 JSON 上下文并阻断任何未经授权的危险变更#!/usr/bin/env python3 # k8s_health_inspector.py import json import subprocess import sys def run_command(cmd): try: result subprocess.run(cmd, shellTrue, checkTrue, stdoutsubprocess.PIPE, stderrsubprocess.PIPE) return result.stdout.decode(utf-8) except subprocess.CalledProcessError as e: return e.stderr.decode(utf-8) def collect_cluster_context(namespacedefault): context { namespace: namespace, warning_events: [], restarting_pods: [], node_status: [] } # 1. 抓取 Warning 级别的事件 events_raw run_command( fkubectl get events -n {namespace} --field-selector typeWarning --outputjson ) try: events_json json.loads(events_raw) for item in events_json.get(items, [])[:10]: context[warning_events].append({ reason: item.get(reason), message: item.get(message), object: item.get(involvedObject, {}).get(name) }) except Exception: pass # 2. 抓取高频重启的 Pods pods_raw run_command(fkubectl get pods -n {namespace} -o json) try: pods_json json.loads(pods_raw) for pod in pods_json.get(items, []): pod_name pod[metadata][name] statuses pod.get(status, {}).get(containerStatuses, []) for s in statuses: if s.get(restartCount, 0) 3: context[restarting_pods].append({ name: pod_name, restart_count: s[restartCount], last_state: s.get(lastState) }) except Exception: pass return context def generate_llm_prompt(context): prompt f 【SRE 紧急排障上下文】 命名空间: {context[namespace]} 异常事件记录: {json.dumps(context[warning_events], ensure_asciiFalse)} 高频重启 Pod: {json.dumps(context[restarting_pods], ensure_asciiFalse)} 【规则要求】 1. 分析故障可能的物理根因如 OOM, CNI 网络失败, 磁盘 I/O 挂起。 2. 只允许推荐如下确定性止损方案 - 动作 A: 给故障节点打上 NoSchedule 污点 - 动作 B: 将 Deployment 副本数临时调整至固定安全值 - 动作 C: 阻断对应 Pod 的 Ingress 路由 严禁输出任何删除 PersistentVolume 或清空集群配置的指令 return prompt if __name__ __main__: ns sys.argv[1] if len(sys.argv) 1 else default ctx collect_cluster_context(ns) print(generate_llm_prompt(ctx))生产环境日常巡检 CronJob 部署与配置把上述自动化巡检与止损检查注入 Kubernetes 集群最稳妥的载体是配置 CronJob 配合独立的安全资源配额。# k8s-inspection-cronjob.yaml apiVersion: batch/v1 kind: CronJob metadata: name: sre-ai-context-inspector namespace: monitoring spec: schedule: */15 * * * * concurrencyPolicy: Forbid successfulJobsHistoryLimit: 3 failedJobsHistoryLimit: 5 jobTemplate: spec: template: spec: serviceAccountName: sre-inspector-sa restartPolicy: OnFailure containers: - name: inspector image: registry.internal.net/sre-tools/k8s-inspector:v1.4.2 imagePullPolicy: IfNotPresent command: [python3, /opt/tools/k8s_health_inspector.py, production] resources: limits: cpu: 200m memory: 256Mi requests: cpu: 100m memory: 128Mi securityContext: readOnlyRootFilesystem: true runAsNonRoot: true runAsUser: 10001实操排障与命令验证当收到生产告警提示流量吞吐异常下滑时运维人员应当按照如下顺序执行实操排障与确定性止损命令# 1. 快速抓取集群全局异常 Event 并按时间排序 kubectl get events --all-namespaces --field-selector typeWarning --sort-by.metadata.creationTimestamp | tail -n 20 # 2. 检查核心节点资源压榨情况 kubectl top nodes --sort-bymemory # 3. 若定位到特定 Node 物理硬件或 Docker 守护进程故障执行确定性隔离止损 (给节点打污点) kubectl taint nodes node-shanghai-prod-03 keyhardware-fault:NoSchedule # 4. 触发安全中继 API拉取向量知识库中的对应故障 SOP curl -X POST http://rag-knowledge-base.monitoring.svc:8000/v1/search_sop \ -H Content-Type: application/json \ -d {query: KubeletUnreachable NodeNotReady disk pressure, top_k: 2}通过确定性的脚本收集上下文、通过 RAG 匹配历史标准处置规程并约束 LLM 只产生白名单内的防护决策才能让 Kubernetes 生产运维在遭遇重大事故时真正实现秒级止损。