
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
k8s-image-availability-exporter(简称k8s-iae)是一款Prometheus导出器,用于主动警告Kubernetes对象(如Deployment的image字段)中定义但在容器 registry(如Docker Registry等)中不可用的镜像。
当与运行中的Kubernetes控制器相关的容器镜像缺失时收到告警,有助于在问题显现前提前解决。有关k8s-iae的设计背景和工作原理的更多详细信息,请阅读这篇文章。
克隆本仓库后执行:
kubectl apply -f deploy/
以下是配置Prometheus或prometheus-operator从k8s-image-availability-exporter采集指标的方法。
Prometheus
yaml- job_name: image-availability-exporter honor_labels: true metrics_path: '/metrics' scheme: http kubernetes_sd_configs: - role: pod namespaces: names: - kube-system relabel_configs: - source_labels: [__meta_kubernetes_pod_label_app] regex: image-availability-exporter action: keep
prometheus-operator
yamlapiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: image-availability-exporter namespace: kube-system spec: podMetricsEndpoints: - port: http-metrics scheme: http honorLabels: true scrapeTimeout: 10s selector: matchLabels: app: image-availability-exporter namespaceSelector: matchNames: - kube-system
以下是基于这些指标配置告警的方法:
Prometheus
yamlgroups: - name: image-availability-exporter.rules rules: - alert: DeploymentImageUnavailable expr: | max by (namespace, deployment, container, image) ( k8s_image_availability_exporter_deployment_available == 0 ) annotations: description: > 检查容器 registry 中镜像 `{{ $labels.image }}` 的可用性, 位于命名空间 `{{ $labels.namespace }}`、 Deployment `{{ $labels.owner_name }}`、 容器 `{{ $labels.container }}`。 summary: 镜像 `{{ $labels.image }}` 在容器 registry 中不可用。 - alert: StatefulSetImageUnavailable expr: | max by (namespace, statefulset, container, image) ( k8s_image_availability_exporter_statefulset_available == 0 ) annotations: description: > 检查容器 registry 中镜像 `{{ $labels.image }}` 的可用性, 位于命名空间 `{{ $labels.namespace }}`、 StatefulSet `{{ $labels.owner_name }}`、 容器 `{{ $labels.container }}`。 summary: 镜像 `{{ $labels.image }}` 在容器 registry 中不可用。 - alert: DaemonSetImageUnavailable expr: | max by (namespace, daemonset, container, image) ( k8s_image_availability_exporter_daemonset_available == 0 ) annotations: description: > 检查容器 registry 中镜像 `{{ $labels.image }}` 的可用性, 位于命名空间 `{{ $labels.namespace }}`、 DaemonSet `{{ $labels.owner_name }}`、 容器 `{{ $labels.container }}`。 summary: 镜像 `{{ $labels.image }}` 在容器 registry 中不可用。 - alert: CronJobImageUnavailable expr: | max by (namespace, cronjob, container, image) ( k8s_image_availability_exporter_cronjob_available == 0 ) annotations: description: > 检查容器 registry 中镜像 `{{ $labels.image }}` 的可用性, 位于命名空间 `{{ $labels.namespace }}`、 CronJob `{{ $labels.owner_name }}`、 容器 `{{ $labels.container }}`。 summary: 镜像 `{{ $labels.image }}` 在容器 registry 中不可用。
prometheus-operator
yamlapiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: image-availability-exporter-alerts namespace: kube-system spec: groups: - name: image-availability-exporter.rules rules: - alert: DeploymentImageUnavailable expr: | max by (namespace, deployment, container, image) ( k8s_image_availability_exporter_deployment_available == 0 ) annotations: description: > 检查容器 registry 中镜像 `{{ $labels.image }}` 的可用性, 位于命名空间 `{{ $labels.namespace }}`、 Deployment `{{ $labels.owner_name }}`、 容器 `{{ $labels.container }}`。 summary: 镜像 `{{ $labels.image }}` 不可用。 - alert: StatefulSetImageUnavailable expr: | max by (namespace, statefulset, container, image) ( k8s_image_availability_exporter_statefulset_available == 0 ) annotations: description: > 检查容器 registry 中镜像 `{{ $labels.image }}` 的可用性, 位于命名空间 `{{ $labels.namespace }}`、 StatefulSet `{{ $labels.owner_name }}`、 容器 `{{ $labels.container }}`。 summary: 镜像 `{{ $labels.image }}` 在容器 registry 中不可用。 - alert: DaemonSetImageUnavailable expr: | max by (namespace, daemonset, container, image) ( k8s_image_availability_exporter_daemonset_available == 0 ) annotations: description: > 检查容器 registry 中镜像 `{{ $labels.image }}` 的可用性, 位于命名空间 `{{ $labels.namespace }}`、 DaemonSet `{{ $labels.owner_name }}`、 容器 `{{ $labels.container }}`。 summary: 镜像 `{{ $labels.image }}` 在容器 registry 中不可用。 - alert: CronJobImageUnavailable expr: | max by (namespace, cronjob, container, image) ( k8s_image_availability_exporter_cronjob_available == 0 ) annotations: description: > 检查容器 registry 中镜像 `{{ $labels.image }}` 的可用性, 位于命名空间 `{{ $labels.namespace }}`、 CronJob `{{ $labels.owner_name }}`、 容器 `{{ $labels.container }}`。 summary: 镜像 `{{ $labels.image }}` 在容器 registry 中不可用。
--bind-address — 绑定的IP地址和端口。
:8080--check-interval — 检查缺失镜像的间隔时间,采用Go time格式。
5m--ignored-images — 检查缺失镜像时忽略的镜像列表,以逗号分隔。--skip-registry-cert-verification — 是否跳过 registry 的证书验证。--namespace — 仅检查指定命名空间,而非整个K8s集群。提供以下Prometheus指标:
k8s_image_availability_exporter_<TYPE>_available — 非零值表示镜像检查成功。k8s_image_availability_exporter_<TYPE>_bad_image_format — 非零值表示image字段格式不正确。k8s_image_availability_exporter_<TYPE>_absent — 非零值表示容器 registry 中不存在该镜像的清单。k8s_image_availability_exporter_<TYPE>_registry_unavailable — 非零值表示 registry 不可用(可能由于网络中断)。k8s_image_availability_exporter_deployment_registry_v1_api_not_supported — 非零值表示使用v1 Docker Registry API,此类镜像建议通过--ignored-images命令行参数忽略。k8s_image_availability_exporter_<TYPE>_authentication_failure — 非零值表示容器 registry 认证错误,请验证imagePullSecrets。k8s_image_availability_exporter_<TYPE>_authorization_failure — 非零值表示容器 registry 授权错误,请验证imagePullSecrets。k8s_image_availability_exporter_<TYPE>_unknown_error — 非零值表示未分类错误,请查看导出器日志获取详细信息。指标名称中的<TYPE>会替换为以下值:
deploymentstatefulsetdaemonsetcronjobk8s-image-availability-exporter兼容Kubernetes 1.15+和Docker Registry V2兼容的容器 registry。
由于该导出器以Deployment形式运行,不支持需要通过节点授权访问的容器 registry。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务