
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
!https://github.com/derailed/popeye/blob/master/assets/popeye_logo.png
Popeye是一款Kubernetes集群清理工具,通过扫描运行中的集群,基于已部署资源(非磁盘配置)检测潜在问题和错误配置,帮助确保最佳实践的实施,减少集群运维的认知负担。它能报告资源分配过度或不足情况(需集群部署metric-server),且作为只读工具,不会对集群资源进行任何修改。
latest标签)、探针缺失等配置问题spinach.yml配置文件自定义资源利用率阈值、排除特定资源或检查项| 资源 | 清理项 | 别名 | |
|---|---|---|---|
| 🛀 | Node | 节点状态(未就绪、内存/磁盘/网络/PID不足等)、Pod容忍度引用节点污点、CPU/内存利用率(默认超过80%触发警告) | no |
| 🛀 | Namespace | 非活动命名空间、无效命名空间 | ns |
| 🛀 | Pod | Pod状态、容器状态、ServiceAccount存在性、容器CPU/内存利用率(默认超过80%触发警告)、镜像无标签或使用latest标签、资源请求/限制存在性、存活/就绪探针存在性、命名端口引用 | po |
| 🛀 | Service | 端点存在性、Pod标签匹配、命名端口引用 | svc |
| 🛀 | ServiceAccount | 检测潜在未使用的ServiceAccount | sa |
| 🛀 | Secrets | 检测潜在未使用的Secret或关联密钥 | sec |
| 🛀 | ConfigMap | 检测潜在未使用的ConfigMap或关联密钥 | cm |
| 🛀 | Deployment | 未使用、Pod模板验证、资源利用率 | dp, deploy |
| 🛀 | StatefulSet | 未使用、Pod模板验证、资源利用率 | sts |
| 🛀 | DaemonSet | 未使用、Pod模板验证、资源利用率 | ds |
| 🛀 | PersistentVolume | 未使用、卷绑定状态或错误 | pv |
| 🛀 | PersistentVolumeClaim | 未使用、绑定状态或卷挂载错误 | pvc |
| 🛀 | HorizontalPodAutoscaler | 未使用、利用率、最大突发检查 | hpa |
| 🛀 | PodDisruptionBudget | 未使用、最小可用配置检查 | pdb |
| 🛀 | ClusterRole | 未使用 | cr |
| 🛀 | ClusterRoleBinding | 未使用 | crb |
| 🛀 | Role | 未使用 | ro |
| 🛀 | RoleBinding | 未使用 | rb |
| 🛀 | Ingress | 有效性检查 | ing |
| 🛀 | NetworkPolicy | 有效性检查 | np |
| 🛀 | PodSecurityPolicy | 有效性检查 | psp |
基本扫描
通过Docker运行Popeye,挂载本地kubeconfig以访问集群:
shelldocker run --rm -it \ -v $HOME/.kube:/root/.kube \ derailed/popeye --context <集群上下文> -n <命名空间>
保存报告到本地
将报告保存到宿主机目录,需挂载本地目录并设置报告目录环境变量:
shelldocker run --rm -it \ -v $HOME/.kube:/root/.kube \ -e POPEYE_REPORT_DIR=/tmp/popeye \ -v /tmp:/tmp \ derailed/popeye --context <集群上下文> -n <命名空间> --save --output-file <报告文件名>
示例:保存HTML报告到当前目录
shellPOPEYE_REPORT_DIR=$(pwd) docker run --rm -it \ -v $HOME/.kube:/root/.kube \ -v $(pwd):/tmp/popeye \ derailed/popeye --save --out html --output-file cluster-report.html
保存报告到S3兼容存储
指定S3 bucket和可选子目录,支持AWS S3及MinIO等兼容存储:
shelldocker run --rm -it \ -v $HOME/.kube:/root/.kube \ -e AWS_ACCESS_KEY_ID=<访问密钥> \ -e AWS_SECRET_ACCESS_KEY=<密钥> \ derailed/popeye --s3-bucket=<bucket名>/<子目录> --out json
| 选项 | 描述 |
|---|---|
--context | 指定Kubernetes集群上下文 |
-n, --namespace | 指定命名空间(默认扫描所有命名空间) |
-f, --file | 指定spinach.yml配置文件路径 |
--save | 保存报告到文件 |
--output-file | 指定报告文件名(需配合--save使用) |
-o, --out | 指定输出格式(standard/jurassic/yaml/html/json/junit/prometheus/score) |
--s3-bucket | S3 bucket名称(含可选子目录路径) |
--s3-region | S3区域(用于非AWS兼容存储) |
--s3-endpoint | S3兼容存储的API端点URL |
--force-exit-zero | 强制退出码为0(即使报告包含错误,适用于CronJob等场景) |
| 环境变量 | 描述 | 默认值 |
|---|---|---|
POPEYE_REPORT_DIR | 报告保存目录(需配合--save使用) | 系统临时目录 |
TERM | 终端类型(需设置为xterm-256color以支持彩色输出) | 继承容器环境 |
shellexport TERM=xterm-256color
get和list权限(详见下方RBAC配置)通过-f spinach.yml指定配置文件,自定义清理规则。示例配置:
yamlpopeye: # 资源分配阈值(过度/不足分配百分比) allocations: cpu: underPercUtilization: 200 # CPU分配不足阈值(当前负载下低于200%) overPercUtilization: 50 # CPU过度分配阈值(当前负载下超过50%) memory: underPercUtilization: 200 overPercUtilization: 50 # 排除规则:跳过特定资源或检查项 excludes: # 排除v1/pods中监控命名空间的探针检查(错误码102) v1/pods: - name: rx:monitoring # 正则匹配命名空间 codes: [102] # 排除错误码102(探针缺失) # 排除icx命名空间中istio代理容器的检查 - name: rx:icx/.* # 正则匹配pod名称(格式:命名空间/pod名) containers: [istio-proxy, istio-init] # 排除特定容器 # 节点资源阈值(利用率百分比) node: limits: cpu: 90 # 节点CPU利用率超过90%触发警告 memory: 80 # 节点内存利用率超过80%触发警告 # Pod配置 pod: restarts: 3 # Pod重启次数超过3次触发警告 limits: cpu: 80 # 容器CPU利用率超过80%触发警告 memory: 75 # 容器内存利用率超过75%触发警告 # 允许的镜像仓库 registries: - quay.io - docker.io
Popeye需要以下RBAC权限以扫描集群资源,创建ClusterRole和ClusterRoleBinding:
yaml--- # ServiceAccount apiVersion: v1 kind: ServiceAccount metadata: name: popeye namespace: popeye --- # ClusterRole apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: popeye rules: - apiGroups: [""] resources: [configmaps, endpoints, limitranges, namespaces, nodes, persistentvolumes, persistentvolumeclaims, pods, secrets, serviceaccounts, services] verbs: ["get", "list"] - apiGroups: ["apps"] resources: [daemonsets, deployments, statefulsets, replicasets] verbs: ["get", "list"] - apiGroups: ["networking.k8s.io"] resources: [ingresses, networkpolicies] verbs: ["get", "list"] - apiGroups: ["autoscaling"] resources: [horizontalpodautoscalers] verbs: ["get", "list"] - apiGroups: ["policy"] resources: [poddisruptionbudgets, podsecuritypolicies] verbs: ["get", "list"] - apiGroups: ["rbac.authorization.k8s.io"] resources: [clusterroles, clusterrolebindings, roles, rolebindings] verbs: ["get", "list"] - apiGroups: ["metrics.k8s.io"] resources: [pods, nodes] verbs: ["get", "list"] --- # ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: popeye subjects: - kind: ServiceAccount name: popeye namespace: popeye roleRef: kind: ClusterRole name: popeye apiGroup: rbac.authorization.k8s.io
| 格式 | 描述 | 默认 |
|---|---|---|
| standard | 带图标和颜色的完整输出 | 是 |
| jurassic | 无图标和颜色的简洁输出 | 否 |
| yaml | YAML结构化格式 | 否 |
| html | HTML格式报告 | 否 |
| json | JSON结构化格式 | 否 |
| junit | JUnit测试报告格式(适用于CI/CD集成) | 否 |
| prometheus | Prometheus指标格式(可被Prometheus采集) | 否 |
| score | 集群清理评分(0-100分) | 否 |
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务