【运维趟坑回忆录 开篇】初入初创, 一脸懵逼

2024-06-16 17:18

本文主要是介绍【运维趟坑回忆录 开篇】初入初创, 一脸懵逼,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

距离vpc和容器化过去了快一年, 一直想要完整回顾梳理下整个过程, 最近准备进行swarm->kubernetes的二次迁移, 正好借由这次契机重新回顾下这段历从最初原始时代到vpc,swarm容器化到k8s的经历.

原始时代

16年7月从上家游戏公司离职, 来到了目前的互金公司, 成为唯一的运维, 此时公司java开发人数已经有几十人… 运维的技术栈也由php转移到了java, 刚开始的时候有些不适应和孤独感(只有自己一个运维, 交流主要就是招我进来同时也是前期负责运维这块的CIO, 刚开始下发完任务后交流也不多), 花了一段时间适应和熟悉后, 感觉问题颇多.

现状是开发同学有很多, 但是运维就一个, 初期运维这块内容由CIO兼顾, 同时CIO还是整个架构的主导者和主力程序员. 已有的100多个ECS由puppet下发配置, puppet agent默认半小时刷新一次.
应用类型主要为spring + dubbo, tomcat + nginx

比较关键的几个问题如下

  • 经典网络问题: 公司所有计算资源均在阿里云上, 不过阿里云当时并未推出vpc, 所有资源都在经典网络, 直接导致了如下的问题
    • 安全问题: 经典网络各租户ip之间并不能保证真正的隔离, 有一定风险, 不过CIO安全公司出身, 很强烈的安全意识, 所有ECS都开启了iptables, 只开放了自有节点的访问, 规则由puppet统一下发, 但是agent半小时才会自动刷新, 过程并无任何监控, 是否生效完全随缘, 而且puppet主机列表是手动维护的一个list文件, 漏没漏很难说.
    • 网段问题: 节点都是阿里云自动分配A段的随缘ip, 一个节点一个公网ip, 意味着出口ip各不相同, 新增一个节点, 要加一堆白名单(rds,drds,slb,nas等等),内部内网应用等资源还好说, 调用阿里云api还可以自动操作下, 要是涉及到第三方要报备的时间就很难控制了, 这个导致我们新增节点非常痛苦, 加一次白名单就很要命了, 只能提前部署好一些备机以防万一,平时在备机上跑一些不太重要的任务.
  • 项目部署, 有一个专门的编译服务器, 上面分了testbuilder和pordbuilder的用户, 对应测试和线上的构建用户, 开发同学自己登陆到编译服务器用脚本编译和拷贝到NFS目录, 然后到对应的测试或线上服务器一台一台的用NFS中的部署脚本部署
    • 各种冲突:
      • lib冲突: java同学抽出来的lib包很多, 虽然有maven私服, 但是所有java的lib包全部都是SNAPSHOT版本, 而且基本没有上传私服的习惯, 一旦有公共lib改动在测试环境编译了, 很容易就会导致其他开发同学躺枪.
      • 测试环境的资源冲突, 测试环境一共只有有4~5台服务器, 各种tomcat和端口满天飞, 根本无法识别, 该起的没起来, 本来应该停了的跑起来了.
      • 代码冲突: 部署脚本都是自己维护, 没有统一模板, 内容千奇百怪, 分支切来切去, 而且都是用的testbuilder和prodbuilder用户, 完全不知道谁之前到底干了啥, 代码冲突也经常发生, 维护完全靠自觉.
    • 发布太随意: 开发同学自己掌控线上服务器部署能力, 有时候发布略随意, 不吭声的把未充分测试代码发布到线上导致问题, 事后出现异常才体现出来
    • 环境不一致: lib包繁多并且都是SNAPSHOT版本,如果涉及改动的lib太多,测试环境测试正常版本的lib状态,到线上编译的时候不一定和测试一致,就会导致报错.
    • 发布时间太长: web基本项目都使用了slb, 部署的流程则是, slb权重调零->跑NFS里的部署脚本(停止应用, 备份老的代码, 从NFS复制新的代码, 启动应用)->挂回SLB,节点多的部署一次可能半小时就没了, 万一要是还有问题需要回滚, 或者高频次发布, 完全就耗在这种重复的事情上了.
  • 基础服务版本差异: 由于没有标准化模板, tomacat或者nginx之类的基础服务的版本也是千奇百怪, 当中配置文件的差异就更是玄学了
  • 权限控制:
    • 服务器权限: 有一个现成的中央跳板机, 每个开发同学有一个自己的账号, 应用服务器则是统一使用的xxxx用户, 能否登陆应用服务器, 取决于应用服务器上是否加了跳板机上对应开发的key,开发同学登陆到应用节点后基本就不可控了, 都是同一个账号, 无法区分谁干了啥. 而且当时puppet里面配置的分组只有测试和线上, 要是加一下登陆的key整个线上环境节点的登陆等于全开放了
    • 数据库权限: 由CIO直接在数据库开通个人的数据库账号, 通过跳板机创建ssh转发, 用内网ip以跳板机身份去访问RDS, 起了一个简单的tcpdump进程对内网网卡抓包,用perl分析,可以获取发出的明文sql,查起问题来很麻烦, 而且一般是事后了.
  • 配置管理:
    • 应用的文件配置: 各种properties文件, 项目内resource目录下分了common,dev,prod文件夹, mvn编译的时候传入参数类似 -Ddev 参数来获取对应环境的配置文件. 不过dev环境配置包括账密之类的都是直接写死在文件里提交git, 线上配置则是用占位符比如 {DB_PASSWORD},在编译节点部署的时候,通过脚本替换占位符替换为真实的值.不过既然能登陆编译服务器, 稍微机灵点的看下脚本内容就能找到有着所有明文配置的源配置文件…替换后的应用配置文件也依旧是明文的,到应用服务器或者NFS上还是一览无余, 加上服务器权限开得很奔放且无审计, 组合起来真是灾难. 想想万一有个好奇的看到了源文件配置好奇在服务器上连了下里面数据源或其他内容, 你怕不怕
    • 应用内的配置: 这种是应用在启动后读取的实时配置, 现成有个superdiamond,但是是单点的, 整个环境的应用配置都堆在一个页面, 页面加载都要等好久, 没有版本管理,不好回滚, 热加载也是随缘, 有时候改个配置还是要重启. 同样也有明文配置的问题.
  • 监控:
    • 业务监控: 有一个自研的业务监控系统
    • 系统监控: 基本没有.

