news 2026/7/28 20:42:24

ArgoCD和Kubernetes到底是什么关系?一张图彻底讲清楚

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ArgoCD和Kubernetes到底是什么关系?一张图彻底讲清楚

ArgoCD和Kubernetes到底是什么关系?一张图彻底讲清楚

别再搞混了!K8s是操作系统,ArgoCD是里面的“强迫症管家”

一、引言:一个让初学者困惑的问题

前几天在技术群里,看到有人问了一个很典型的问题:

“我装了Kubernetes,又装了ArgoCD,这俩到底啥关系?ArgoCD是K8s的替代品吗?还是说ArgoCD比K8s更底层?”

这个问题其实非常普遍。很多人在学习云原生时,会接触到各种各样的工具——Docker、Kubernetes、Helm、ArgoCD、Istio……每个工具都有自己的Logo和文档,但对于它们之间的关系,很少有人能讲清楚。

今天这篇文章,我就用最通俗的语言,把ArgoCD和Kubernetes的关系彻底讲透。

一句话先给答案:

ArgoCD是运行在Kubernetes内部的应用程序,它的全职工作就是调用Kubernetes的API来管理Kubernetes自己的资源。

二、认识两个主角

Kubernetes(简称K8s)

Kubernetes是一个容器编排平台。用人话说就是:

“你有一堆装着代码的容器(Docker容器),Kubernetes帮你管理它们——安排它们跑到哪台机器上、它们之间怎么通信、出故障了怎么重启。”

ArgoCD

ArgoCD是一个GitOps持续部署工具。用人话说就是:

“你告诉ArgoCD‘我的K8s配置放在这个Git仓库里’,ArgoCD就盯着这个仓库,一旦发现仓库里的配置变了,它就自动把K8s集群改成配置里写的样子。”

关键来了:ArgoCD要完成它的工作,它必须运行在某个地方。而它选择运行的地方,正是Kubernetes集群内部。

如果还是有点晕,别着急,下面我们用四个维度来拆解它们的关系。

三、维度一:居住关系(ArgoCD住在K8s里)

先问一个问题:ArgoCD是安装在哪里的?

如果你去ArgoCD的官网,它会让你执行这样一条命令:

bash

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

注意看里面的关键词:kubectl apply

这意味着:ArgoCD是被当作一组Kubernetes资源,部署到Kubernetes集群里的。

当你执行完这条命令后,在argocd命名空间下,会出现这样一组Pod:

text

argocd-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依赖K8s,K8s不依赖ArgoCD。

四、维度二:管辖关系(ArgoCD管理K8s资源)

如果说“住在里面”是物理关系,那“管理资源”就是职能关系。

传统方式:你直接管K8s

在没有ArgoCD的时候,你跟Kubernetes交互的方式是直接调用它的API:

bash

# 创建一个Deployment kubectl apply -f deployment.yaml # 修改副本数 kubectl scale deployment myapp --replicas=5 # 删除一个资源 kubectl delete deployment myapp

你敲的每一条命令,本质都是向Kubernetes API Server发送一个HTTP请求。

有了ArgoCD之后:ArgoCD替你来管

ArgoCD的工作方式是:

  1. 你告诉ArgoCD:“去监听这个Git仓库”

  2. ArgoCD自己定期(每3分钟一次)向Kubernetes API Server发送请求:

    • “查一下,当前Deployment的副本数是几个?”

    • “查一下,Git里定义的副本数是几个?”

    • “不一样?那我帮你改一下!”

  3. ArgoCD发送PATCH请求,把Deployment的副本数改回Git定义的值

所以,ArgoCD不是取代了Kubernetes,而是成为了Kubernetes的“超级管理员”。

问题答案
谁最终执行部署?Kubernetes(通过它的API Server和Scheduler)
ArgoCD做什么?指挥Kubernetes去执行(通过调用API)
ArgoCD能绕过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认识了新的“词汇”

从此以后,你可以执行:

bash

kubectl get applications

Kubernetes能够听懂并返回结果——这在安装ArgoCD之前是不可能的。

比喻解释
K8s是个手机操作系统(iOS)它自带一些核心App
ArgoCD是个新安装的App它给系统增加了新功能
CRD是App创建的“新文件类型”安装了ArgoCD后,系统能识别.gitops文件了

六、维度四:依赖关系(K8s是地基,ArgoCD是大楼)

现在我们可以用一张图来总结它们的依赖关系了:

text

┌─────────────────────────────────────────────────────┐ │ ArgoCD │ │ (跑在K8s里面的Pod,通过K8s API操作K8s资源) │ │ │ │ ┌─────────────────────────────────────────────┐ │ │ │ Kubernetes │ │ │ │ (容器编排、调度、网络、存储) │ │ │ │ │ │ │ │ ┌─────────────────────────────────────┐ │ │ │ │ │ 物理服务器 / 虚拟机 │ │ │ │ │ │ (CPU、内存、硬盘、网络) │ │ │ │ │ └─────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────┘

依赖链条是单向的:

text

物理机/虚拟机 ↓ 运行 Kubernetes ↓ 被部署到 ArgoCD

