尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
生产环境部署:推式部署(Push-based)与拉式部署(Pull-based / GitOps)部署方式详解(Argo CD / Flux、GHCR、kubectl apply、GitOps)
推式push-based流水线如 Github Actions SSH 到主机执行 deploy.sh用 GitHub Environment required reviewer 做人工放行闸门。代价是生产 SSH 凭据进 GitHub Secrets可用 command 强制命令的受限 key 把权限收窄到只能跑 deploy.sh。拉式pull-based / GitOps主机上跑一个 agent 监听 GHCR/git 变化并自行应用。凭据方向反过来GitHub 拿不到生产权限。K8s 世界的 Argo CD / Flux 就是这一派也正因如此从 CI 里 kubectl apply这种做法本身在今天已经算过时了。介绍一下这两种部署方式文章目录推式Push-based与拉式Pull-based / GitOps部署方式详解一、推式部署Push-based工作原理典型流程安全闸门设计优点缺点二、拉式部署Pull-based / GitOps工作原理典型流程关键架构优势优点缺点三、对比总结四、一句话总结推式Push-based与拉式Pull-based / GitOps部署方式详解一、推式部署Push-based工作原理┌─────────────┐ SSH / API 调用 ┌─────────────┐ │ CI/CD │ ───────────────────▶ │ 生产环境 │ │ 流水线 │ 我来帮你部署 │ 主机/K8s │ └─────────────┘ └─────────────┘CI/CD 流水线主动连接到目标环境把构建好的制品镜像、二进制、配置文件等推送过去并执行部署动作。典型流程开发者 push 代码 → 触发 CICI 构建镜像 / 编译产物CI 通过SSH连接到生产主机执行deploy.sh或者 CI 调用kubectl apply把 manifest 推到集群安全闸门设计用GitHub Environment required reviewer做人工审批——流水线跑到生产阶段前必须有人点ApproveSSH 密钥存入 GitHub Secrets可用command受限密钥收窄权限# ~/.ssh/authorized_keys command/opt/deploy/deploy.sh,no-pty,no-port-forwarding ssh-rsa AAAA...这样即使密钥泄露攻击者也只能执行deploy.sh无法获得交互式 shell。优点优点说明简单直观一条脚本就能搞定适合小团队 / 早期项目反馈即时部署日志直接出现在 CI 输出里成功失败一目了然无需额外组件不需要在目标环境运行 agent缺点缺点说明凭据暴露面大生产环境 SSH 密钥 / kubeconfig 必须放在 CI 侧GitHub Secrets权限蔓延风险一旦 CI 被攻破恶意 PR 触发 workflow攻击者拿到生产凭据环境漂移如果有人绕过 CI 手动改了生产环境CI 不知道也没有记录扩展性差环境越多要管理的凭据和连接就越多二、拉式部署Pull-based / GitOps工作原理┌─────────────┐ ┌─────────────────────┐ │ Git Repo │ ◀── 持续轮询/监听 ── │ 生产环境内的 Agent │ │ (单一真相源) │ │ (Argo CD / Flux) │ └─────────────┘ └─────────────────────┘ ▲ │ │ ▼ CI 只负责 自行 apply 变更 构建 push 镜像 我来拉取最新状态注Argo CD / Flux 是目前最主流的两款 GitOps 持续交付CD工具生产环境内部运行一个 Agent指运行在生产环境Kubernetes 集群内部的代理程序/控制器。它们负责持续监控 Git 仓库中的配置并自动将这些配置同步、应用到生产集群中它持续监听 Git 仓库或镜像仓库如 GHCR的变化发现新版本后自行拉取并应用。典型流程开发者 push 代码 → 触发 CICI只负责构建镜像并 push 到 GHCR或更新 Git 仓库里的 manifest生产环境中的Argo CD / Flux Agent检测到变更Agent在集群内部执行kubectl apply完成部署如需人工放行Agent 会暂停等待审批如 Argo CD 的 Sync 审批关键架构优势┌──────────────────────────┐ │ 信任边界防火墙 │ │ │ CI 侧不可信 │ 生产侧高信任 │ ──────────────── │ ────────────────────── │ GitHub Actions │ Argo CD Agent │ ❌ 没有 kubeconfig│ ✅ 有集群权限 │ ❌ 没有 SSH 密钥 │ ✅ 有镜像拉取凭据 │ │ │ └──────────────────────────┘凭据方向反过来了CI 永远拿不到生产环境的权限生产凭据只存在于生产环境内部。优点优点说明安全性高CI 侧零生产凭据攻击面大幅缩小环境一致性Git 是单一真相源Single Source of Truth环境状态可随时审计和回滚自动修复漂移Agent 持续对比 Git 期望状态与实际状态有人手动改集群会被自动纠正多环境扩展好每个环境跑自己的 Agent各自监听不同的 Git path/branch缺点缺点说明复杂度更高需要在生产环境部署和维护 Argo CD / Flux反馈延迟部署结果不在 CI 日志里需要去看 Agent 的状态面板学习曲线团队需要理解 GitOps 理念、Reconciliation Loop 等概念三、对比总结维度推式Push拉式Pull / GitOps谁执行部署CI 流水线生产环境内的 Agent凭据在哪CI 侧GitHub Secrets生产侧Agent 本地安全模型CI 信任 → 生产生产自治CI 不信任典型工具GitHub Actions SSH/kubectlArgo CD, Flux适用场景小团队、早期项目、简单主机部署中大规模、K8s 原生、多环境kubectl apply 在哪跑CI 里已过时 ❌参考文章为什么说“CI 里跑 kubectl apply“已过时集群内 Agent 里推荐 ✅四、一句话总结推式CI “拿着钥匙去开门”——简单但钥匙容易丢。拉式生产环境自己看门、自己取快递——CI 只负责把包裹放到门口。在现代 K8s 环境下拉式 / GitOps 已经成为行业共识。如果你还在 CI 里写kubectl apply -f确实是时候考虑迁移到 Argo CD 或 Flux 了。
RELATED

