前言

原始人工部署的痛点

Kubectl直连Kubernetes集群API,命令行操作Deployment、Service等资源完成应用手动部署,会逐渐暴露出一些问题:

  • 学习成本高:开发者需要学习理解大量Kubernetes资源对象Deployment、Service、Ingress、ConfigMap等概念。
  • 配置漂移:不同人员可能通过不同方式部署运维,例如手写YAML进行apply操作、临时修改配置进行patch/edit操作,没有统一入口和规范,造成系统配置漂移。
  • 缺乏权限和审计能力:直接使用Kubectl操作k8s集群,企业很难做到细粒度权限控制以及完整的操作审计。
  • 部署运维过程不可追溯:配置修改和应用部署往往是即时操作,一旦出现问题,很难追溯是谁在什么时间修改了哪些配置。

传统DevOps的痛点

  • 流程碎片化:开发、测试、运维各自为政,靠CI/CD工具链硬串联。
  • 复杂度外溢:运维团队要维护Gitlab、Jenkins、GitLabRunner、ArgoCD、HelmChart等多套工具。
  • 不可控的体验:不同团队的自动化脚本和流程不统一,新人入职学习成本高。
  • 缺乏稳定的审计与可追溯性:流水线日志、变更记录分散,难以形成统一的安全合规视图。

DevOps已死,更加注重用户体验的平台工程才是未来。

DevOps过度依赖工具链、强调个人能力、缺乏标准化平台化支撑,长期难以扩展。

平台工程(Platform Engineering)就是为企业开发团队提供标准化、可复用、可自助的内建能力平台(Internal Developer Platform)也称IDP ,IDP把DevOps的复杂性封装起来,让业务团队专注于业务逻辑而非工具维护、工具的使用。

平台工程核心价值:

  • 一套平台解决开发运维问题:统一管理CI/CD、镜像仓库、环境配置、部署策略。
  • 标准化接口:团队通过 API 或自助 UI 就能完成部署、发布、监控,而无需了解底层细节。
  • 可追溯与审计:所有流水线、配置变更、资源使用都被平台统一记录。
  • 扩展性强:平台能力模块化,可接入云厂商服务、SaaS、内部工具。
  • 解放生产力:开发团队不必重复做DevOps工具维护,业务开发效率提升明显。

小结

DevOps强调流程和工具,而平台工程强调能力和自助服务。

未来企业的发展趋势是:DevOps的复杂性封装进一个可自助使用的平台,让开发团队专注于业务创新,而不是代码开发完成后如何通过流水线发布。

运维管理平台通过对底层资源编排能力进行封装,提供应用部署、扩缩容、网络与存储管理、权限控制、审计、CI/CD等功能,从而实现运维流程的自动化和平台化

一、持续部署(CD)模式

运维管理平台实现应用自动化部署主要有以下2种实现路径:

1.平台驱动部署

如果更注重用户体验和部署效率,可以采用类似VelaUX的部署方式。

平台将应用配置(OAM 模型)持久化到数据库中,在用户发起部署时,平台直接调用KubeVela完成应用发布。这种模式前后端交互简单、部署速度快,更适合平台化操作

2.Git驱动部署

如果更关注部署过程的可追溯性、审计能力以及企业合规要求,则可以采用GitOps模式。

在这种模式下,代码仓库作为唯一的事实源(Single Source of Truth),所有应用配置和变更都通过Git提交完成,由GitOps控制器(例如 ArgoCD)持续同步到Kubernetes集群,从而实现可追溯、可审计、可审批的部署流程

二、OAM应用交付模型

OAM全称OpenApplicationModel,封装了原生K8s原生资源描述的复杂度,以应用为中心,将应用抽象成组件(Component)+ 特性(Trait)+ 工作流(Scope/Workflow)

解耦开发人员关注的业务逻辑运维人员关注的部署策略

使应用可以在不同平台上声明式交付而无需修改应用代码

三、GitOps应用交付工具

GitOps是一种以Git代码仓库为唯一可信源的基础设施云原生应用交付与运维模式,用于实现基础设施和云原生应用的的持续交付和自动化管理。

GitOps利用Kubernetes、Terraform等平台的声明式API特性与DevOps实践相结合,通过在Git仓库中统一定义系统的期望状态,由GitOps控制器(如ArgoCD/FluxCD)持续监听、同步并校准系统状态,确保实际运行环境始终与Git仓库中定义的状态保持一致。

GitOps并不依赖于具体工具(如 GitLab或ArgoCD/FluxCD),而在于部署流程是否满足以下原则:

  • 以代码仓库作为唯一事实源
  • 能够自动执行
  • 并且能完整追踪操作与变更。

