当前位置: 首页 > article >正文

Argo CD 实战:从零构建你的第一个 GitOps 应用

1. 为什么你需要Argo CD如果你正在管理Kubernetes应用肯定遇到过这样的场景每次代码变更后都要手动执行kubectl apply来更新集群状态。这种操作不仅容易出错还很难追踪谁在什么时候改了什么东西。我在实际项目中就遇到过因为手动操作失误导致服务中断的情况排查起来特别痛苦。Argo CD就是为解决这类问题而生的GitOps工具。它的核心思想很简单把集群的期望状态比如YAML文件存放到Git仓库里Argo CD会自动比较Git中的期望状态和集群实际状态发现不一致就自动同步。这就好比用Git管理代码一样管理你的基础设施所有变更都有提交记录随时可以回滚。举个例子我们团队之前部署一个微服务需要20分钟的手工操作改用Argo CD后开发人员只需要推送代码到指定分支5分钟内就能自动完成全流程部署。最让我惊喜的是有次半夜线上出问题我们直接回滚了Git提交就恢复了服务整个过程不到3分钟。2. 快速搭建实验环境2.1 准备Kubernetes集群在开始之前你需要一个可用的Kubernetes环境。本地开发推荐使用这些工具Minikube单节点集群适合个人电脑Kind基于Docker的轻量级集群k3dRancher推出的迷你K8s我用Mac电脑做演示先用Homebrew安装minikubebrew install minikube minikube start --driverdocker --memory4096启动后验证集群状态kubectl get nodes # 应该看到类似输出 # NAME STATUS ROLES AGE VERSION # minikube Ready control-plane 45s v1.26.32.2 安装Argo CD核心组件在集群中创建独立命名空间是个好习惯kubectl create namespace argocd官方提供了标准安装清单我们直接应用kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml安装完成后检查Pod状态kubectl get pods -n argocd -w # 等待所有Pod变成Running状态3. 配置你的第一个GitOps应用3.1 暴露Argo CD管理界面默认安装的服务是ClusterIP类型我们需要改成NodePort方便访问kubectl patch svc argocd-server -n argocd -p {spec: {type: NodePort}}获取访问地址和端口minikube service -n argocd argocd-server --url # 会返回类似https://192.168.49.2:32443获取管理员密码初始密码会自动生成kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath{.data.password} | base64 -d3.2 准备示例应用仓库我在GitHub准备了一个简单的Nginx示例https://github.com/example/argocd-demo包含deployment.yaml定义Pod副本数和容器镜像service.yaml暴露服务的NodePort配置kustomization.yaml组织资源的Kustomize文件你也可以自己创建仓库结构建议如下/myapp ├── base │ ├── deployment.yaml │ ├── kustomization.yaml │ └── service.yaml └── overlays └── production ├── kustomization.yaml └── replica-patch.yaml4. 实战部署流程详解4.1 通过UI创建应用浏览器打开Argo CD界面用admin和刚才获取的密码登录点击New App按钮填写关键参数Application Name: my-nginxProject: defaultSync Policy: Manual首次建议手动Repository URL: https://github.com/example/argocd-demo.gitPath: manifests # YAML文件所在目录Cluster: in-cluster (https://kubernetes.default.svc)Namespace: default创建后会显示OutOfSync状态点击Sync按钮触发同步。这时你会看到Argo CD开始创建资源最终状态变为Synced和Healthy。4.2 通过CLI管理应用安装Argo CD命令行工具brew install argocd登录到Argo CD服务器argocd login ARGO_CD_SERVER --username admin --password YOUR_PASSWORD用命令行创建应用argocd app create guestbook \ --repo https://github.com/argoproj/argocd-example-apps.git \ --path guestbook \ --dest-server https://kubernetes.default.svc \ --dest-namespace default查看应用状态argocd app get guestbook4.3 自动同步与健康检查在应用设置中启用自动同步spec: syncPolicy: automated: prune: true # 自动清理被删除的资源 selfHeal: true # 自动修复偏差 syncOptions: - CreateNamespacetrue # 自动创建命名空间配置健康检查规则可选resource.customizations.health.argoproj.io/Ingress: | hs {} hs.status Progressing hs.message if obj.status ~ nil then if #obj.status.loadBalancer.ingress 0 then hs.status Healthy hs.message Load balancer is ready end end return hs5. 高级功能实战技巧5.1 金丝雀发布策略创建Canary部署apiVersion: argoproj.io/v1alpha1 kind: Rollout metadata: name: myapp-canary spec: replicas: 5 strategy: canary: steps: - setWeight: 20 - pause: {duration: 1h} - setWeight: 50 - pause: {duration: 1h} selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:v25.2 多环境配置管理使用ApplicationSet实现多环境部署apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: myapp-envs spec: generators: - list: elements: - cluster: staging url: https://staging-k8s.example.com - cluster: production url: https://production-k8s.example.com template: metadata: name: {{cluster}}-myapp spec: project: default source: repoURL: https://github.com/myorg/myapp.git targetRevision: HEAD path: manifests/overlays/{{cluster}} destination: server: {{url}} namespace: myapp5.3 密钥管理方案集成SealedSecrets或Vault# 安装SealedSecrets控制器 kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.19.3/controller.yaml # 创建加密的Secret kubectl create secret generic mysecret --dry-runclient \ --from-literalpassword12345 -o json \ | kubeseal --controller-namespace kube-system --format yaml \ mysealedsecret.yaml6. 避坑指南与最佳实践6.1 常见问题排查当应用卡在Progressing状态时可以检查事件日志kubectl get events --sort-by.metadata.creationTimestamp查看Argo CD资源树argocd app resources myapp检查同步结果argocd app sync-status myapp6.2 性能优化建议大型仓库启用部分同步spec: ignoreDifferences: - group: apps kind: Deployment jsonPointers: - /spec/replicas配置资源钩子控制同步顺序annotations: argocd.argoproj.io/hook: PreSync argocd.argoproj.io/hook-delete-policy: HookSucceeded使用Redis缓存提高性能helm upgrade argocd argo/argo-cd --set redis.enabledtrue6.3 安全加固措施配置RBAC规则apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: myproject spec: roles: - name: read-only policies: - p, proj:myproject:read-only, applications, get, myproject/*, allow启用SSO集成argocd-cm: dex.config: | connectors: - type: github id: github name: GitHub config: clientID: $GITHUB_CLIENT_ID clientSecret: $GITHUB_CLIENT_SECRET orgs: - name: myorg定期轮换凭证argocd account update-password --account admin --current-password old --new-password new7. 真实案例电商平台迁移实践去年我们帮一个电商客户将300微服务迁移到Argo CD总结出这些经验渐进式迁移先从小型非关键服务开始逐步扩大范围。我们按这个顺序推进静态内容服务内部工具类应用核心业务服务目录结构设计/apps ├── frontend │ ├── base │ └── overlays ├── payment │ ├── base │ └── overlays └── inventory ├── base └── overlays监控指标配置apiVersion: argoproj.io/v1alpha1 kind: Application metadata: annotations: argocd.argoproj.io/tracking-id: payment-service spec: syncPolicy: syncOptions: - PruneLasttrue automated: prune: true selfHeal: true迁移后带来的改进部署时间从平均45分钟缩短到8分钟配置错误导致的事故减少70%回滚操作从需要多方协调变成开发者自助完成

