落地指南

工作分享gitopsgitops约 1650 字大约 6 分钟

通过GitOps的设计与落地,来满足云原生环境下业务的持续交付,建立标准的开发、 测试、生产环境, 形成统一的规范,完善自动化,为业务快速交付赋能。

整体架构

运维架构概览
运维架构概览
蓝色代表-ARM适配

整理流程

workflow
workflow

基础环境

  • IDC机房

    • AMD服务器

    • ARM服务器 (资源采购&预算)

    • 存储服务

  • 域名

  • 证书

Kubernetes

运行环境支持AMD和ARMv8

kubernetes部署架构
kubernetes部署架构

原则: 集群隔离。一个环境一个集群,互不干扰。

目前已有四套集群,提供给研发、测试、生产以及Hotfix、poc使用。

预估信创适配需3-4套ARM集群环境。

后续共需管理7-8个集群环境

运维管理

代码仓库

通过流程管理,进行仓库的开通或变更,以产品组进行划分和管理,建立起唯一授信源,为后续Pipeline设计做好基础建设

代码仓库
代码仓库

GitOps

原则: 采用一切皆代码的原则,进行基础服务和业务项目的维护管理。

流程设计

从代码提交到项目上线全流程

研发Git 管理流程
研发Git 管理流程

仓库规划

运维工程项目

运维工程项目
运维工程项目
  1. cicd : 用来做产品的的打包和部署管理, 产线内gitlab-ci直接引用即可,做到研发和运维代码管理上的解耦

  2. gitlab-ci.yamlopen in new window文件 gitlab-ci gitlab规定的固定命名文件,用来触发git pipeline,其内容编写遵循gitlab的编排语法,作用类似jenkinsfile

  3. gitops: 用来做运维管理,如基础设施、中间件等

  4. misc:试验性的临时功能。未集成到标准编排中的尝试性功能,均在此处编排和管理

  5. playbook:Ansible剧本编排服务,目前提供基于rke工具拉起Kubernetes集群功能 (未支持arm)

  6. template: git pipeline 通用模板文件,现已弃用,迁移至cicd中

  7. utils: 运维工具、程序管理,如mysql备份任务,kubernetes调试工具等

工程目录详解

运维项目-目录结构
运维项目-目录结构

gitlab-ci: 项目的持续集成管理 (ARM环境的制品产出,主要是在这里作适配)

  • gitlab-runner:ci任务的执行者,负责 ci 编排文件的处理和脚本的执行

  • template: CI编排文件

    1. job: 提供通用基础服务,如gradle、maven、golang 、artifacts等pipeline节点服务

    2. projects: 按产线进行归类,按服务进行单独的编排管理,针对不同的服务,可在此进行模板的引用和特性的扩展

CI

制品构建的所有操作均在此处调整

如新增(XC_TONG_WEB_ENABLED)以区分东方通 jar依赖等,通过逻辑判断和处理,产出不同的制品。

gradle
gradle

如何产出多环境下的制品?

  • 使用不同环境的runner
CD

通过ArgoCD 实现多环境的管理与发布

  • argocd是基于kubernetes的声明式的CD工具
image
image

通过argo应用的创建和声明,来监控编排文件的变化,从而实现产品的CD操作

argo编排
argo编排

Argo 下产品应用服务编排 (ARM的部署,在这里作适配)

argocd
argocd

编排文件对应的就是ArgoCD声明的仓库路径,从而实现了域名和环境的区分,产品的发布只需要修改这里即可,这样后续在pipeline中就可以实现自动化

argocd
argocd

运维仓库

git repo
git repo
  1. common:  公共服务管理,比如SQL审计平台 bytebase,研发文档服务docs 等

  2. infra: 基础设施服务,和kubernetes集群相关,如SLB (metallb),存储服务等

  3. middleware: 中间件服务,产品依赖中间件的编排均在此维护

  4. xxx-charts (项目外单独维护)

    1. 按产线归类,所有的产品运行编排服务均在此仓库进行维护和管理
  5. **xxx-apps  (项目外单独维护)**
    1. 产品运行环境归类,基于业务编排模板,进行差异化修改和管理,之后可由Argo-cd发布到对应的集群环境中
charts和app介绍
charts和app
charts和app

如图

apps中的服务按环境进行区分管理,通过差异化配置供ArgoCD使用,从而发布到不同环境。其核心编排均来自服务编排模板,优势在于

  • 避免多环境操作同一个文件,管理混乱

  • 避免多环境同时发布,同文件的冲突

  • 工程文件和基础环境保持了一致

  • 文件改动少,便于自动化

其他目录

和cicd关系不大,暂不详细介绍

镜像管理

通过harbor管理所有的编排文件和制品镜像 (Harbor需升级用来支持ARM制品的保存)

版本上报

版本上报
版本上报

制品上传

image
image

规则:

1. jkstack/<产品>/服务名:版本   (jkstack-charts也在此项目中)

2. middleware/[registry]/服务名:版本

3. infra/[分类]/服务名:版本

制品上传
制品上传
制品上传
制品上传
制品上传
制品上传

流水线

具备以上条件后后,通过git pipeline 即可将产品的CICD串联起来,实现了多环境的发版控制

流水线
流水线
流水线
流水线
流水线
流水线
流水线
流水线

自动化

  1. 版本管理平台

  2. 离线交付-部署客户端

  3. Kubernetes集群部署

参考资料

GitOps - 在 Kubernetes 中进行 DevOps 的方式open in new window

什么是GitOpsopen in new window