
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
kube-node-labels镜像旨在解决Kubernetes Pod无法直接访问所在节点标签的问题,通过init容器模式将节点标签信息提取并存储到共享卷中,供Pod内的应用容器通过脚本便捷访问节点标签,如主机名、区域、可用区等拓扑信息。
label.sh和topology.sh两个脚本,支持直接查询指定标签由于访问节点标签需要特定权限,需创建ClusterRole、ClusterRoleBinding和ServiceAccount:
yamlcat << EOF | kubectl apply -f - --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: print-region namespace: default rules: - apiGroups: [""] resources: ["nodes"] verbs: ["get"] --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: print-region namespace: default roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: print-region subjects: - kind: ServiceAccount name: print-region namespace: default --- kind: ServiceAccount apiVersion: v1 metadata: name: print-region namespace: default EOF
通过Job示例演示如何使用该镜像获取节点标签:
yamlcat << EOF | kubectl apply -f - --- apiVersion: batch/v1 kind: Job metadata: name: print-region namespace: default spec: ttlSecondsAfterFinished: 60 template: metadata: labels: app: print-region spec: restartPolicy: Never serviceAccountName: print-region # 使用步骤1创建的ServiceAccount containers: - name: main image: alpine command: - /bin/sh args: - -c - >- echo "Hostname: '\$(/node-data/label.sh kubernetes.io/hostname)'" && \ echo "Hostname With Default: '\$(/node-data/label.sh kubernetes.io/hostname N/A)'" && \ echo "Nonexistent: '\$(/node-data/label.sh nonexistent)'" && \ echo "Nonexistent With Default: '\$(/node-data/label.sh nonexistent N/A)'" && \ echo "Topology: '\$(/node-data/topology.sh)'" && \ echo "Topology With Default: '\$(/node-data/topology.sh N/A)'" volumeMounts: - name: node-data # 挂载共享卷,访问init容器生成的标签信息 mountPath: /node-data initContainers: - name: init image: scottcrossen/kube-node-labels:1.1.0 # 使用kube-node-labels镜像 imagePullPolicy: IfNotPresent env: - name: NODE # 从Pod spec获取当前节点名称 valueFrom: fieldRef: fieldPath: spec.nodeName - name: OUTPUT_DIR # 标签信息输出目录,需与主容器挂载路径对应 value: /output volumeMounts: - name: node-data # 挂载共享卷,存储标签信息 mountPath: /output volumes: - name: node-data # 定义emptyDir共享卷 emptyDir: {} EOF
通过Job日志验证节点标签是否成功获取:
bashkubectl -n default logs -f jobs/print-region
预期输出示例:
Hostname: 'minikube' Hostname With Default: 'minikube' Nonexistent: '' Nonexistent With Default: 'N/A' Topology: 'host=minikube' Topology With Default: 'region=N/A,zone=N/A,host=minikube'
| 变量名 | 描述 | 必需 | 默认值 |
|---|---|---|---|
| NODE | 当前节点名称,通常通过fieldRef从Pod spec获取 | 是 | 无 |
| OUTPUT_DIR | 标签信息输出目录,需与主容器共享卷挂载路径一致 | 否 | /output |
label.sh
label.sh <label-key> [default-value]label.sh kubernetes.io/hostnamelabel.sh nonexistent-label N/Atopology.sh
topology.sh [default-value]topology.shtopology.sh N/A您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务