首页>>互联网>>DevOps->DevOps组件有哪些(devops 框架)

DevOps组件有哪些(devops 框架)

时间:2023-12-07 本站 点击:0

导读:很多朋友问到关于DevOps组件有哪些的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!

DevOps的设计实践

起初对于DevOps的概念的理解仅仅停留在“使用Bamboo自动化部署服务到指定环境上”,当我们开始尝试着对DevOps的流程开始做推广,首先确定的方案是,推动各组使用Bamboo做CI/CD的集成,第二是针对当前项目面临管理混乱的痛点问题,进行项目发版采用语义化版本管理。但正如康威定律所言,“设计系统的组织其产生的设计等价于组织间的沟通结构。”,我们不能仅仅在一次讨论中确定的方案就企图变革组织间的长达几年的沟通协作习惯。并且DevOps也不简单是一个普适的解决方案,它是一个 平台(Platform)、流程(Process)和人(People)的有机整合。

根据 martinfowler博客 中发表的对DevOps文化的见解(如下图),他认为DevOps文化中最重要的原则是 责任共担和质量导向 。在这点上,我认为我司有天然的优势,在项目开展的初期,包括当前项目运行生命周期中,研发包揽了大部分运维工作。可以说我们不从来不缺敢于担责的“勇士”。但同时,在我司大幅扩招的现状中,加强流程管理,保证这种文化的延续,同时在人员流动中能动态的加强文化导向,这是DevOps指导思想中重要的一环。

工具 = 平台+ 流程,首先,平台最重大的意义是承载企业内部的标准化流程,平台固化的每种流程,都可以用来解决某些实际问题,这样就会形成一下特征:

通过平台赋能,所有人都能以相同的操作,获得相同的结果。这样一来,跨领域之间的交接和专家就被平台所取代,当一件事情不再依赖于个人的时候,等待的浪费就会大大降低,平台就成了组织内部的能力集合体。

任何方法论不结合企业实际的现状来分析都是耍流氓(无处不在的康威定律),那么对于我司的实际现状,建立这一套体系能解决哪些问题呢?在和研发童鞋讨论问题的时候,能看到他们往往是处于只见树木不见森林的状态,整个“森林”往往是被少数的人所掌握的,这点在季度述职时候已经被不少人提出来过。诚然我们作为安全公司,部分产品是敏感且需要保密的,但是从整个层次和架构来讲,我们需要适配一套流程,达到 对技术开放,对数据加密 ,安全的流程正是SecDevOps需要解决的问题。同时这也很切合“三步工作法”中 流动 原则,只有 把复杂的流程简单化,可视化 我们才有机会让更多的人看见森林。而目前结合生态,软件交付的效率和质量成了当今企业的核心价值和核心竞争力,DevOps作为软件工程的第三次革命,总结来看它的价值体现在以下两点:

让一切软件交付过程的手动环节,都是未来可以尝试进行优化的方向。DevOps倡导职责共担,持续改进是需要将规则内建于工具之中,并通过工具来指导实践。如果仅仅是把线下的流程搬到线上执行,是没法发挥DevOps真正的价值。说到底,工具没法解决人的问题,这样一条看似取巧的路径,却没法解决企业的根本问题。这时候,就需要文化闪亮登场了。

总而言之,DevOps 中的文化和工具,本身就是一体两面,我们既不能盲目地奉行工具决定论,上来就大干快干地采购和建设工具,也不能盲目地空谈文化,在内部形成一种脱离实际的风气。我们要做的是 关注价值、关注现状、交互式流程和反馈、协作和可视化、自动化和持续优化、极简原则和关注实践。

敏捷管理不仅仅与研发敏捷,同时也要针对于业务敏捷, 开发更少的功能,聚焦用户价值,持续快速验证,就成了产品需求管理的核心思想。