相关文章:

Argo CD 实战:从零构建你的第一个 GitOps 应用

1. 为什么你需要Argo CD? 如果你正在管理Kubernetes应用,肯定遇到过这样的场景:每次代码变更后,都要手动执行kubectl apply来更新集群状态。这种操作不仅容易出错,还很难追踪谁在什么时候改了什么东西。我在实际项目中…...

《采购与招标商品详情页前端性能优化实战》

📄 《采购与招标商品详情页前端性能优化实战》背景:政府采购与招标平台的商品详情页实际上是招标公告详情页,包含公告信息、采购需求、资格要求、评分标准、投标文件、澄清公告、开标记录等多个复杂模块。页面特点是信息权威性强、格式标准化…...

别再纠结Flannel和Calico了!手把手教你根据业务场景选对K8s网络插件

别再纠结Flannel和Calico了!手把手教你根据业务场景选对K8s网络插件 当你在Kubernetes生产环境中面临网络插件选择时,Flannel和Calico这两个名字总会反复出现。就像站在十字路口的旅行者,左边是平坦快捷的柏油马路,右边是功能丰富…...

思源宋体TTF:下一代开源中文字体架构与应用范式

思源宋体TTF:下一代开源中文字体架构与应用范式 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf Source Han Serif TTF作为Google与Adobe联合打造的开源Pan-CJK字体&#xf…...

API 网关怎么设计?一次讲清鉴权、路由、限流、灰度、日志与统一治理