上面这些问题刚开始的时候用一些粗暴的方式去缓解:

  • 监控: 部署zabbix对系统和进程信息进行监控, 加了发现规则自动获取tomcat进程加入监控(经常性线上应用跑挂了不知道, 这个效果还不错), puppet dashboard获取agent节点配置刷新的状态,至少改完配置后不是一脸懵逼傻傻的等, 有时候想要快速生效, 就直接用ansible去批量刷puppet agent.
  • 权限回收: 线上应用服务器权限回收, 对已有节点分组, 按需根据应用组或者项目组授权. 编译服务器权限线上编译账号prodbuilder权限回收重新分配, 让开发同学权限尽量最小化.
  • 流程和标准化:
    • 线上核心应用禁止私自部署, 统一提工单到运维同学, 周知项目相关同学, 由运维同学部署(导致的结果就很直接了,不少时间耗在这了,不过确实因为私下部署而导致问题的情况好了很多)
    • tomcat,nginx等应用版本和参数确定好作为模板后放到NFS,后续应用都由模板创建.
    • 线上发布的lib统一为master分支, 应用使用online分支.非充分测试的提交禁止合并到部署分支.后续比较重要应用的部署都是运维同学控制,还比较好控制.
  • 配置中心: 换成了spring cloud config, 有点重, gitlab全家桶加上开发同学自己写的客户端. 好处是依赖gitlab有了版本管理, 热加载不再是玄学, 但是依旧有着单点的问题,而且客户端不太稳定, 造成了几次大规模出错.
  • 提前部署: 需要报备三方的应用, 提前部署起来, 平时先不启动, 节点上可以先跑不太重要的服务.需要扩容的时候直接更新最新代码启动后挂载到对应slb提供服务.

探路

当然上面列出的都是缓兵之计, 大部分问题还是存在, 在前几个月懵逼和饱受白名单问题煎熬后, 慢慢打起了vpc迁移的算盘.

这个迁移很大的一个问题就是, 如何将VPC和经典资源打通呢? 详见下篇

这篇关于【运维趟坑回忆录 开篇】初入初创, 一脸懵逼的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067057

相关文章

Android热修复学习之旅开篇——热修复概述

Android热修复技术无疑是Android领域近年来最火热的技术之一,同时也涌现了各种层出不穷的实现方案,如QQ空间补丁方案、阿里AndFix以及微信Tinker等等,从本篇博客开始,计划写一个系列博客专门介绍热修复的相关内容,本系列博客将一一介绍这些框架的原理和源码分析,作为本系列的开篇,本篇博客将对热修复技术进行一个概述,并对以上几种方案进行对比。 为什么会出现热修复? 简单来说,以前出

