在本文中,我主要解释解释自己的日常工作有哪些内容。顺带一提,我在这一行做了快三年的顾问,但从来没有认真定义过自己的工作内容和角色定位。
DevOp 作为一个术语,承载着非常广泛的含义,不同的人或者组织而言对此也有着不同的理解方式。所以我不敢妄言 DevOps 工程师的所谓规范定义,或者是将其严格限定为某种工作角色/职位或者文化运动。
个人动机
之所以想起写下这篇文章,是因为有时候我发现自己也闹不清在工作里到底做了什么。因为我不是什么 Java 专家、不是一线开发者、不是系统管理员,也不同于大家所熟知的任何常见角色。另外,我甚至很难被准确划入任何一个严格限定的知识领域/单一专业方向(在这方面,我可能跟系统管理员有点类似)。
我在 Reddit 网站的 DevOps 频道中看到过一篇文章,受此启发,我想试试能不能通过一篇博文说清自己的工作到底是什么。好了,下面进入正题。
作为 DevOps 顾问,我到底在做什么
背景说明
在正式加入目前这家公司之前,我曾在 IT 领域拥有一些短期从业经历——前后大约 7 个月。在这轮夏季实习当中,我拿出了 4 个月左右积累自己的全栈开发经验,包括使用 APS.NET 框架以及 Razor 后端模板,外加 kickout.js 以及使用 svn 作为 SCM 等等。在此之后,我把另外 3 个月花在初级研究员职位上。最终与虚拟化建立关联,是在一个研究项目当中,当时我们利用西门子的 Jailhouse 项目探索虚拟化技术在 RTOS 中的影响。该项目能够提供虚拟化单元(这是我们自己起的名字),用以访问无法在其它单元之间共享的硬件。这是我第一次接触管理程序,了解它们的类型以及工作方式。在后来真正走上 DevOps/基础设施岗位之后,凭借着实际体会,我坚信虚拟化将成为其中的关键概念。
我的 DevOps 发展路线图
目前,我在一家咨询企业负责改进开发流程与工作流程,我们通过基础设施自动化与整体思维方式的转变帮助 IT 企业客户改善组织流程。
自从接触工业物联网环境以来,我获得了更灵活的施展空间,包括随意选择语言、框架——总之,只要对业务架构以及业务需求具有实际意义,我都可以做出自己的决策。
在项目当中,我最终使用 python 配合 flask,这也是我第一次接触 Docker;此外,我还负责管理网络、工业协议、面向 arm 设备的交叉编译、RAM 资源优化,以及思考如何加强软件项目对物理环境下各类挑战的抵御能力(例如断电、网络中断等)。与此同时,我还利用 Open ERP 开发出一个内部项目(名为 ODOO),并利用 Python 脚本对其进行自动化配置(ODOO 同样使用 Python 编写而成)。
从这里开始,我转向咨询岗位,并由此接触到配置管理以及 Ansible。此外,我还利用 Vagrant 配合 LXC(而后转向 Docker)以及 Ansible 配置机制,确保不同开发结果能够在开发人员的机器上拥有相同的运行状态。
配置管理
很多朋友可能拥有配置管理经验。但为了避免没接触过这方面工作的读者搞不清状况,这里我多解释几句。在编写这类任务时,我们需要拥有完整的基础设施与开发环境,同时具备操作系统知识、了解其特性、熟悉其脚本(从 bash 等 powershell 等等)。而最重要的,无疑是软件架构的全面知识,这是一切 DevOps 岗位的必然要求。另外,熟悉最新工具——虽然简历里说要求什么五年的工具使用经验,但实际上好多工具正式推出才一年左右。当然,大家明白其中的意思就行,包括熟知软件应该如何工作、了解其已知模式以及工具语法等。
由于 DevOps 岗位跨越整个组织结构,因此我们必须同时了解如何编程、了解网络原理、了解虚拟化知识、了解软件等等。在日常工作当中,我还把很大一部分时间投入到代码粘合当中。
CI/CD
使用 CI/CD(持续集成/持续交付)工具,并在源代码管理方面获取 IAC(基础设施即代码)以及应用程序代码。为了实现这一点,我需要经常用到 git 以及大量相关工作流程,同时利用 groovy 构建同事们易于理解的 yaml 配置,进而实现 Jenkins 的自动运作与配置。这实际是 DevOps 工作中的一大日常组成部分,虽然我已经不再像过去那样经常使用 Ansible,CI/CD 工具及其流水线仍是个需要经常复习提升的技术方向。
安全与访问控制
最后,我还经常需要面对身份验证、授权、使用 LDAP、Keycloak(及其所有集成,、SAML、Oauth 等);虽然有很多替代性工具,但 Keycloak 仍然非常重要。毕竟三个 A(即授权、认证与访问管理)解决方案,特别是 keycloak,绝对是一类不可或缺的常备工具。
基础设施即代码
除了 Docker、Vagrant 以及 Ansible 等,我最近也开始拉钩 eTerraform,并短暂使用过一阵子 DloudFormation。而且除了使用 ESXi 的内部环境之外(我还没对其进行自动化升级),总有某些云基础设施需要实现自动化,在这方面我的职能角色开始变得比较模糊。不少企业需要 Terraform 专家,或者是 Azure DevOps 管理员乃至 AWS 负责人之类;但这些都不是最重要的,这些具体的某一种技能不会是 DevOps 职位的全部。否则,我们需要的只是 Terraform 专家/Azure 管理者这类类似于云系统管理员的职位,而不是真正的 DevOps 角色。
负载均衡器与反向代理
再有,大家应该熟悉 Nginx、HAProxy 或者 Traefik 的配置方法,及其实例(Docker 或其它)格式或安装技能。我曾经配置过不少负载均衡器,大多数作为反向代理使用,但我目前还没遇到过成规模的 ELB 或者是其 Azure 配置任务。
哦,对了,在这方面,证书管理也是一类躲不开的常见工作。
应用程序开发
最后但同样重要的,自然就是开发工作了。我目前在使用 Java 与 JavaScript 进行全栈开发。我认为作为一名 DevOps 人员,再加上完整解决方案这一需求背景,我必须成为一名出色的工程师加程序员。毕竟 DevOps 的原则就是“谁构建,谁运行”——也就是说,我需要编写应用代码行、支持基础设施代码、打理负载均衡器、完成应用程序的部署与 QA 流水线构建工作。
数据库
好吧,差点忘了数据库这码事。ElasticSearch、PostgreSQL、MySQL 等都很常见。虽然我不是什么数据库管理员,但最终还是得接手相关配置工作,包括管理其连接、ACL、备份等等。当然,我还远远称不是 SQL 专家,而且也会尽量避免在数据库或者 AWS 专家这些方向上把路走窄。
员工心态
到目前为止,我已经谈到很多语言与不同的环境。但在大多数情况下,除了编码工作之外,我还是得跟同事们打交道。我的一部分重要工作,就是帮助其他工程师建立起 DevOps 思维模式、简化工作内容、让他们的生活更轻松并在整个组织之内运行他们的应用程序,最终弥合开发人员与运营团队之间的差距。
内容总结
如果大家不想浪费时间从头读下来,那一句话总结:DevOps 人员,需要什么技术都懂一些。正因为如此,DevOps 有时候会被称为万金油或者架构大师。当然,我觉得自己完全称不上什么大师,在成长方面还有很长的路要走。
希望大家喜欢这篇文章,也希望它能帮助大家解决“DevOps 人士到底在做些什么”这个难题。当然,如果各位已经是这个岗位上的一员,那么您可能正与我经历类似的工作体验。
感谢大家的宝贵时间和耐心:)
下面是我整理出的,优秀 DevOps 人士的发展路线图:
原文链接:
评论 1 条评论