API 网关怎么设计?一次讲清鉴权、路由、限流、灰度、日志与统一治理 大家好,我是一名有 4 年工作经验的 Java 后端开发。 微服务项目里,API 网关几乎是最容易被说成“就转发一下请求”的组件。 但真正做起来你会发现,很多稳定性、…...

终极指南:5分钟打造Windows便携Python开发环境的完整教程

终极指南:5分钟打造Windows便携Python开发环境的完整教程 【免费下载链接】winpython A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python. 项目地址: https://gitcode.com/gh_mirrors/wi/winpython WinP…...

如何快速掌握网盘直链下载助手:八大网盘下载加速终极教程

如何快速掌握网盘直链下载助手:八大网盘下载加速终极教程 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…...

如何打破B站缓存视频的格式枷锁?m4s-converter让你重获观看自由

如何打破B站缓存视频的格式枷锁?m4s-converter让你重获观看自由 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 当你在B站缓存了珍贵…...

实战:用WRF-Chem V3.9.1.1模拟一次华北雾霾过程(附完整namelist配置与排放数据处理心得)

实战:用WRF-Chem V3.9.1.1模拟华北雾霾的完整技术指南 华北地区秋冬季雾霾问题一直是环境科学研究的重点。本文将基于WRF-Chem V3.9.1.1版本,详细介绍如何从零搭建一个针对华北雾霾事件的数值模拟系统。不同于基础教程,我们聚焦于实际科研项目…...

PLM、ERP、MES、CRM:解码企业数字化转型的四大核心引擎

1. 四大系统如何构建企业数字化闭环 想象一下你经营一家汽车制造厂。从设计师在电脑上画出一个新车型的3D模型,到最终客户开着这辆车离开4S店,整个过程就像一场接力赛。PLM、ERP、MES、CRM就是四位关键选手,他们传递的不是接力棒,…...

5分钟解决AutoCAD字体缺失问题:FontCenter智能字体管理插件完整指南

5分钟解决AutoCAD字体缺失问题:FontCenter智能字体管理插件完整指南 【免费下载链接】FontCenter AutoCAD自动管理字体插件 项目地址: https://gitcode.com/gh_mirrors/fo/FontCenter 还在为AutoCAD图纸中出现的问号和乱码文字而烦恼吗?FontCente…...

nli-MiniLM2-L6-H768效果展示:开源项目README与Issue描述的蕴含关系质量评估

nli-MiniLM2-L6-H768效果展示:开源项目README与Issue描述的蕴含关系质量评估 1. 模型核心能力解析 nli-MiniLM2-L6-H768是一个专为文本关系判断设计的轻量级自然语言推理模型。与常见的生成式AI不同,它的核心价值在于精准评估两段文本之间的逻辑关系。…...

南北阁 Nanbeige 4.1-3B 开源模型应用:政务问答系统本地化部署实践

南北阁 Nanbeige 4.1-3B 开源模型应用:政务问答系统本地化部署实践 想体验一个能流畅对话、还能“看见”它思考过程的本地AI助手吗?今天,我们就来聊聊如何将南北阁(Nanbeige)4.1-3B这个轻量又聪明的国产模型&#xff…...

15N70-ASEMI中大功率场景的能效新王者15N70

15N70-ASEMI中大功率场景的能效新王者15N70型号:16N65沟道:NPN品牌:ASEMI封装:TO-220F批号:最新导通内阻:0.6Ω漏源电流:15A漏源电压:700V引脚数量:3特性:N沟…...

从vector的push_back到emplace_back:聊聊C++11如何让容器操作更‘现代’

从vector的push_back到emplace_back:C11如何重构容器操作范式 当你在现代C代码库中看到emplace_back频繁出现时,这不仅仅是一个语法糖的替换——它标志着C语言设计哲学的一次重大转向。作为从C98/03时代走过来的开发者,理解这种变化背后的深层…...

网盘直链下载助手:八大主流网盘全速下载的完整解决方案

网盘直链下载助手:八大主流网盘全速下载的完整解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...

深度解析:如何通过软件协议逆向工程实现iOS 15-16 iCloud绕过

深度解析:如何通过软件协议逆向工程实现iOS 15-16 iCloud绕过 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 探索基于checkm8漏洞的硬件级解锁技术方案 在iOS设备安全领域,iC…...

LattePanda打造Steam Machine:硬件选型与系统优化指南

1. 从零打造一台LattePanda驱动的Steam Machine去年Valve宣布推迟新一代Steam Machine发布时,作为一名硬件改装爱好者,我决定自己动手复刻这个经典设备。经过三个月的设计和调试,这台基于LattePanda单板机的IOTA版本不仅完美运行Bazzite系统&…...