另外通过“研发一体化流程”图示,我们也能见微知著。在我司目前在产品使用JIRA的看板形式做需求管理,这套流程在敏捷业务管理中已经有很好的天然优势, 我们需要做的是打通产品和开发的交流屏障 ,这部分流程以及功能,在我们的排期中暂时靠后,现未有具体实施方案,目前仅给出 BizDevOps 的核心理念:

关于持续交付功能,是初期内我们重点投入的阶段,这也是作为研发真正的用武之地,首先面临着第一个问题,自研OR开源?在我们开始做DevOps之前,已经有了部分在用的优秀开源工具作为支撑点,Jira、Bamboo、BitBucket。这些工具一定程度上减少了我们初期的工作量,在后续的项目计划中,我们做了基础存储,权限、DevOps流程等多方调研。关于存储和权限这类基础架构目前都有着成熟的开源解决方案。但是DevOps流程关联公司TOG的业务性质,以及目前的项目现状,我们选择自研平台,主要的规划方向有:

1.版本控制、变更管理

主要核心思想是: 版本变更标准化,将一切纳入版本控制,全流程可追溯和单一可信数据源。 ,一套标准化的规则和行为习惯,可以降低协作过程中的沟通成本,一次性把事情做对,这也是标准和规范的重要意义。

2.持续构建和持续集成、部署与发布的模式

主要核心思想是:用自动化的方式完成从项目编译到发布的流程

3.环境的搭建管理、元数据、初始数据的管理

这是目前我们项目发布中的瓶颈,配置、初始化数据应当纳入版本控制,同时制定标准的业务流程;

4.度量与反馈

针对于交付效率、交付能力、交付质量做指标统计,以及建立可视化平台。主要的指标包括, 需求前置时间、开发前置时间、发布频率、发布前置时间、交付吞吐量、线上缺陷密度、线上缺陷分布 等。

5.内建质量、保证测试

内建质量有两个核心原则 :

在为期近4个月的DevOps实践中,我们主要做了三件事情, 部分项目Bamboo的集成、基础架构的建设、DevOps平台的开发 。

初期我们做了一些关于DevOps的调研和实践,在 尽可能采用开源项目 的原则上,依赖于现有的技术结构,摸出了一套关于Bamboo的使用流程

开源OR自研?这永远是一个需要不断权衡和取舍问题,之前我们已经谈论到持续交付要做的事情有哪些,当开源组件不能Cover我们当下的流程,自研平台自然得上线了

基于上图我们可以看到FlowDevOps平台的基本的交互和流向。平台开发到现在经历了四个小版本的迭代,主要包含以下几个特性:

值得一提的是,我们选型了Jinja2作为配置模块统一管理,对各个环境公共组件的地址存放与平台,保证了服务离线部署中各类连接出错的问题。同时这种方式对业务的侵入较小,符合我们短期内提升部署效率的预期。

诚然,DevOps的建设在短期内已经做了不小的工作量,但是还是存在一定程度的问题。包括以下方面:

根据全球云计算峰会成熟度模型预估来看

在我司云原生于我们似乎是非常遥远的,陌生的技术栈,各类反直觉的故障。但是为什么我还是坚持认为云原生是我们未来建立DevOps,以及发展基础设计的最佳实践呢?引用CNCF对云原生的官方定义:

关键词有 开源软件、微服务应用、容器化部署和动态编排 ,虽然我们目前部分业务场景有传输相关的瓶颈,容器化则可能带来更大的存储体积。但从宏观角度来看,这并不是大部分项目的现状,而我们更多的项目核心的问题在于 数据量大、业务和配置复杂、依赖模块多 。而云原生应用天生就和DevOps 是绝配,自带高可用、易维护、高扩展、持续交付的光环,同时原生支持微服务、不可变基础设施以及服务网格这些技术领域,能天然解决业务复杂,依赖模块多的现状。

这也是我在基础设施建设工作中,坚持积累云原生技术方案的原因,云原生的技术方案,我始终认为它能大大推进我司效率建设和技术发展。即便我们在云原生的方案技术积累还不足够,比如还不能确认大数据在容器中运行的效率这类技术问题,但是当我们建设起更具效率的运营一体化流程,也就有更多的资本去进行试错,这片星辰大海等待我们去探索。

