还在手工改 100 台配置?Git + Python 把重复活交给机器
此篇为《零基础学Linux运维》系列之中的进阶篇的第32篇, 建议先进行收藏, 跟随其练手的话效果会更佳。要对100台机器更改一个Nginx配置, 你难道是一台一台地登上去用vim操作吗? 那样做不仅速度慢, 而且肯定会出现改错的情况。真正具有区分意义的界限是: 将配置放入Git, 把重复的操作编写成。这一个步骤, 恰恰是你迈向、自动化的必须经过的道路, 也是从“操作员”转变为“工程师”的关键的一次跨越。一、Git 工作流让配置也有版本运维涉及的脚本, 以及配置, 还有文档, 全部都应当进入Git。基础的动作就是这几个:git clone 仓库 # 拉取基线 git checkout -b fix/nginx # 开分支改配置 git commit -m fix: 调整 worker 数 git push origin fix/nginx # 推送发合并请求 git tag v1.2 # 打标签对应一次发布如何解决冲突呢: 当多人修改同一个文件时, git pull会报错 , 之后手动合并标记块。要养成一种习惯, 这种习惯是“先进行pull操作, 之后再开始修改, 修改时小步提交, 并且做到分支隔离” , 在线上进行回滚的时候, 只需要使用git指向某个标签即可 , 这样做比备份整个目录要优雅太多了 , 同时也方便进行审计, 能够清楚知道“是谁、在什么时候、修改了什么”。存在这样一个团队协作方面的潜规则, 即不要在那个上面直接进行修改, 所有的变更都要通过走分支以及参与评审 MR/PR 的方式来处理, 这可是保障生产环境不出现问题的基本纪律所在。再补充几个高频然而容易混淆的命令, git merge会把分支合回到主干, 要是出现冲突那就需要手动去解决, git tag能够给某次提交打上“版本 ”, 回滚的时候直接使用git v1.2相比于翻哈希更加省事, git stash会临时把改动隐藏起来去处理紧急事务。将脚本以及配置纳入版本控制之后, 每一次线上变更都是可以追溯、可以回退的, 这比任何口头约定都更为可靠。二、 运维三板斧Shell适宜短平快, 然而复杂逻辑、调用API以及解析JSON, 更为得心应手。存在三个高频场景:1. 调用系统命令import subprocess r subprocess.run([df, -h], capture_outputTrue, textTrue) print(r.stdout)2. 进行批量文件处理, 其中包括日志清洗, 还有正则提取, 以及批量重命名, 相较于Shell而言更易于维护。3. 将接口进行调用, 其作用在于, 能够自动把监控数据给拉取过来, 接着去调用云 API 来开启机器, 最后还要推送钉钉告警。import requests requests.post(url, json{msg: 磁盘超 90%})这三类, 覆盖了百分之八十的运维开发所需, 先将它们练得娴熟, 后续碰到新的需求都是换汤不换药的情况。比如说, 批量来更改文件名, 按照规则进行日志归档, 几十行就能抵得上百行的Shell, 而且还更加易于阅读。为啥要用它, 而不是直接用os.呢? 它具备更出色的安全性, 能够有效避免shell注入情况的发生, 还能够获取到返回码以及输出内容, 如此一来方便编写判断逻辑。在文件处理场景当中, 使用它相较于手写路径拼接方式更为稳妥, 在跨平台操作时能够减少踩坑几率。当调用云API的时候, 一定要记得添加它以及进行重试操作, 不然的话, 一个出现故障的接口有极大可能会卡死你整个巡检脚本。最后要提醒的是, 配置文件当中的密码以及密钥, 绝对不可以提交到Git里面, 要采用.进行排除或者是改用环境变量或者密钥管理工具。把密钥上传到公网仓库, 这就等同于把服务器大门的钥匙张贴在门口。三、为 / 铺路你所撰写的脚本, 紧接着便能够被编排成为“一键批量执行”模式将该脚本与Git仓库相连接, 一旦提交它就会触发自动发布的操作——这也就是CI/CD的最初形态了。今日无需全部学会, 只需记住: Git 掌管“改动了哪些内容”, 掌控“如何自动进行改动”, 工具链负责“批量实现落地”。列举一个落地的示例: 你运用某工具编写出来一个“检查磁盘并发出告警”的脚本, 将其放置进 Git 来管理版本借助另一工具把它批量推送至 100 台机器并设置成定时任务再连接某设备, 脚本一经改写提交便会自行重新分发。这三件套串联起来, 一次人工操作就彻底不复存在了。这同样是面试当中高级运维极为爱问的“自动化落地”思路。将三层予以打通, 你距离资深运维所欠缺的便是场景积累了。当机器规模达到几百台的时候, 手工这一方式已然不够用了, 此时才真正需要这类声明式工具——然而打下的逻辑能力, 会使你学习得快出很多。#Linux进行运维工作 #Linux展开学习过程 #成为运维工程师岗位人员 #身为程序员职业者 #从零基础开始学习编程。