DevOps平台两种实现模式

9c1f540df0c358d80c80d6ee3827c249.jpeg

我们需要一个DevOps平台

要讨论DevOps平台的实现模式,似乎就必须讨论它们的概念定义。然而,当大家要讨论它们的定义时,就像在讨论薛定谔的猫。

A公司认为它不过是自动化执行Shell脚本的平台,有些人认为它是一场运动,另一些人认为它是一种文化,还有CTO认为它的本质就是流水线(Pipeline)。

显然不论哪种定义,你无法挑出毛病,但是它们又都无法使所有人都信服。

所以,我总是避免谈DevOps的定义。

那么在DevOps定义不清的情况下,怎么谈它的实现模式呢?

当一个名词的定义不清时,我们应该回归它的目的。 DevOps的目的是改进和缩短系统开发生命周期。DevOps实现该目的的手段是融合开发(Dev)与运维(Ops)。至于怎么融合,大家似乎没有达到一致的看法,毕竟家家有本难念的经。

总之,大家为了实现DevOps,大概率会从以下三个选项进行选择:

  1. 1. 自己开发一个DevOps平台;

  2. 2. 买一套现成的DevOps平台;

  3. 3. 直接使用云上的DevOps SaaS服务。

总之,就是要有一个平台!

DevOps平台的两种模式

由于大家对于DevOps的定义不清,所以,DevOps平台的功能的边界也就很模糊了。

但是,经过我的观察,不论它们使用了什么工具,包含了多少功能,是否包含界面,DevOps平台目前就两种实现模式:

  1. 1. 基于命令式的模式;

  2. 2. 基于声明式的模式。

命令式的DevOps平台

在手工运维和手工构建的阶段,人们都习惯将运维命令和构建命令一条条记录下来。

当要实现自动化的时候,人们很自然地想到要让DevOps平台自动化一条条命令的执行。

所以,人们在使用命令式的DevOps平台时,都是跟着平台的界面提示,一步步地增加命令(通常也称为命令节点)。最后完成一整条流水线。

命令式的DevOps平台为了让流水线支持更多的工具和命令,通常会通过运维开发人员对DevOps平台的命令节点进行扩展。

命令式DevOps平台,在用户的眼里就是一条条命令的流水线平台。这就好比你想要一台电脑,然后你跟电脑店的老板买了一堆的配件,自己拿回家,然后按照你的想法一个个配件的组装。

如果要在AWS云上部署一套简单的负载+机器,在命令式DevOps平台上的做法通常是:

  • • 步骤1. 配置并购买负载均衡器;

  • • 步骤2. 配置并购买机器;

  • • 步骤3. 配置安全组并绑定到机器上;

  • • 步骤4. 将机器挂载到负载均衡器中。

当然,命令式DevOps平台也知道当要部署的软件多的时候,用户操作起来很麻烦,所以,命令式DevOps平台也会提供一些模板操作来简化用户的操作。但是,用户通常会报怨模板不够灵活不能满足自己的需求。最终命令式DevOps平台都会实现用户自定义命令模板功能。

目前在国内的DevOps平台基本上就是这种实现模式。

声明式的DevOps平台

声明式的DevOps平台把大问题看出两个子问题:

  1. 1. 用户该如何描述他们想要的软件的最终状态;

  2. 2. 如何实现这个状态,即具体执行。

命令式DevOps平台同时将这两个问题扔给用户,而声明式的DevOps平台只让用户声明他们想要的最终状态,而具体执行的问题留给平台本身。

这就好比你只需要跟电脑店的老板说明你想到的电脑的配置和预算,电脑店的老板就按照行业里最高效的方式给你组装。

在用户的眼里,只要修改软件的最终状态的描述,声明式的DevOps平台就可以帮他们以最快的方式去实现。

这是命令式与声明式的最大区别。用户在命令式的平台下,通常很难知道整个软件的最终状态。就像你拿到部署文档,上面只告诉你要执行的一条条命令,最终状态是什么样,要等待执行完成才知道。

另一个很大的不同点是幂等性。用户可以在声明式的DevOps平台多次声明他想的最终状态,如果用户期望最终状态与实际状态一致,声明式DevOps平台就不会去执行。

如果要在AWS云上部署一套简单的负载+机器,以下以Terraform为声明式DevOps平台案例(不了解代码的可以跳过):

