共计 3771 个字符,预计需要花费 10 分钟才能阅读完成。
<font style=”color:red;”> 内容导读:</font>
[toc]
为什么要用云自动化计划?
根因是解决 单主 问题,自动化是 DevOps 落地的基石,平台必须要思考大规模场景问题,传统的 Jenkins 存在单主问题,而云原生的主节点可弹性伸缩的。
用云原生还能很好的解决 资源管理、多仓库依赖构建、多服务依赖公布 等问题,同时 扩展性良好,易保护。
我是怎么实现的?
基础架构
基础架构是 编排 +DAG(云原生)+ 插件。
DAG(云原生)
有向无环图,无效管制 工作执行的程序和依赖。
业界开源的次要有两款产品:argo Workflow 和 tekton。
目前采纳
argo Workflow
落地,因为它一切都是模板
,概念简略,功能强大且灵便。
编排
编排 是对计算机系统、利用及服务的自动化配置、治理和协调,编排能够 更轻松地治理简单工作和工作流。
上面为一个简略工作的编排示例
kind: Engine
apiVersion: api/v1
metadata:
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: Engine
apiVersion: api/v1
metadata:
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 多平台公布