GPEN效果边界再定义:非正面人脸(俯仰角>30°)修复能力实测报告

GPEN效果边界再定义:非正面人脸(俯仰角>30)修复能力实测报告 1. 测试背景与目的 GPEN作为一款智能面部增强系统,在常规正面人像修复方面已经表现出色。但在实际应用中,我们经常会遇到各种非标准角度的人脸照片&am…...

LeaguePrank:5分钟打造你的专属英雄联盟形象

LeaguePrank:5分钟打造你的专属英雄联盟形象 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank LeaguePrank是一款基于英雄联盟官方LCU API开发的游戏个性化工具,让你在不影响账号安全的前提下&#xff0c…...

避坑指南:用vprbs做SerDes链路仿真时,你的PRBS序列真的设对了吗?

高速SerDes验证实战:vprbs参数配置与PRBS序列生成深度解析 在高速串行接口(SerDes)验证领域,PRBS(伪随机二进制序列)测试堪称链路性能评估的"黄金标准"。作为芯片验证工程师,我们经常需要在Cadence仿真环境中使用analogLib库的vprb…...

Fastboot Enhance:让Android刷机从命令行到图形界面的革命性转变

Fastboot Enhance:让Android刷机从命令行到图形界面的革命性转变 【免费下载链接】FastbootEnhance A user-friendly Fastboot ToolBox & Payload Dumper for Windows 项目地址: https://gitcode.com/gh_mirrors/fa/FastbootEnhance Fastboot Enhance 是…...

混合系统设计:连续与离散的动态融合

1. 混合系统概述:时间与离散的桥梁混合系统(Hybrid Systems)是嵌入式系统设计中的关键建模框架,它巧妙地将两种看似对立的建模范式融为一体:基于时间的连续动态系统与基于离散事件的状态机模型。这种融合不是简单的叠加…...

从零开始构建水下机器人仿真环境:UUV Simulator实战指南

从零开始构建水下机器人仿真环境:UUV Simulator实战指南 【免费下载链接】uuv_simulator Gazebo/ROS packages for underwater robotics simulation 项目地址: https://gitcode.com/gh_mirrors/uu/uuv_simulator UUV Simulator是一个基于Gazebo和ROS的开源水…...

手把手教你配置RK3588单/双PMIC方案:从硬件选型到DTS避坑指南

RK3588电源方案实战指南:单双PMIC设计与DTS配置深度解析 当工程师拿到RK3588这颗性能怪兽时,电源设计往往是第一个需要攻克的堡垒。不同于普通SoC的简单供电需求,RK3588的异构多核架构(4xCortex-A76 4xCortex-A55 NPU GPU&…...

免费创建Windows虚拟游戏手柄:vJoy完整配置与实战指南

免费创建Windows虚拟游戏手柄:vJoy完整配置与实战指南 【免费下载链接】vJoy Virtual Joystick 项目地址: https://gitcode.com/gh_mirrors/vj/vJoy 想要在Windows电脑上体验专业游戏手柄的功能,但又不想投资昂贵的硬件设备?vJoy虚拟摇…...

SMUDebugTool:AMD Ryzen处理器调试的完整实用指南

SMUDebugTool:AMD Ryzen处理器调试的完整实用指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcod…...

华为SDH传输设备时钟配置避坑指南:从单BITS到主备BITS的实战配置详解

华为SDH传输设备时钟配置实战:从基础原理到复杂组网避坑指南 时钟同步是SDH传输网络的命脉,一次错误的配置可能导致全网时钟互锁、业务闪断甚至级联故障。记得去年某运营商骨干网就因时钟ID分配冲突引发全网时钟振荡,故障定位耗时超过72小时。…...

小熊猫Dev-C++:轻量级C/C++开发环境的终极指南

小熊猫Dev-C:轻量级C/C开发环境的终极指南 【免费下载链接】Dev-CPP A greatly improved Dev-Cpp 项目地址: https://gitcode.com/gh_mirrors/dev/Dev-CPP Dev-C是一款经过大幅改进的开源C/C集成开发环境,专为教育和小型项目开发设计。作为Orwell…...

几何光学仿真入门指南:5步掌握Ray Optics Simulation光学设计

几何光学仿真入门指南:5步掌握Ray Optics Simulation光学设计 【免费下载链接】ray-optics A web app for creating and simulating 2D geometric optical scenes, with a gallery of (interactive) demos. 项目地址: https://gitcode.com/gh_mirrors/ra/ray-opti…...