resource "aws_lb" "default" {name = "example-lb"subnets = aws_subnet.public.*.idsecurity_groups = [aws_security_group.lb.id]
}resource "aws_lb_target_group" "hello_world" {name = "example-target-group"vpc_id = aws_vpc.default.id...
}resource "aws_lb_listener" "hello_world" {load_balancer_arn = aws_lb.default.id...default_action {target_group_arn = aws_lb_target_group.hello_world.idtype = "forward"}
}  resource "aws_security_group" "hello_world_task" {name = "example-task-security-group"vpc_id = aws_vpc.default.idingress {...security_groups = [aws_security_group.lb.id]}...
}resource "aws_ecs_cluster" "main" {name = "example-cluster"
}resource "aws_ecs_service" "hello_world" {name = "hello-world-service"cluster = aws_ecs_cluster.main.idtask_definition = aws_ecs_task_definition.hello_world.arn desired_count = var.app_countnetwork_configuration {security_groups = [aws_security_group.hello_world_task.id]subnets = aws_subnet.private.*.id}load_balancer {target_group_arn = aws_lb_target_group.hello_world.id...}depends_on = [aws_lb_listener.hello_world]
}

以上是用户使用HCL语言描述期望的最终软件的状态。具体的执行交给Terraform和云厂商实现。

Terraform会根据HCL的描述决定哪些资源的创建可以并行,哪些已经创建了不需要再创建等。用户不再关心步骤1是先创建负载均衡,还是先创建EC2。

这在行业里另有一个名字:Infrastructure as Code。

的确,IaC是实现声明式DevOps平台的最低成本方式,你不需要另外开发界面。还有大量开源社区(Terraform的生态)工具给你使用,如:InfraCost(云成本diff工具,高级点叫FinOps)、Terratest(对Infra进行测试)等。

值得一提的是,对于多云的支持,命令式的DevOps平台通常需要通过各个云的SDK集成到自己的平台,这个开发成本非常大。

而使用类似Terraform这样的声明式的平台,多云原生就支持。

那么,声明式的DevOps是不是只能选择使用代码来描述软件的最终状态?其实并不是,声明式的DevOps平台也应该可以提供界面进行描述。

最后

作为用户,你倾向于使用哪种模式的DevOps平台呢?为什么?

往期好文推荐:

  • 探讨基础设施即代码所带来的挑战

  • Kubernetes包管理器Helm的本质

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/139005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用 Google Artifact Repository 构建docker 镜像仓库

参考了google 官方文档 https://cloud.google.com/artifact-registry/docs/docker/store-docker-container-images 首先 enable GAR api gcloud services enable artifactregistry.googleapis.com gcloud services list | grep -i artifact artifactregistry.googleapis.com …

SparkAi创作系统ChatGPT网站源码+详细搭建部署教程+AI绘画系统+支持GPT4.0+Midjourney绘画

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

考研分享第1期 | 末9生物跨专业考研北京大学电子信息404分经验分享

全文概览 一、个人信息 二、关于考研的经验分享 三、最后的小Tips 一、个人信息 姓名:Jackson 本科院校:某末流985生物专业 报考院校:北京大学电子信息专业 择校意向:北航计算机、人大高瓴、复旦软院、清华大学深研院、北…

时间序列预测实战(十二)DLinear模型实现滚动长期预测并可视化预测结果

官方论文地址->官方论文地址 官方代码地址->官方代码地址 个人修改代码->个人修改的代码已经上传CSDN免费下载 一、本文介绍 本文给大家带来是DLinear模型,DLinear是一种用于时间序列预测(TSF)的简单架构,DLinear的核…

如何对element弹窗进行二次封装

方式一使用$refs 个人比较喜欢用这种的 通过$refs打开的同时 还能给弹窗组件传参 一些框架使用的也是这种方式 父组件 <template><div><el-button type"text" click"handleDialogOpen">打开嵌套表单的 Dialog</el-button><Dia…

Aspose.OCR for .NET 2023Crack

Aspose.OCR for .NET 2023Crack 为.NET在图片上播放OCR使所有用户和程序员都可以从特定的图像片段中提取文本和相关的细节&#xff0c;如字体、设计以及书写位置。这一特定属性为OCR的性能及其在扫描遵循排列的记录时的功能提供了动力。OCR的库使用一条线甚至几条线来处理这些特…

19 异步通知

一、异步通知 1. 异步通知简介 阻塞和非阻塞两种方式都是需要应用程序去主动查询设备的使用情况。 异步通知类似于驱动可以主动报告自己可以访问&#xff0c;应用程序获取信号后会从驱动设备中读取或写入数据。 异步通知最核心的就是信号&#xff1a; #define SIGHUP 1 /* 终…

[工业自动化-14]:西门子S7-15xxx编程 - 软件编程 - STEP7 TIA博途是全集成自动化软件TIA portal快速入门

目录 一、TIA博途是全集成自动化软件TIA portal快速入门 1.1 简介 1.2 软件常用界面 1.3 软件安装的电脑硬件要求 1.4 入口 1.5 主界面 二、PLC软件编程包含哪些内容 2.1 概述 2.2 电机运动控制 一、TIA博途是全集成自动化软件TIA portal快速入门 1.1 简介 Siemens …

