
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
AppController是一个可在Kubernetes集群中部署的Pod,用于管理复杂应用的部署流程。在理想的Kubernetes环境中,应用无需关注依赖关系,但实际场景下,应用通常存在依赖且需按特定顺序部署(如数据库需先于其他组件部署)。虽然最佳实践是重构应用以支持无依赖启动,但复杂应用的重构周期较长,AppController可帮助用户立即在K8s上运行复杂应用。
AppController不仅能管理复杂依赖和有序执行,还完全基于Kubernetes原生对象和特性,确保当应用重构为微服务后无需任何修改,实现零厂商锁定。其团队与其他Kubernetes项目紧密合作,提供广泛且无缝的集成。
AppController基于三个核心概念:
AppController通过创建所需的Kubernetes对象(若不存在)并读取其状态来交互。对象状态用于确保其他对象的依赖条件得到满足。
依赖关系是表示部署图中顶点的对象,可通过kubectl定义和创建。它是AppController提供的第三方资源(ThirdPartyResource)。依赖关系可表示预先存在的K8s对象(非AppController编排)与资源定义之间的依赖,因此部署图的部分可依赖于AppController部署前集群中已存在的对象。依赖关系可包含元数据,用于确定其是否满足。例如,对Replica Set的依赖可接受success_factor键,其值为字符串化的百分比整数,表示需就绪的副本比例。
资源定义表示尚未创建但属于部署图一部分的Kubernetes对象,存储底层对象的清单。AppController支持大多数Kubernetes对象,若缺少某种对象类型,可通过GitHub issue反馈。资源定义与依赖关系一样,也是第三方资源(ThirdPartyResource)。
https://asciinema.org/a/c4ujuq2f8mv1cl16h0u5x0sl1.png](https://asciinema.org/a/c4ujuq2f8mv1cl16h0u5x0sl1)
sig-apps会议语音演示
Kubernetes社区会议语音演示
https://asciinema.org/a/0pzyc1tuyk9ohabohnzenvpbe.png](https://asciinema.org/a/0pzyc1tuyk9ohabohnzenvpbe)
bashkubectl create -f https://raw.githubusercontent.com/Mirantis/k8s-AppController/master/manifests/appcontroller.yaml
假设有包含单个K8s对象定义的YAML文件(目前支持Pod和Job),通过以下命令为其创建AppController资源定义:
bashcat path_to_your_pod.yaml | kubectl exec -i k8s-appcontroller kubeac wrap | kubectl create -f -
创建包含依赖关系的YAML文件:
yamlapiVersion: appcontroller.k8s/v1alpha1 kind: Dependency metadata: name: dependency-1 parent: pod/<pod_resource_name_1> child: job/<job_resource_name_2> --- apiVersion: appcontroller.k8s/v1alpha1 kind: Dependency metadata: name: dependency-2 parent: pod/<pod_resource_name_2> child: pod/<pod_resource_name_3> --- apiVersion: appcontroller.k8s/v1alpha1 kind: Dependency metadata: name: dependency-3 parent: job/<job_resource_name_1> child: job/<job_resource_name_3> --- apiVersion: appcontroller.k8s/v1alpha1 kind: Dependency metadata: name: dependency-4 parent: replicaset/<replicaset_resource_name_1> child: job/<job_resource_name_1> meta: success_factor: "80"
bashkubectl create -f dependencies_file.yaml
bashkubectl exec k8s-appcontroller ac-run
bashkubectl exec k8s-appcontroller ac-stop
使用以下命令获取当前部署状态:
bashkubectl exec k8s-appcontroller kubeac -- get-status
可使用-r参数获取详细报告,或-j参数获取JSON格式状态。
执行以下命令构建镜像:
bashmake TAG=some-docker-tag
该命令会使用glide管理依赖,并构建指定标签的容器。默认标签为mirantis/k8s-appcontroller。
可在Kubernetes集群中运行多个AppController Pod,通过为依赖关系和资源定义添加标签来分离工作负载。
AppController会根据Pod环境变量KUBERNETES_AC_LABEL_SELECTOR中提供的选择器检索对象进行处理。可通过Kubernetes环境变量机制传递该变量(manifests/appcontroller.yaml文件中已包含空环境变量,可直接填充)。
该变量的示例值可为app=app1。设置此值的AppController Pod将仅处理metadata.labels中包含app: app1键值对的依赖关系和资源定义。
kubeac deploy命令的-l标志覆盖此行为,但仅建议用于测试,不推荐在生产环境使用。以下是中期路线图的简要列表:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务