我们都期待完美,但在绝大多数时候,任何事情都不可能完美。软件更是如此,DevOps亦是如此。我们能做的就是基于每次的反馈,一点点的改进流程,一次次的反思提高。在不断的持续改进中,可能永远触及不到完美,但是就像美国著名女演员莉莉·汤姆林(Lily Tomlin)的那句经典名言所说的那样: The road to success is always under construction.(通往成功的道路,永远在建设之中) 。

几个优质的DevOps开源项目分享

《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是几个优质的DevOps开源工具。

Jpom是一个简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件。当项目出现问题时,可以能够通过Jpom即时排查问题,问题解决后还可以直接上传修改后的Jar,项目的堆栈信息,服务器CPU、内存使用情况一目了然,不必再登录服务器管理。

项目地址:

猪齿鱼Choerodon全场景效能平台,提供体系化方法论和协作、测试、DevOps及容器工具,帮助企业拉通需求、设计、开发、部署、测试和运营流程,一站式提高管理效率和质量。从团队协同到DevOps工具链、从平台工具到体系化方法论,猪齿鱼全面满足协同管理与工程效率需求,贯穿端到端全流程,助力团队效能更快更强更稳定。

项目地址:

面向中小型企业设计的无 Agent的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、文件在线上传下载、应用发布、任务计划、配置中心、监控、报警等一系列功能。

项目地址:

walle 让用户代码发布终于可以不只能选择 jenkins!支持各种web代码发布,php、java、python、go等代码的发布、回滚可以通过web来一键完成。walle 一个可自由配置项目,更人性化,高颜值,支持git、多用户、多语言、多项目、多环境同时部署的开源上线部署系统。

项目地址:

Zadig 是一款面向开发者设计的云原生持续交付(Continuous Delivery)产品,具备高可用 CI/CD 能力,提供云原生运行环境,支持开发者本地联调、微服务并行构建和部署、集成测试等。

项目地址:

Gokins一款由Go语言和Vue编写的款轻量级、能够持续集成和持续交付的工具。作为一个可扩展的自动化服务器,Gokins 可以用作简单的 CI 服务器,或者变成任何项目的持续交付中心。

项目地址:

KubeSphere 愿景是打造一个以 Kubernetes 为内核的云原生分布式操作系统,它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用(plug-and-play)的集成,支持云原生应用在多云与多集群的统一分发和运维管理。

项目地址:

什么是devops

DevOps是IT服务管理的一种模式。过去的数十年间,IT运维发展经历了数个阶段。从早期的手工运维到标准化运维、自动化运维,到如今的DevOps、AIOps。

简言之,DevOps试图打通开发和运维的部门墙,从而打通整个IT价值交付的全生命周期,从产品需求到上线运维的全过程实现效率的提升。

DevOps最显著的作用是提高了企业产品的交付质量、缩短开发周期、减少故障。而降本增效是每一个公司在数字化转型之后的很大的挑战,DevOps无疑直击痛点。

而作为一名DevOps 工程师,除了要具备软件工程师基本的编程能力以外,还需要特定的人际交往、工具使用等技能。换句话说,DevOps 工程师需要“软”、“硬”技能兼备,具体如下:

一、沟通与协作技巧

DevOps 是一种横跨软件开发、测试和部署的协作方法。它将原本具有不同目标的开发、测试和运维小团队聚集在一起,以实现更高效和高质量的代码发布,这就要求 DevOps 流程中的不同角色之间不能有任何交流障碍。因此,良好的沟通技巧(无论是口头还是书面)对于优秀的 DevOps 工程师来说是必不可少的。

协作能力也很重要。DevOps 是团队合作的开发模式,每个工程师都是团队成员,需要在整个软件迭代过程中支持其他同事的工作。这不仅仅要求我们成为一名优秀的队友,还要在适当的时候给新人一些建议,包括但不限于指导和建议团队成员交付代码的最佳方式、编码时使用哪些工具以及如何测试最新功能。这就要求我们自身也要对这些 DevOps 流程中的必要技能有所了解。

