ArgoCD和Kubernetes到底是什么关系?一张图彻底讲清楚 📅 2026/7/28 20:42:30 ArgoCD和Kubernetes到底是什么关系一张图彻底讲清楚别再搞混了K8s是操作系统ArgoCD是里面的“强迫症管家”一、引言一个让初学者困惑的问题前几天在技术群里看到有人问了一个很典型的问题“我装了Kubernetes又装了ArgoCD这俩到底啥关系ArgoCD是K8s的替代品吗还是说ArgoCD比K8s更底层”这个问题其实非常普遍。很多人在学习云原生时会接触到各种各样的工具——Docker、Kubernetes、Helm、ArgoCD、Istio……每个工具都有自己的Logo和文档但对于它们之间的关系很少有人能讲清楚。今天这篇文章我就用最通俗的语言把ArgoCD和Kubernetes的关系彻底讲透。一句话先给答案ArgoCD是运行在Kubernetes内部的应用程序它的全职工作就是调用Kubernetes的API来管理Kubernetes自己的资源。二、认识两个主角Kubernetes简称K8sKubernetes是一个容器编排平台。用人话说就是“你有一堆装着代码的容器Docker容器Kubernetes帮你管理它们——安排它们跑到哪台机器上、它们之间怎么通信、出故障了怎么重启。”ArgoCDArgoCD是一个GitOps持续部署工具。用人话说就是“你告诉ArgoCD‘我的K8s配置放在这个Git仓库里’ArgoCD就盯着这个仓库一旦发现仓库里的配置变了它就自动把K8s集群改成配置里写的样子。”关键来了ArgoCD要完成它的工作它必须运行在某个地方。而它选择运行的地方正是Kubernetes集群内部。如果还是有点晕别着急下面我们用四个维度来拆解它们的关系。三、维度一居住关系ArgoCD住在K8s里先问一个问题ArgoCD是安装在哪里的如果你去ArgoCD的官网它会让你执行这样一条命令bashkubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml注意看里面的关键词kubectl apply。这意味着ArgoCD是被当作一组Kubernetes资源部署到Kubernetes集群里的。当你执行完这条命令后在argocd命名空间下会出现这样一组Podtextargocd-application-controller-0 1/1 Running argocd-applicationset-controller 1/1 Running argocd-dex-server 1/1 Running argocd-redis 1/1 Running argocd-repo-server 1/1 Running argocd-server 1/1 Running所以ArgoCD本身没有独立的服务器它完全寄生在Kubernetes集群中运行。关系很简单Kubernetes是大楼提供基础设施。ArgoCD是楼里的住户被大楼容纳和保护。问题答案ArgoCD能独立运行吗不能。它必须跑在K8s集群里。K8s能没有ArgoCD吗能。K8s没有ArgoCD照样正常调度容器。谁依赖谁ArgoCD依赖K8sK8s不依赖ArgoCD。四、维度二管辖关系ArgoCD管理K8s资源如果说“住在里面”是物理关系那“管理资源”就是职能关系。传统方式你直接管K8s在没有ArgoCD的时候你跟Kubernetes交互的方式是直接调用它的APIbash# 创建一个Deployment kubectl apply -f deployment.yaml # 修改副本数 kubectl scale deployment myapp --replicas5 # 删除一个资源 kubectl delete deployment myapp你敲的每一条命令本质都是向Kubernetes API Server发送一个HTTP请求。有了ArgoCD之后ArgoCD替你来管ArgoCD的工作方式是你告诉ArgoCD“去监听这个Git仓库”ArgoCD自己定期每3分钟一次向Kubernetes API Server发送请求“查一下当前Deployment的副本数是几个”“查一下Git里定义的副本数是几个”“不一样那我帮你改一下”ArgoCD发送PATCH请求把Deployment的副本数改回Git定义的值所以ArgoCD不是取代了Kubernetes而是成为了Kubernetes的“超级管理员”。问题答案谁最终执行部署Kubernetes通过它的API Server和SchedulerArgoCD做什么指挥Kubernetes去执行通过调用APIArgoCD能绕过K8s直接操作容器吗不能。它所有操作都是通过K8s API完成的。五、维度三能力扩展ArgoCD给K8s装上了“新能力”接下来这个问题有点进阶但理解了会让你对云原生生态有质的认识。Kubernetes本身并不知道什么是“GitOps”。Kubernetes内置的控制器Controller能做的事情是有限的ReplicaSet Controller确保Pod数量始终等于用户指定的值。Deployment Controller管理滚动更新和回滚。Service Controller管理负载均衡和网络。但没有任何一个内置控制器知道“从Git仓库拉配置”或“对比Git和集群状态”。那ArgoCD是怎么让Kubernetes理解GitOps的呢通过CRD自定义资源。当ArgoCD被安装到K8s集群时它会向Kubernetes注册几个新的API资源类型yaml# 这不是K8s原生认识的资源是ArgoCD注册的 apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: myapp这些CRD的出现让Kubernetes的API Server认识了新的“词汇”。从此以后你可以执行bashkubectl get applicationsKubernetes能够听懂并返回结果——这在安装ArgoCD之前是不可能的。比喻解释K8s是个手机操作系统iOS它自带一些核心AppArgoCD是个新安装的App它给系统增加了新功能CRD是App创建的“新文件类型”安装了ArgoCD后系统能识别.gitops文件了六、维度四依赖关系K8s是地基ArgoCD是大楼现在我们可以用一张图来总结它们的依赖关系了text┌─────────────────────────────────────────────────────┐ │ ArgoCD │ │ (跑在K8s里面的Pod通过K8s API操作K8s资源) │ │ │ │ ┌─────────────────────────────────────────────┐ │ │ │ Kubernetes │ │ │ │ (容器编排、调度、网络、存储) │ │ │ │ │ │ │ │ ┌─────────────────────────────────────┐ │ │ │ │ │ 物理服务器 / 虚拟机 │ │ │ │ │ │ (CPU、内存、硬盘、网络) │ │ │ │ │ └─────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────┘依赖链条是单向的text物理机/虚拟机 ↓ 运行 Kubernetes ↓ 被部署到 ArgoCD所以ArgoCD离开了KubernetesArgoCD的源码只是一堆Go代码完全无法运行。Kubernetes离开了ArgoCDKubernetes依然能完美运行依然能调度容器只是少了“通过Git自动部署”的功能。Kubernetes是地基ArgoCD是地基上盖的自动化大楼。地基不需要大楼也能用但大楼一旦离开地基就会崩塌。七、终极比喻工厂的故事为了让你彻底记住我再用一个“工厂指挥中心”的故事来总结。想象有一家大型工厂工厂的构成角色比喻说明Kubernetes工厂的中央指挥中心拥有对所有机器人容器和生产线服务的绝对控制权。它能指挥机器人启动、停止、重启、搬运货物。ArgoCD指挥中心里的自动工程师这个工程师身边放着一本《标准作业手册》Git仓库。他每隔3分钟就做一次检查Git仓库《标准作业手册》上面清清楚楚写着“开发环境开1台螺丝机生产环境开5台螺丝机。”工程师ArgoCD的日常工作翻开手册读取Git看到“生产环境螺丝机开5台。”转头看车间查询K8s API发现“咦怎么实际只有3台在跑”立刻冲到控制台前调用K8s API按下了“增加2台”的按钮。车间里果然多起来了2台螺丝机K8s调度新容器。回去睡3分钟醒来再重复一次。如果工程师偷懒了……如果ArgoCD这个工程师撂挑子不干了Pod宕机指挥中心Kubernetes依然会运转机器人们容器依然会干活只是没人去跟《标准手册》做比对了。只要没人乱改车间配置工厂还能正常运转。但一旦有人手动去控制台按了按钮手动kubectl把螺丝机改成8台而工程师又不在就没人把它改回5台了——这就叫“配置漂移”。ArgoCD和K8s关系的本质Kubernetes是提供“执行力”的引擎ArgoCD是为这个引擎提供“智能化大脑”的驱动程序。没有引擎驱动无用没有驱动引擎只能靠人工遥控。八、一张速查表建议收藏对比维度KubernetesArgoCD角色定位操作系统 / 基础设施应用程序 / 自动化工具运行位置物理机/虚拟机之上K8s集群内部作为Pod运行管理对象容器、存储、网络、节点K8s内部的资源Deployment、Service等交互方式提供REST APIkubectl底层调用的就是这个接口调用K8s的API来增删改查资源数据来源ETCD数据库存储集群状态Git仓库存储期望状态 ETCD存储实时状态能独立存在吗可以没有ArgoCD照样跑不可以离开K8s集群完全无法运行谁依赖谁无人依赖它它是底层基础设施完全依赖Kubernetes九、常见误区一次帮你扫清❌ 误区1“ArgoCD比K8s更底层”✅ 正解恰好相反。K8s才是底层ArgoCD是K8s之上的应用。没有K8sArgoCD无法启动。❌ 误区2“ArgoCD取代了kubectl”✅ 正解ArgoCD底层依然在用K8s API和kubectl做的事一样。它只是自动化地、周期性地帮你调用这些命令而不是取代了这些命令本身。❌ 误区3“ArgoCD有自己的部署引擎”✅ 正解ArgoCD没有独立的部署引擎。它把YAML文件发给Kubernetes具体的容器启动、网络配置、卷挂载等工作统统由Kubernetes来执行。十、总结ArgoCD和Kubernetes的关系一句话就能说清Kubernetes是ArgoCD的“宿主环境”和“执行力来源”ArgoCD是Kubernetes的“智能自动化大脑”。当你以后在面试或给别人介绍的时候只需要记住这个金字塔模型底层基础设施服务器、网络、存储中间层Kubernetes容器编排提供API上层ArgoCD应用层调用K8s API实现GitOps每层都依赖它的下一层层层递进缺一不可。这就是云原生技术栈的优雅之处——每一个工具都专注做一件事并通过标准API进行组合最终形成强大的自动化系统。如果这篇文章帮到了你点个赞让更多人看到吧有任何问题欢迎在评论区交流讨论。