所以:

  • ArgoCD离开了Kubernetes:ArgoCD的源码只是一堆Go代码,完全无法运行。

  • Kubernetes离开了ArgoCD:Kubernetes依然能完美运行,依然能调度容器,只是少了“通过Git自动部署”的功能。

Kubernetes是地基,ArgoCD是地基上盖的自动化大楼。地基不需要大楼也能用,但大楼一旦离开地基就会崩塌。

七、终极比喻:工厂的故事

为了让你彻底记住,我再用一个“工厂指挥中心”的故事来总结。

想象有一家大型工厂:

工厂的构成

角色比喻说明
Kubernetes工厂的中央指挥中心拥有对所有机器人(容器)和生产线(服务)的绝对控制权。它能指挥机器人启动、停止、重启、搬运货物。
ArgoCD指挥中心里的自动工程师这个工程师身边放着一本《标准作业手册》(Git仓库)。他每隔3分钟就做一次检查:
Git仓库《标准作业手册》上面清清楚楚写着:“开发环境,开1台螺丝机;生产环境,开5台螺丝机。”

工程师(ArgoCD)的日常工作

  1. 翻开手册(读取Git),看到:“生产环境,螺丝机开5台。”

  2. 转头看车间(查询K8s API),发现:“咦?怎么实际只有3台在跑?”

  3. 立刻冲到控制台前(调用K8s API),按下了“增加2台”的按钮。

  4. 车间里果然多起来了2台螺丝机(K8s调度新容器)。

  5. 回去睡3分钟,醒来再重复一次。

如果工程师偷懒了……

如果ArgoCD这个工程师撂挑子不干了(Pod宕机),指挥中心(Kubernetes)依然会运转,机器人们(容器)依然会干活,只是没人去跟《标准手册》做比对了。只要没人乱改车间配置,工厂还能正常运转。

但一旦有人手动去控制台按了按钮(手动kubectl),把螺丝机改成8台,而工程师又不在,就没人把它改回5台了——这就叫“配置漂移”。

ArgoCD和K8s关系的本质

Kubernetes是提供“执行力”的引擎,ArgoCD是为这个引擎提供“智能化大脑”的驱动程序。没有引擎,驱动无用;没有驱动,引擎只能靠人工遥控。

八、一张速查表(建议收藏)

对比维度KubernetesArgoCD
角色定位操作系统 / 基础设施应用程序 / 自动化工具
运行位置物理机/虚拟机之上K8s集群内部(作为Pod运行)
管理对象容器、存储、网络、节点K8s内部的资源(Deployment、Service等)
交互方式提供REST API(kubectl底层调用的就是这个接口)调用K8s的API来增删改查资源
数据来源ETCD数据库(存储集群状态)Git仓库(存储期望状态)+ ETCD(存储实时状态)
能独立存在吗可以(没有ArgoCD照样跑)不可以(离开K8s集群完全无法运行)
谁依赖谁无人依赖它(它是底层基础设施)完全依赖Kubernetes

九、常见误区(一次帮你扫清)

❌ 误区1:“ArgoCD比K8s更底层”

✅ 正解:恰好相反。K8s才是底层,ArgoCD是K8s之上的应用。没有K8s,ArgoCD无法启动。

❌ 误区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进行组合,最终形成强大的自动化系统。🚀


如果这篇文章帮到了你,点个赞让更多人看到吧!有任何问题欢迎在评论区交流讨论。👋

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 20:38:52

Unlock Music终极指南:免费解锁加密音乐文件的完整教程

Unlock Music终极指南:免费解锁加密音乐文件的完整教程 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: http…

作者头像 李华
网站建设 2026/7/28 20:37:46

Python异常嵌套日志处理与结构化日志实践

1. 异常嵌套日志的痛点解析在Python项目开发中,异常嵌套场景几乎无处不在。当外层异常捕获内层异常时,传统的日志记录方式往往存在三个典型问题:信息割裂:内层异常被外层捕获后,原始堆栈信息可能被覆盖日志冗余&#x…

作者头像 李华
网站建设 2026/7/28 20:36:36

当GPU显存开始说谎:用Vulkan计算技术揭开硬件故障的真相

当GPU显存开始说谎:用Vulkan计算技术揭开硬件故障的真相 【免费下载链接】memtest_vulkan Vulkan compute tool for testing video memory stability 项目地址: https://gitcode.com/gh_mirrors/me/memtest_vulkan 在数字世界的深处,你的GPU正在悄…

作者头像 李华
网站建设 2026/7/28 20:36:33

Simulink实现Dijkstra算法:自动驾驶路径规划可视化建模

1. 项目概述:当Dijkstra遇上Simulink 第一次在Simulink里实现Dijkstra算法时,我盯着那个不断闪烁的路径动画看了足足十分钟——这比单纯看代码输出直观太多了。作为自动驾驶领域最经典的最短路径算法,Dijkstra在MATLAB脚本中的实现你可能见过…

作者头像 李华
网站建设 2026/7/28 20:31:31

Axure中文语言包:3分钟让Axure RP说中文的完整指南

Axure中文语言包:3分钟让Axure RP说中文的完整指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 你是否在使用Axur…

作者头像 李华