hutool ExcelUtil导出excel二级表头

简介&#xff1a;Hutool是一款十分好用的开发工具集&#xff0c;里面包含了大部分日常开发常用的工具&#xff0c;使用简单方便&#xff0c;可以大大提升日常开发效率&#xff0c;十分推荐大家使用。这里简单总结一下基于Hutool的Excel使用。 一、Hutool依赖 <!-- Excel导出…

openssl研发之base64编解码实例

一、base64编码介绍 Base64编码是一种将二进制数据转换成ASCII字符的编码方式。它主要用于在文本协议中传输二进制数据&#xff0c;例如电子邮件的附件、XML文档、JSON数据等。 Base64编码的特点如下&#xff1a; 字符集&#xff1a; Base64编码使用64个字符来表示二进制数据…

高教社杯数模竞赛特辑论文篇-2023年B题:多波束测线布设(附获奖论文及MATLAB代码实现)(续)

目录 5.3.3 模拟退火对测线布设仿真检验 5.3.4 开角、坡度的灵敏度分析

SparkSQL语法优化

SparkSQL在整个执行计划处理的过程中&#xff0c;使用了Catalyst 优化器。 1 基于RBO的优化 在Spark 3.0 版本中&#xff0c;Catalyst 总共有 81 条优化规则&#xff08;Rules&#xff09;&#xff0c;分成 27 组&#xff08;Batches&#xff09;&#xff0c;其中有些规则会被归…

【Kubernetes】自建Kubernetes集群完全指南(含云主机公网部署方案)

这篇文章也可以在我的博客中查看 说在前面 本文介绍如何使用Kubeadm在自己的服务器上将Kubernetes应用部署为生产环境&#xff0c;而不使用Kuberentes云服务商。 在进行之前&#xff0c;我建议你先保持理智&#xff0c;问自己为什么需要这么做&#xff1a; 你正在学习Kuber…

elasticsearch分词器

内置分词器 Standard Analyzer - 默认分词器&#xff0c;英文按单词词切分&#xff0c;并小写处理Simple Analyzer - 按照单词切分(符号被过滤), 小写处理Stop Analyzer - 小写处理&#xff0c;停用词过滤(the,a,is)Whitespace Analyzer - 按照空格切分&#xff0c;不转小写Ke…

设计模式详解(十)——装饰器模式

装饰器模式简介 装饰器模式定义 从代码层面而言&#xff0c;是对类的一个扩展或者是修饰&#xff0c;从传统方法而言&#xff0c;我们可以使用继承来对某一个类进行扩展&#xff0c;但是往往会导致会出现非常多的子类&#xff0c;如果我们要想避免这种情况&#xff0c;那么我们…

深入理解 Django 单元测试

在现代软件开发流程中&#xff0c;单元测试是确保代码质量和可维护性的关键组成部分。对于使用 Django 框架的项目来说&#xff0c;Django 提供了一套强大的测试工具来帮助开发者编写和运行单元测试。本文将深入探讨 Django 中的单元测试&#xff0c;包括测试原理、编写测试用例…

uniapp——项目02

分类 创建cate分支 渲染分类页面的基本结构 效果页面,包含左右两个滑动区. 利用提供的api获取当前设备的信息。用来计算窗口高度。可食用高度就是屏幕高度减去上下导航栏的高度。 最终效果: 每一个激活项都特殊背景色&#xff0c;又在尾部加了个红条一样的东西。 export d…

python3GUI--QQ音乐By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;展示0.播放页1.主界面1.精选2.有声电台3.排行4.歌手5.歌单 2.推荐3.视频1.视频2.分类3.视频分类 4.雷达5.我喜欢1.歌曲2.歌手 6.本地&下载7.最近播放8.歌单1.一般歌单2.自建歌单3.排行榜 9.其他1.搜索词推荐2.搜索结果 三&#x…

ElasticSearch7.x - HTTP 操作 - 文档操作

创建文档(添加数据) 索引已经创建好了,接下来我们来创建文档,并添加数据。这里的文档可以类比为关系型数 据库中的表数据,添加的数据格式为 JSON 格式 向 ES 服务器发 POST 请求 :http://192.168.254.101:9200/shopping/_doc 请求体内容为: {"title":"小…

智慧城市建设解决方案分享【完整】

文章目录 第1章 前言第2章 智慧城市建设的背景2.1 智慧城市的发展现状2.2 智慧城市的发展趋势 第3章 智慧城市“十二五”规划要点3.1 国民经济和社会发展“十二五”规划要点3.2 “十二五”信息化发展规划要点 第4章 大数据&#xff1a;智慧城市的智慧引擎4.1 大数据技术—智慧城…