品牌推广宝典:初创品牌如何利用软文提高曝光率

在竞争激烈的商业环境中,初创品牌面临着诸多挑战,其中最大的挑战之一便是如何在众多品牌中脱颖而出,提高品牌曝光率。而软文作为一种低成本、高效率的营销手段,对于初创品牌来说具有非常重要的意义。今日投媒网就与您分享初创品牌如何通过软文提高品牌曝光率. 一、理清目标画像,向用户需求看齐 在做营销策略前,初创品牌需要明确自己的目标用户群体,利用数据进行目标受众用户群体画像分析,像潮玩类品牌的目标用户

Lamp兄弟连第五十期开篇宣言 “要么赶紧死,要么精彩的活着”

要么赶紧死,要么精彩的活着” 听到这句话的人,大部分人应该是不会陌生的,这句话出至中国达人秀第一季冠军刘伟的经典语录,话很直白,也很明了,从他那不放弃自我的求生,不放弃自我梦想的追寻,最终造就了奇迹的诞生,而他也因此得到了世界上独一无二的,既优雅又传奇的名字“断臂钢琴王子”。 2010年7月 年仅23岁的刘伟 参加东方卫视《中国达人秀》 同年10月获得冠

一篇回忆录

一转眼,好几个月过去了,我已经感受到了围绕在我们周围那淡淡的离别气息!又要面对毕业了,呵呵!     回想当初,带着几件衣服,独自一人,就义无反顾的踏上了火车,心中颇有几分斗志昂扬的感觉。     记得当初,我有位资深的同事说过:“没去过北京的程序员,别说自己是搞IT的,因为北京就是中国IT界的 “耶路撒冷”。那时就有几分意动。     我是因为喜欢才入的这一行,所以,学习的方式一直都是自

写点什么吧,作为STM32系列的开篇……

自从本科毕业后,就再也没碰过单片机…… 自从研究生毕业后,就再也没碰过硬件…… 自以为以前单片机玩的熟得很,特别是ATMEGA系列的AVR单片机,由于老师的推荐,本科时花了好多精力在这个系列单片机上面…… 本科时STM32还没开始流行,嵌入式系统课程用的还是三星S3C44B0,任课老师做项目用的是LPC系列,但圈内STM32已经在崛起了,大四的时候还给毕设老师设计了一块STM32的开发板,从

DETR开篇之作

1. 论文背景和动机 背景: 传统的物体检测方法(如Faster R-CNN等)通常依赖复杂的多阶段 pipeline,包括区域候选生成、特征提取和后处理步骤。这些方法尽管有效,但复杂度高且难以端到端训练。 动机: DETR的提出是为了简化物体检测的流程,通过端到端的训练方式实现高效准确的物体检测。 2. DETR的核心思想 Transformer架构: 利用 Transform

一脸懵逼学习hadoop之HDFS的java客户端编写

一脸懵逼学习hadoop之HDFS的java客户端编写 1:eclipse创建一个项目,然后导入对应的jar包: 鼠标右击项目,点击properties或者alt+enter快捷键--->java build path--->libraries--->add library--->user library--->next--->user libraries--->new--->hdfs

一脸懵逼加从入门到绝望学习hadoop之Caused by: java.net.UnknownHostException: master报错...

一脸懵逼加从入门到绝望学习hadoop之Caused by: java.net.UnknownHostException: master报错 windows下开发hadoop应用程序,hadoop部署在linux环境中, 在运行调试时可能会出现无法找到主机,类似异常信息如下: java.net.UnknownHostException: unknown host: master 解决

一脸懵逼学习oracle(图形化界面操作---》PLSQL图形化界面)

一脸懵逼学习oracle(图形化界面操作---》PLSQL图形化界面) 1:经过几天的折腾,终于将oracle安装成功,创建用户,授权等等操作,接下来就安安心心学习oracle; 安装好PLSQL图形化界面和汉化以后(过程自己百度吧,百度more and more),登录图形化界面的时候就是这个B样;   2:登录成功以后就是这个B样: 左侧有三栏,自己根据需要自己拉查

一脸懵逼学习oracle

一脸懵逼学习oracle oracle的默认用户:system,sys,scott; 1:查看登录的用户名:show user; 2:查看数据字典:dba_users; 3:创建新用户  (1)要连接到Oracle数据库,就需要创建一个用户账户;  (2)每个用户都有一个默认表空间和一个临时表空间;     创建用户(Create the user):create user 用户