相关推荐

解决Windows与Linux虚拟机文件拖拽传输失败问题

解决Windows与Linux虚拟机文件拖拽传输失败问题

1. 问题现象与背景分析最近在Windows和Linux双系统环境下使用umware-tools进行文件拖拽传输时,遇到了一个典型问题:从Windows向Linux虚拟机拖拽文件时频繁失败,而反向操作却可以正常执行。这种现象在跨平台文件传输场景中并不少见&#xff0c…

📅 2026/8/22 20:29:01
为什么说“CI 里跑 kubectl apply“已过时?(最小权限原则、CI推式部署、GitOps拉式部署)

为什么说“CI 里跑 kubectl apply“已过时?(最小权限原则、CI推式部署、GitOps拉式部署)

维度推式(Push)拉式(Pull / GitOps)谁执行部署CI 流水线生产环境内的 Agent凭据在哪CI 侧(GitHub Secrets)生产侧(Agent 本地)安全模型CI 信任 → 生产生产自治,CI 不信任…

📅 2026/8/22 20:29:02
Linux进程管理:从原理到实战诊断技巧

Linux进程管理:从原理到实战诊断技巧

1. Linux进程的本质与核心价值在Linux系统中,进程是资源分配的基本单位,也是程序执行的实体表现。与Windows系统不同,Linux采用了一种更为纯粹的进程管理机制,这使得理解进程生命周期成为系统管理和性能调优的基石。我从业十余年处…

📅 2026/8/22 20:29:02
MORE NEWS

更多资讯

📰

Windmill 品牌与设计系统指南:从视觉规范到前端实现的设计语言

Windmill 品牌与设计系统指南:从视觉规范到前端实现的设计语言 【免费下载链接】windmill Open-source developer platform to power your entire infra and turn scripts into webhooks, workflows and UIs. Fastest workflow engine (13x vs Airflow). Open-sourc…

📰

TigerBeetle Java 多笔两阶段转账实战:从 pending 预留到交替 post/void 的余额验证

TigerBeetle Java 多笔两阶段转账实战:从 pending 预留到交替 post/void 的余额验证 【免费下载链接】tigerbeetle The financial transactions database designed for mission critical safety and performance. 项目地址: https://gitcode.com/GitHub_Trending/…

📰

172、MLIR的Deterministic(确定性)编译与调试

MLIR的Deterministic(确定性)编译与调试 一个让我熬夜到凌晨三点的bug 去年做AI加速器编译器的时候,遇到一个极其诡异的bug:同样的模型,同样的输入,连续跑两次推理,结果居然不一样。第一次输出[0.1, 0.2, 0.3],第二次变成[0.1, 0.2, 0.30000001]。差异在第三位小数,…

📰

Transformers.js 自定义使用指南:模型本地化、离线运行与 ONNX 转换全配置

Transformers.js 自定义使用指南:模型本地化、离线运行与 ONNX 转换全配置 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: …

📰

Grist 关系型电子表格:完整指南,3 步 Docker 跑起来

Grist 关系型电子表格:完整指南,3 步 Docker 跑起来 【免费下载链接】grist-core Grist is the evolution of spreadsheets. 项目地址: https://gitcode.com/GitHub_Trending/gr/grist-core 周五 17:30,老板要一份能交叉汇总的周报&am…

📰

微电网鲁棒优化:Matlab实现与不确定性管理

1. 项目概述微电网作为分布式能源系统的重要组成部分,正在全球范围内快速发展。这个项目聚焦于解决微电网运行中最具挑战性的问题——如何应对可再生能源发电和负荷需求的双重不确定性。传统优化方法往往依赖于精确预测,而现实中光伏、风电等可再生能源的…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