Kubernetes部署Argo相关概念及命名空间下运行Pod问题咨询
先纠正几个对Argo Workflows的认知偏差:kubectl argo是Argo官方出的kubectl插件,不是K8s原生的CRD调用方式;Argo对应的自定义资源访问端点归在argoproj.io这个API组下,不是你说的argo.前缀;Argo的Workflow这类自定义资源本质就是K8s集群里的CR对象,YAML只是这些对象的定义文件,和你写Pod YAML定义容器的逻辑完全一样。
你执行kubectl create ns argo时发现命名空间已经存在、里面有4-5个运行中的Pod,说明这个集群之前已经部署过Argo相关组件了。下面逐个回答你的问题:
1. 为什么命名空间和Argo组件都叫"argo",有特殊设计吗?
没有什么强制绑定的特殊设计,这是K8s生态的通用惯例:
- 几乎所有K8s扩展组件的官方安装文档,都会默认推荐用和组件同名的命名空间部署,方便运维时快速定位组件资源,和装Prometheus默认用
prometheus/monitoring命名空间、装cert-manager默认用cert-manager命名空间是一个逻辑,不是Argo独有的规则。 - 你完全可以把Argo装到任意自定义名字的命名空间里,不会影响任何功能,只是大家习惯用同名命名空间减少认知成本而已。
2. 执行
kubectl apply -n argo -f加载那个快速启动YAML时,是不是只创建了Argo自定义资源? 不是。这个YAML部署的是Argo Workflows的完整测试运行环境,包含的资源类型远不止自定义资源:
- 首先会创建Argo Workflows用到的所有自定义资源定义(CRD),这部分是集群级资源,不受
-n argo的命名空间参数限制,这也是你后续能创建Workflow、DAG、任务模板这类Argo资源的基础前提。 - 剩下的命名空间级资源都会部署到你指定的
argo命名空间下,包括工作流控制器、Web UI、Postgres数据库、服务账号、RBAC权限、服务暴露配置这些核心运行组件,你看到的那几个Running状态的Pod就是这些组件的运行实例。
3. 是不是存在argo命名空间、Argo资源、Argo API三个独立实体?
这三个不是平级的独立实体,是依赖、包含的关系:
argo命名空间只是K8s里的一个逻辑隔离单元,就是个装资源的“文件夹”,用来放Argo的控制器、数据库、UI这些运行组件,和其他业务命名空间没有本质区别。- 不存在独立部署的“Argo API”:Argo作为K8s扩展,装完CRD之后,K8s API Server就会自动注册
argoproj.io组下的Argo相关资源路径,所有对Argo资源的增删改查请求都是走K8s原生API通道,没有单独跑的Argo API服务。 - Argo资源(比如Workflow、CronWorkflow、WorkflowTemplate)是CRD里定义的数据结构,你提交对应YAML之后,这些对象会存在集群的etcd里,由Argo控制器监听变化,然后执行对应的DAG、脚本、容器任务。你现在没提交过Workflow类的Argo资源,不代表Argo的API路径不存在,CRD装完就已经注册生效了。
4. 那个快速启动YAML具体包含哪些内容?
这个是Argo官方提供的测试环境用一键安装清单,不用手动配置就能拉起整套可运行的环境,具体包含几类资源:
- 集群级资源:Argo Workflows全量CRD、集群范围的RBAC权限(允许控制器管理跨命名空间的工作流Pod、调用K8s API)
- argo命名空间下的工作负载:
workflow-controller:Argo核心控制器,负责监听Workflow资源变化、调度DAG任务、管理工作流Pod的全生命周期argo-server:Argo Web UI和网关服务,提供界面操作、工作流日志查看、工件管理等功能postgres:单实例Postgres数据库,用来持久化存储工作流的执行状态、历史记录,生产环境一般会替换成外部高可用数据库- 测试环境配套组件:单节点MinIO对象存储,用来存工作流产出的文件、日志等工件
- 配套配置资源:ConfigMap(存控制器、服务的运行参数)、Service(暴露UI和控制器端口)、ServiceAccount、Role/ClusterRole、权限绑定这些基础配置。
你附的截图里kubectl -n argo get pods返回的几个Running状态的Pod,就对应上面说的控制器、Argo服务、Postgres、MinIO这几个组件,和清单里的部署内容完全匹配。
内容的提问来源于stack exchange,提问作者Shivam Anand
相关产品推荐
相关产品推荐

