<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、自动化测试工作。

  1. CI:

    1. common(公共依赖库)

      1. 下载common代码
      2. 编译:同时上传jar包到私服
    2. user蕴含api和service模块):common工作完结后执行

      1. 下载代码
      2. 编译user-api
      3. 编译user-service:依赖user-api和common-api
      4. 构建user镜像:同时上传镜像到镜像库
  2. CD:部署user服务

    1. 先更新服务配置
    2. 部署服务
    3. 查看服务:面向用户端,非localhost
    4. 更新数据库
  3. 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多平台公布