例如,将OAM应用信息存储在Gitea中,一旦PR合并触发ArgoWorkflows流水线执行,将OAM应用配置更新到KubeVela管控集群,这种交付方式同样符合GitOps风格。

工具优势适合 OAM 场景吗?
Argo Workflows 流水线 + 任务编排 → 一次性执行 Workflow ❌ 不适合管理持续状态,需要额外逻辑做差异检测和修复
Argo CD 原生GitOps控制器 → 持续同步 Git → K8s,自动矫正差异 ✅ 非常适合 OAM 应用管理,Git 仓库就是唯一事实源,集群状态始终与 Git 保持一致

通过GitOps这种部署方式,可以实现基础设施与云原生应用的:

  • 自动化部署

  • 可追溯变更

  • 可审计流程

  • 环境一致性

1.GitOps控制器FluxCD

FluxCD是一款云原生的GitOps工具,由CNCF(云原生计算基金会)孵化并毕业;

FluxCD的核心目标是实现Kubernetes集群配置/应用的声明式自动化管理;

FluxCD可以实现Kubernetes资源配置(如 Deployment、Service、KubeVela Application 等)托管在Git仓库(如 Gitee/GitHub),然后自动将Git仓库中的配置同步到Kubernetes集群,实现Git仓库作为唯一可信数据源的运维模式。

FluxCD持续部署流程

exported_image

创建known_hosts文件

ssh-keyscan gitee.com > ./known_hosts

创建存储gitee秘钥的secret

kubectl create secret generic gitee-credentials \
>   -n gitops \
>   --from-file=identity=./flux-gitee \
>   --from-file=identity.pub=./flux-gitee.pub \
>   --from-file=known_hosts=./known_hosts
secret/gitee-credentials created

创建gitrepository资源

FluxCD的源控制器(source-controller)将按照interval: 1m配置的周期,通过SSH协议访问Gitee的KubeVela配置仓库git@gitee.com/zhanggen6/ci-cd.git的master分支

借助gitee-credentials这个Secret完成 SSH身份认证与服务器指纹验证

拉取KubeVela配置仓库中存储的KubeVelaOAM应用配置

拉取后的配置会作为标准化的Kubernetes资源artifact存储在集群中,为后续同步部署流程提供统一的配置源

最终实现OAM配置从代码仓库到当前Kubernetes集群的定时同步与自动化部署。

apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
  name: gitee-oam-repo
  namespace: gitops
spec:
  interval: 1m
  url: ssh://git@gitee.com/zhanggen6/ci-cd.git
  ref:
    branch: master
  secretRef:
    name: gitee-credentials
  timeout: 60s

查看gitrepository资源

kubectl get gitrepository -n gitops
NAME             URL                                       AGE     READY   STATUS
gitee-oam-repo   ssh://git@gitee.com/zhanggen6/ci-cd.git   7m54s   True    stored artifact for revision 'master@sha1:aaf17a618fcbfb2e13aeb22f2a3b85d53e8c61bb'

创建Kustomization资源

GitRepository只负责拉取配置到集群生成artifact,不会触发部署流程,FluxCD的Kustomization同步控制器会自动读取artifact并将配置部署到集群。

apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: gitee-oam-deploy
  namespace: gitops  # 与 GitRepository 同命名空间
spec:
  # 关联已成功拉取配置的 GitRepository
  sourceRef:
    kind: GitRepository
    name: gitee-oam-repo
    namespace: gitops
  # 同步周期(与 GitRepository 一致,1分钟检查一次配置变更)
  interval: 1m
  # 关键:Git 仓库中 KubeVela OAM 配置所在的目录(必填!)
  # 替换为你 Gitee 仓库中 my-app 配置文件的实际路径(根目录填 "./")
  path: "./"
  # 自动清理:删除集群中不在 Git 仓库的资源,同时缺失的资源会自动重建
  prune: true
  # 等待部署完成,确保配置生效
  wait: true
  # 关键:指定部署到应用所在的 oam-test 命名空间
  targetNamespace: oam-test
  # 允许创建 KubeVela 自定义资源(Application/core.oam.dev)
  timeout: 30s

查看Kustomization资源

kubectl get kustomization gitee-oam-deploy -n gitops
NAME               AGE   READY   STATUS
gitee-oam-deploy   17m   True    Applied revision: master@sha1:aaf17a618fcbfb2e13aeb22f2a3b85d53e8c61bb 

2.GitOps交付工具的局限性

在长期使用FluxCD或ArgoCD这类GitOps工具后,能深刻体会到其核心设计理念:持续保证Git仓库中声明的期望状态,与Kubernetes集群etcd中维护的实际状态严格一致

