首页 > 其他分享 >带自定义Kubernetes资源验证器的开发人员护栏

带自定义Kubernetes资源验证器的开发人员护栏

时间:2023-03-18 10:36:25浏览次数:40  
标签:自定义 Kubernetes 工程师 平台 验证 开发人员


如果你的组织开始采用云原生技术,那么可能仍在研究如何将Kubernetes知识内部化并分发给团队的其他成员。这是一个非常普遍的问题。

需求是明确的:为了高效工作并产生高质量的部署,整个技术团队需要扩展Kubernetes知识。

DevOps文化和GitOps流程要求更多的工作和认知负载应该“向左转移”,并更早地纳入软件开发生命周期。开发人员现在被要求从第一行代码开始就纳入安全和IT运维最佳实践。他们越来越卷入一个不完全理解的系统的多个方面。

技术组织结构图的另一个分支是平台工程,它的任务是防止开发人员错误部署新的应用程序和资源,导致崩溃、级联问题或过度使用昂贵的云资源。毕竟,平台工程师的工作是建立自动化和流程,将基础设施推向令人垂涎的零错误状态。

随着新技术和Kubernetes知识的发展,平台工程师需要一种基于自动化的可行策略,在维护高质量代码的同时,解除开发人员的限制并让他们学习。

文档是很好的,但平台工程师不应该把时间花在这个上,而且目标受众阅读(更不用说遵守)的可能性很低。

平台工程真正应该做的是为开发人员提供护栏,这些护栏可以作为正在进行的部署前开发人员工作流的一部分,轻松应用、实施和自动化。提供这些护栏的一个简单方法是,为Kubernetes应用程序配置用易于部署的验证框架创建自定义策略。

为什么要验证?

答案很简单:不应允许开发人员提交违反组织政策的代码或配置。

验证器在提交阶段执行策略,可以直接在开发人员使用的集成开发环境(IDE)中执行,也可以作为CI/CD管道中的初始检查(或者理想情况下,在两个阶段都有)。在CI/CD管道花费宝贵的时间和云资源部署必定会失败的代码之前,简单的错误(如无效的YAML语法),被验证器捕获并拒绝。

通过在提交阶段实施标准,你可以在软件开发生命周期的早期保证质量,并在此过程中简化流程。

你可以通过以下两个相对简单的规则来建立验证文化:

——如果组织犯了两次相同的错误,那么平台工程师应该将其编码为规则,以便验证器进行标记和阻止。

——组织的策略应该是独特的,并根据需求、目标和文化进行定制,而不是从StackOverflow或GitHub复制粘贴。

自定义验证器的功能

现在,任何开发人员都可以直接从IDE使用验证器。最流行的例子之一是在VS Code中直接使用ESLint来强制执行各种代码质量标准。

但绑定到这些工具中的策略,或者开发人员可以从Airbnb这样的大型组织中集成的策略,并没有涵盖开发人员错误部署Kubernetes的大部分方式。

当组织两次犯同样的错误时,它们不能满足制定新策略的需要,而且它们不是为组织的独特技术堆栈和文化冲动而设计的。

自定义验证器通过自动化无缝地解决了这两个问题。平台工程师将他们对Kubernetes的知识和观念编入特定于组织的策略中。平台工程师被动地防止错误配置,而不是不断的手动干预,比如在PR后请求更改拉取请求(PR)。

从开发人员的角度来看,自定义验证器对日常生活没有太大的改变。当他们开发Kubernetes应用程序和资源时,他们的IDE会在警告或错误阶段通知策略错误,这是平台工程设置的护栏,从一开始就阻止他们提交违反组织策略的代码。

自定义验证器被动地提高了代码库的质量,而不需要为开发人员增加任何额外的认知负载,这使他们能够快速完成工作。平台工程师自动化了实现零错误的方法,开发人员开始用每一行新代码学习Kubernetes的最佳实践。

超越验证

大多数组织可能很幸运,每10名开发人员就有一名平台工程师,这意味着他们需要专注于自动化和GitOps(而不是人工干预),以消除部署到生产中的瓶颈。

记住平台工程团队的主要职责和目标:

——专注于为应用程序开发人员提供有价值的铺设道路和流程改进,如选择正确的工具或实施自动化。

——防止开发团队一次又一次地重新发明轮子,减少对配置和供应基础设施的担心。

——自动化弥合开发人员和他们丰富的Kubernetes特定最佳实践之间知识差距的方式。

——创建“胶水”和护栏,帮助开发人员构建和部署高质量的应用程序,而无需了解整个工具链,也无需DevOps工程师的手动干预。

