<font style="color:red;">内容导读:</font>
[toc]
为什么要用云自动化计划?
根因是解决单主问题,自动化是DevOps落地的基石,平台必须要思考大规模场景问题,传统的Jenkins存在单主问题,而云原生的主节点可弹性伸缩的。
用云原生还能很好的解决资源管理、多仓库依赖构建、多服务依赖公布等问题,同时扩展性良好,易保护。
我是怎么实现的?
基础架构
基础架构是编排+DAG(云原生)+插件。
DAG(云原生)
有向无环图,无效管制工作执行的程序和依赖。
业界开源的次要有两款产品:argo Workflow和tekton。
目前采纳argo Workflow
落地,因为它一切都是模板
,概念简略,功能强大且灵便。
编排
编排是对计算机系统、利用及服务的自动化配置、治理和协调,编排能够更轻松地治理简单工作和工作流。
上面为一个简略工作的编排示例
kind: EngineapiVersion: api/v1metadata: name: demo # 指定工作名称 namespace: ops-mz830 # 指定运行命名空间,按我的项目划分 envs: # 同时部署开发和测试环境 - dev - sit labels: # 为工作打标签 app: demo annotations: title: '测试devops性能(不影响服务)'spec: global: # 全局配置,次要配置工作流和k8s workflow: templates: - name: whalesay # 定义执行工作的模板:测试用 打印消息 性能相似shell echo ${msg} inputs: parameters: - name: msg container: image: docker/whalesay command: [ cowsay ] args: [ "{{inputs.parameters.msg}}" ] oneStep: # 定义执行的工作:oneStep(一步工作,优化展现成果和性能,实用于简略工作),stages(多阶段工作,实用于简单工作场景) exec: - name: pull-code template: whalesay arguments: parameters: - name: msg value: '下载代码' - name: compile-api template: whalesay arguments: parameters: - name: msg value: '编译api' depends: [ pull-code ] # 需等 `pull-code`执行完结再执行compile-api
工作流
执行日志
插件
除编排能力建设外,其它能力建设都由插件实现,包含脚本、配置、镜像制作、容器运行、三方接口对接等等。
比方后面执行echo ${msg}
的容器
一个残缺编排示例
流程简述
模仿CI、CD、自动化测试工作。
CI:
common(公共依赖库)
- 下载common代码
- 编译:同时上传jar包到私服
user蕴含api和service模块):common工作完结后执行
- 下载代码
- 编译user-api
- 编译user-service:依赖user-api和common-api
- 构建user镜像:同时上传镜像到镜像库
CD:部署user服务
- 先更新服务配置
- 部署服务
- 查看服务:面向用户端,非localhost
- 更新数据库
- test:自动化测试,同时接口(仅user)和UI(整个零碎)自动化测试
残缺编排
kind: EngineapiVersion: api/v1metadata: name: demo namespace: ops-mz830 envs: # 反对多环境 - dev # 仅部署dev环境 labels: app: demo annotations: title: '测试devops性能(不影响服务)'spec: global: # 全局配置,次要配置工作流和k8s workflow: taskType: Dag parallelism: 64 ttlStrategy: secondsAfterCompletion: 86400 # 1天 secondsAfterSuccess: 86400 # 1天 secondsAfterFailure: 172800 # 2天 templates: - name: whalesay # 定义执行工作的模板:测试用 打印消息 性能相似shell echo ${msg} inputs: parameters: - name: msg container: image: docker/whalesay command: [ cowsay ] args: [ "{{inputs.parameters.msg}}" ] kube: dnsPolicy: Default affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: ops operator: In values: - public stages: # 多阶段工作 构建简单工作 - name: "ci" desc: "性能包含下载代码、编译、制作镜像" traits: kube: volumes: - name: workspace emptyDir: { } volumeMounts: - mountPath: /workspace name: workspace steps: - name: common # 下载和编译(上传到私库)公共依赖包 exec: - name: pull-code template: whalesay arguments: parameters: - name: msg value: '下载代码' - name: compile-api template: whalesay depends: [ pull-code ] arguments: parameters: - name: msg value: '编译api' - name: user # 一个适配服务 depends: [ common ] exec: - name: pull-code template: whalesay arguments: parameters: - name: msg value: '下载代码' - name: compile-api template: whalesay depends: [ pull-code ] # 依赖下载代码 arguments: parameters: - name: msg value: '编译api' - name: compile-service template: whalesay depends: [compile-api ] # 依赖编译api arguments: parameters: - name: msg value: '编译service' - name: image template: whalesay depends: [compile-service ] # 制作镜像并上传到镜像库 arguments: parameters: - name: msg value: '制作镜像并上传到镜像库' - name: "cd" desc: "性能包含k8s、nacos" depends: ["ci"] # 依赖CI完结 steps: - name: user exec: - name: kube template: whalesay depends: [ config ] # 先更新服务配置 arguments: parameters: - name: msg value: '部署到k8s user' - name: health template: whalesay depends: [ kube ] # 部署完结后做健康检查 arguments: parameters: - name: msg value: '健康检查 user' - name: config template: whalesay arguments: parameters: - name: msg value: '更新配置 user' - name: db template: whalesay depends: [ health ] # 服务部署胜利后更新数据库数据 arguments: parameters: - name: msg value: '更新数据库 user' - name: "test" desc: "自动化测试,蕴含接口自动化、ui自动化、app自动化" depends: ["cd"] # 依赖服务部署胜利后 steps: - name: "" # 为空字符串或不设置值,则不会拼接到工作名称 exec: - name: user-interface template: whalesay arguments: parameters: - name: msg value: 'user服务接口自动化测试' - name: ui template: whalesay arguments: parameters: - name: msg value: 'ui自动化测试'
工作执行后果
工作程序阐明:箭头方向示意工作执行程序
CI工作
CD工作
自动化测试工作
【不分】执行日志
WebUI
二开argo Workflow
实现,面向所有用户。
上述的编排配置通过CLI治理,是面向运维和DevOps工程师的,用于建设DevOps平台。
结语
云解决方案的外围是编排的设计和实现,规模问题交给k8s解决。
请<font style="color:red;font-weight:bold">同学</font> 关注下 ,我专一云原生DevOps落地,将按段公布上述能力的落地计划。
本文由mdnice多平台公布