但当云原生业务应用需要更精细的发布策略如渐进式发布、灰度暂停、分阶段放量时,GitOps控制器工具的时刻对齐、自动同步的机制,反而会与渐进式发布流程产生冲突

所以在现阶段,这类GitOps控制器工具,无疑非常适合用于追求一次性部署后、长期稳定的基础设施层

第一层:云基础设施(Terraform管)

  • - EKS/ACK 集群
  • - VPC、安全组、节点

第二层:K8s内部底座(GitOps工具FluxCd/ArgoCD管)

  • - Prometheus、日志服务、DevOps工具、网关、Operator、Harbor等公共服务
  • - 持续守护 + 自动纠偏

第三层:业务应用(Openkruise/ArgoRollout管)

  • 业务应用
  • -渐进式发布+持久守护+自动纠偏

四、渐进式发布工具

平台工程并不是某一个具体工具,而是一种通过构建内部开发平台(IDP),将Kubernetes与DevOps工具链能力进行统一封装,并以自助服务方式提供给开发者的工程体系。

有DevOps、可观测 = 不代表是平台工程。

面向开发者、做自助、做标准化、降低认知负担,才叫平台工程。

云原生时代,如果K8s是围绕Pod展开的,那DevOps就是围绕云原生应用自动部署到pod的容器里展开的。

1.应用即代码(Application As Code)

KubeVela基于OAM开放应用模型,屏蔽了Kubernetes底层复杂的资源、调度、运维细节

KubeVela以应用为中心提供统一的声明式定义与管控能力,极大简化了云原生应用的交付与管理成本,让研发人员只需要关注应用本身,而非复杂的基础设施细节

KubeVela内置GitOps控制器工具插件FluxCD,也可以实现GitOps持续部署流程。

在GitOps最佳实践中,应用代码仓库(App Code Repo)和 KubeVela配置仓库(KubeVela Config Repository)在Git仓库分开存储,可以让代码和部署配置解耦

运维/SRE

运维/SRE直接维护KubeVela配置仓库

FluxCD或者ArgoCD等GitOps控制器工具必须遵循单一配置源原则,禁止同时监听多个配置库,否则会出现配置源 + 控制器双重死循环,导致应用无限发布、版本横跳。

image

开发人员

image

CI/CD大致流程如下:

  1. CI工具(GitLab-CI/Jenkins/ArgoWorkflows)完成源代码集成和镜像构建,推送Docker镜像至镜像仓库(Harbor/JFrog Artifactory)
  2. KubeVela监听(watch)到镜像仓库中镜像版本变化,自动更新镜像到KubeVela配置仓库
  3. KubeVela又监听(watch)到KubeVela配置仓库的内容变化, 自动从KubeVela配置仓库pull最新镜像同步更新到Kubernetes集群

五、DevOps系统功能

交付模型=让应用依赖的K8s原生资源可以描述

交付工具= 让软件到位达到可以发布的状态

发布工具 = 发布软件给用户

DevOps系统=融合了OAM交付模型+交付工具+发布工具,以及自动化CI/CD流程。

GitOps不能直接作为应用发布平台,使用GitOps工具管理用户声明的应用期望状态实时同步到K8s集群,再使用进式交付工具管理应用发布过程与运行时状态的一致性,是一种不错的实践。

这是就是期望状态与实际状态分开管理。

ArgoCD负责配置用户期望状态信息:仅作为哨兵将Git仓库中定义的Kruise/ArgoRollout资源声明同步到Kubernetes集群,再此之后应用的渐进式发布、原地升级、发布完成后的运行状态的一致性保障,则由OpenKruise/ArgoRollout控制器接管与执行
GitLab/Gitee/Gitea (代码库保存用户DesiredState)
      │
      ▼
ArgoCD/FluxCD (检查Git仓库期望状态&同步期望状态配置到K8S集群)
      │
      ▼
Rollout/OpenKruise (执行期望状态声明的发布流程+修正实际状态=期望状态)
      │
      ▼
Kubernetes (Pods/ReplicaSets)

DevOps的核心交付链路

CI阶段(ArgoWorkflows)
开发提交代码
CI构建镜像
推送镜像仓库

交付阶段(ArgoCD/FluxCd)
更新部署配置
CD系统同步
部署到Kubernetes

发布阶段(ArgoRollout/OpenKruiseRollout)
灰度/金丝雀发布
逐步切流到新版本
最终全部用户访问新版本

 DevOps全流程

Plan(计划)
   │ 需求规划、任务管理
   ▼
Code(编码)
   │ 开发业务功能,提交代码
   ▼