如果能够完成其中任何一项任务,那么他们正在确保每个人都能完成任务、高效工作并成功部署到集群中。

自定义验证器不仅仅从技术角度帮助平台工程师实现这些目标。它们还帮助团队接受教育和持续改进的文化。自定义验证器的策略不是惩罚,而是帮助开发人员每天学习Kubernetes细微差别的资源。

平台工程师通过编写新的规则为这种文化做出贡献,其中包括有价值的上下文,可以自动分配他们所知道的内容。当开发人员工作时,他们可以将鼠标悬停在IDE中的错误/警告图标上,阅读规则实施的策略以及可以采取的补救措施的说明。

Monkle是“袖珍平台工程师”

如果你的组织中有平台工程师,他们无疑听说过或已经尝试过自定义验证器。但这些工具中的许多都需要一种独特的领域特定语言,当编写规则太困难时,它很难被采用。平台工程师浪费时间编写文档,或者重复提醒开发人员如何停止在集群中引入如此多的错误。

如果这是组织难以解决的问题,或者你清楚地看到了弥合平台工程师和开发人员之间差距的价值,那么你应该考虑Monkle的开源验证框架。

Monkle是一套工具,通过统一编写、验证Kubernetes配置并将其推向生产的方式,帮助开发人员、DevOps工程师和平台工程师自信地进行部署。

Monkle最近引入了一种基于TypeScript的自定义验证框架,这使得添加新规则变得非常简单。验证规则可以使用命令行界面、GitHub Action、Monkle Desktop工具和Monkle Cloud应用。甚至还有一个与Monkle Cloud通信的本地开发服务器,可以帮助你在将新规则应用于整个组织之前测试它们。

当开发人员在Monkle中编写新资源时,Kubernetes策略和左移背后的所有复杂性都被抽象为红灯或绿灯——没有更多的认知负载。由于Monkle内置的上下文信息,开发人员可以开始将每一个错误配置转化为学习机会。

标签:自定义,Kubernetes,工程师,平台,验证,开发人员
From: https://blog.51cto.com/u_13964361/6129340

相关文章

  • SpringBoot——自定义自动配置与起步依赖
    SpringBoot——自定义自动配置与起步依赖SpringBoot为我们提供了灵活强大的自动配置与起步依赖功能,接下来我们参考其实现原理,实现专属于我们自己的自动配置与起步依赖。......
  • 请你详细说说类加载流程,类加载机制及自定义类加载器
    当程序使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、链接、初始化三个步骤对该类进行类加载。加载类加载指的是将类的class文件读入内存,并为之创建一个java.......
  • “请勿打扰”是开发人员最好的朋友
    有什么比被困在一个问题上更糟糕的呢?没有足够的注意力看问题。这是顶级开发人员面临的共同挑战。每个人都需要帮助/答案/建议。当您不断地回复Slack消息/电子邮件消息......
  • 基于kubernetes构建jenkins+gitlab持续集成
    @目录安装jenkins安装gitlabjenkins连接gitlab配置Jenkins连接maven配置cicd本案例使用docker-compose来安装部署Jenkins和gitlab节点IPmaster192.168.200.44......
  • Sciter无边框,带阴影,自定义标题栏窗口
    Sciter无边框,带阴影,自定义标题栏窗口来源  https://www.zhihu.com/column/c_1457278851911454720参考 https://gitlab.com/sciter-engine/sciter-js-sdk参考 https:......
  • Uniapp自定义基座
    1.打自定义基座包点击菜单栏“运行”->“运行到手机或模拟器”->“制作自定义基座”生成自定义基座安装包。  2.点击打包,等待打包成功之后会在unpackage/debug路径中......
  • ALV带有自定义事件
    *&---------------------------------------------------------------------**&ReportZ2023015105*&*&---------------------------------------------------------......
  • PebbleTemplates 自定义tag&filter&function 开发简单说明
    PebbleTemplates的扩展能力还是很强大的,开发起来也比较方便,以下是一个简单的说明,更加复杂的推荐查看官方源码学习filter开发参考代码此filter直接返回rongfenglian......
  • leaflet 自定义事件
    leaflet 自定义事件主要使用fire()方法,如下图所示,我在区域热力层点击方法中自定义一个handClick方法,并传值。  再去进行监听  预览单击就会触发我们自定义的方......
  • 五、自定义登录逻辑
    ​ 当进行自定义登录逻辑时需要用到之前讲解的UserDetailsService和PasswordEncoder。但是SpringSecurity要求:当进行自定义登录逻辑时容器内必须有PasswordEncoder实例......