二、熟悉和理解 DevOps 工具链

除了协作和沟通这样的“软”技能之外,DevOps 工程师还必须知道如何使用各种复杂工具协同工作以支持软件交付目标,这是成为一个优秀的 DevOps 工程师所必备的“硬”技能。

DevOps 工程师需要知道如何使用和理解以下类型工具的作用:

版本控制工具

详细地说,集合了代码审查、合并功能的版本控制工具是能让多个开发人员之间完美协作的主要DevOps 工具。由于 DevOps 流程汇集了来自各个部门的专家,所以他们需要了解源代码控制系统,以及系统跟踪不同应用程序中的更改。此外,它还维护应用程序的多个版本。

目前 DevOps 流程中常用的版本控制系统都基于开源分布式版本控制系统 Git,例如 GitHub、Gitee、GitLab 以及各大厂商基于 Git 定制的内源协作工具。

持续集成工具

持续集成(CI)是 DevOps 的关键技能之一,它是构建 pipeline 的重要部分。DevOps 要求运营和开发团队使用统一的系统。因此,持续集成所做的就是将开发人员的代码与 master 合并在一起。有了这样的技巧,就可以有效地合并数据。因此,DevOps 工程师一定要知道如何使用一些常用的 CI 工具,例如 GitHub Action、Jenkins、Bamboo、TeamCity、Travis CI 等。

容器与编排工具

容器作为现代微服务与云原生架构的核心技术,提供了关于 DevOps 的三个基本功能,包括持续的实验、流动和反馈。容器技术的不可变基础设施实现了操作系统层虚拟化,不仅方便运维程序升级和部署,还升华成了向应用代码隐藏环境复杂性的手段,成为推广分布式服务的必要前提。

目前,Docker 仍然是应用最广泛的容器技术,而以容器编排引擎 Kubernetes 为核心的云原生技术栈则是各大互联网企业构建容器技术基础设施的事实标准。

自动化工具

自动化是软件开发过程中必不可少的要素之一。几乎所有的手工任务都可以使用各种脚本语言自动完成。例如,Ruby、Bash、Python、Node、Shell 等等。可以说,使用自动化开发工具已经成为了很多 DevOps 团队加快开发和部署过程的关键。想要成为 DevOps 工程师,掌握自动化工具很有必要。

监控和报警工具

DevOps 持续集成和持续部署的实现离不开持续监控的辅助作用。许多微服务都是由数百个组件组合而成,其中一个服务的故障可能导致整个系统崩溃。当然,手动找到核心故障问题是很复杂和耗时的。其中一个解决方案就是持续监控关键特征,如 RAM 使用、请求数量、异常数量和存储空间。因此,需要根据系统的关键特性设置一个警报系统。例如,当存储空间使用率达到 80% 时应该触发警报,以便 DevOps 运维开发人员可以在整个系统崩溃之前解决问题。

三、具有成熟编码标准的特定编程技能

然编程能力是每个开发者最基本的能力,但 DevOps 工程师在这方面仍然有一些更特殊的要求。

通常来说,DevOps 工程师需要在专精 1-2 门编程语言的基础上熟悉多种语言,例如 Java、JavaScript、Ruby、Python、PHP、Go 等,这是由微服务时代同一系统不同服务可以由不同语言、不同框架实现的特性而决定的。DevOps 工程师至少需要了解这些语言的特性并具备在操作系统环境中编写和调试它们的能力。

四、技术支持和维护技能

优秀的 DevOps 工程师不仅需要开发方面的技能,有时还需要为客户提供维护和技术支持。这意味着 DevOps 工程师应该乐于为内部和外部客户提供支持,并在出现问题时进行故障排除。

结语:以上就是首席CTO笔记为大家介绍的关于DevOps组件有哪些的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。


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