Build(构建)
   │ 编译、打包、生成可运行产物(镜像、包)
   ▼
Test(测试)
   │ 单元测试、集成测试、自动化安全测试
   ▼
Deploy(部署)
   │ 将应用部署到环境(开发/测试/生产)
   ▼
Release(发布)
   │ 灰度发布 / 金丝雀 / 逐步切流上线
   ▼
Operate(运行 / 运维)
   │ 自动化运维、弹性扩缩容、自愈能力
   ▼
Observe(监控 / 可观测)
   │ 指标采集、日志、链路追踪、告警
   ▼
Feedback(反馈)
   │ 异常、指标、用户体验闭环反馈,改进流程

六、平台工程融合IaaS和PaaS层

当前,运维与开发协作普遍通过内部开发者平台(IDP)或运维管理平台实现

开发人员通过IDP/运维管理平台:自助完成应用的发布,以及日志、监控数据的可视化查看

运维人员利用IDP/运维管理平台:自动化管理IaaS层(计算、网络、存储)和PaaS层(中间件、监控等)资源,实现职责分离与高效协同。

1.平台工程功能描述

传统开发运维方式

传统开发运维过程,核心特点是以各类资源为中心,设备的安装、调试,应用的部署、运维基本靠人力完成,自动化程度低,缺乏统一的设备和应用管理能力。

为了保证正式环境的可靠性和安全性,开发和运维人员以正式环境为边界:

  • 开发人员:负责编码到上线前准备
  • 运维人员:负责正式环境的发布和更新

运维人员对正式环境的维护内容,依赖于开发人员的技术架构实现。

由于双方工作关联的紧密程度,在线上发布或故障排查阶段,双方协作对接成本较 高,且较为容易发生沟通上误差,导致线上发布步骤的遗漏或误操作,导致故障的发生。

除此之外,不管开发还是部署阶段,均存在大量的重复手工工作。

例如应用的手工构建、不同环境的人工部署、不同环境依赖的重复安装、环境的调试,类似工作导致开发人员较多时间耗费在了非核心业务编码上。

云原生开发运维方式

随着业务系统复杂度和规模的急剧增长,传统开发运维方式已无法规模化支撑当下业务发展速度。

企业关注转移到以应用为中心,包括应用的敏捷交付、弹性伸缩、监控 告警、灾备机制,如何将基础设施与PaaS平台融合?

为业务应用提供标准的运行、监控、治理平台并将业务的通用能力下沉到平台侧,更好的帮助企业实现应用的自动化管理?

基于敏捷精益的理念,以容器化、微服务等代表性的云原生技术应运而生。

应用长在云上成为了IT企业发展的趋势,应用的构建、部署、监控、治理等内容下沉到了平台侧管理,然后再以可视化、自动化方式赋能给开发人员自助化管理,让研发人力资 源能够聚焦在价值密度更高的业务逻辑开发上,明显提高了研发效率和质量。

image 

2.平台工程完成后运维职能划分

开发侧重自助操作,运维侧重自动管理,职责分明。

SRE工程师负责:负责让基础设施、K8s平台、中间件、业务应用长期稳定、高可用、少故障,保证应用跑得稳。 

DevOps工程师负责快:两者一起既能提升业务研发效率,又能保证业务运行阶段的稳定使业务价值最大化

应用上线(CI/CD 流水线 & DevOps)
   │
   ▼
应用在 Kubernetes 上跑起来(DevOps 关注)
   │
   ▼
SRE 全链路维稳
   ├─ 应用可靠性:流量治理/SLO/ErrorBudget/灰度控制
   ├─ Kubernetes平台:调度、网络插件、存储插件、集群健康
   ├─ 中间件服务:数据库、缓存、消息队列
   ├─ 基础设施层:节点、存储卷、网络、物理/虚拟硬件
   ▼
应用 + 平台 + 基础设施稳定可靠运行

3.平台工程完成目标

在平台工程实践中,平台工程的最终产物通常称为运维管理平台。

image

该运维管理平台面向开发和运维人员覆盖了从软件编码到交付的完整路径,提供体系化、标准化、一站式云原生开发运维平台

平台工程的本质,是构建一套融合IaaS与PaaS的内部平台

  • IaaS层:封装计算(含K8s)、网络、存储等基础资源;

  • PaaS层:封装中间件、监控、应用等平台能力;

  • 对外输出层:提供统一的工具链和自动化运维流程,降低开发人员使用复杂度和对运维的依赖程度。

终极目标:快速上线,线上稳定。

 

 

 

 

 

参考

posted on 2026-03-07 13:56  运维体系建设之路  阅读(58)  评论(0)    收藏  举报