我本质上是一名开发人员,但最近我做了很多 DevOps 工作,尤其是使用 Kubernetes。作为我工作的一部分,我帮助开发了一个名为 datree
的工具,旨在防止 Kubernetes 错误配置进入生产环境。理想情况下,它有助于加强协作,并在您的组织中培养 DevOps 文化,从而使像我这样并不总是以 DevOps 方式思考的人受益。
一个常见的场景
以下场景演示了许多科技公司面临的问题
- 星期五凌晨 3:46,鲍勃被手机掉到卧室地板上的声音吵醒。是他的手机,显示有 15 个来自工作单位的未接来电。
- 显然,鲍勃忘记在部署中添加内存限制,这导致其中一个容器出现内存泄漏,进而导致所有 Kubernetes 节点耗尽内存。
- 他对此感到非常尴尬,尤其因为 DevOps 团队已经付出了很多努力来教育像他这样的开发人员关于 Kubernetes 以及内存限制的重要性。
这怎么会发生呢?想象一下,鲍勃在 Unicorn Rentals 工作。像许多公司一样,他们最初只是一个由两名开发人员、一名首席执行官和一名首席技术官组成的微型创始团队。起初事情进展缓慢,但最终每个人都想租用独角兽,当这种情况发生时,公司无法承受生产中断。
一系列像凌晨 3:46 叫醒鲍勃的事故让公司意识到必须做出改变。
如果这与您自己组织中的情况相似,那么可能您也需要做出改变。
问题:扩展安全策略
为了避免不舒服的开发问题和生产环境中的重大错误,您需要教育您的开发人员。他们需要了解 Kubernetes,它的工作原理,如何开发它,以及他们可以用它做什么。
您还需要定义策略,以便如果资源在规定时间内不符合某些规范,则它不会进入集群。但是,当有数百个代码仓库时会发生什么?如何在规模上管理这些策略?如何监控和审查程序?
Datree 是一个开源命令行解决方案,使 Kubernetes 管理员能够创建他们希望团队遵循的策略和最佳实践。
Datree 允许管理员:
- 在开发中强制执行策略限制:在将资源应用于集群之前强制执行限制。
- 启用限制管理:在整个组织的专用位置灵活管理限制,使管理员能够完全控制其系统。
- 教育关于最佳实践:将 DevOps 从持续审查、防范和为所有当前和未来用例(这是自我部署的一部分)的可能陷阱做前瞻性准备的 постоянной 必要性中解放出来。
为什么选择 Datree?
Datree 旨在通过在配置错误的资源到达生产环境之前强制执行策略,帮助管理员以最少的时间和精力获得最大的生产稳定性。
- 教育和最佳实践保障:CLI 应用程序简化了 Kubernetes 部署体验,因此开发人员无需记住任何管理开发的规则。DevOps 开发人员不再形成瓶颈。Datree 的 CLI 应用程序内置了 Kubernetes 最佳实践,因此无需依赖人工观察和记忆。
- 在开发中强制执行:一旦 PR 中出现错误配置,开发人员就会尽早收到警报。这样,他们可以在代码转移到生产/协作环境之前发现错误。
- DevOps 文化:Datree 提供了一种类似于单元测试等其他开发工具的机制。这使开发人员更容易接受,因为他们已经习惯了这些工具。测试是开发人员进行的最常见的活动。使用熟悉的工具可以为培养 DevOps 文化奠定良好的基础。
Datree 的工作原理
datree
命令对给定路径中存在的每个资源运行自动检查。这些自动检查包括三种主要的验证类型:
- YAML 验证
- Kubernetes 模式验证
- Kubernetes 策略验证
$ datree test ~/.datree/k8s-demo.yaml >> File: .datree/k8s-demo.yaml
[V] YAML validation
[V] Kubernetes schema validation
[X] Policy check
X Ensure each container image has a pinned (tag) version [1 occurrence]
- metadata.name: rss-site (kind: Deployment)
!! Incorrect value for key `image` - specify an image version to avoid unpleasant "version surprises" in the future
X Ensure each container has a configured memory limit [1 occurrence]
- metadata.name: rss-site (kind: Deployment)
!! Missing property object 'limits.memory' - value should be within the accepted boundaries recommended by the organization
X Ensure workload has valid Label values [1 occurrence]
- metadata.name: rss-site (kind: Deployment)
!! Incorrect value for key(s) under 'labels - the vales syntax is not valid so the Kubernetes engine will not accept it
X Ensure each container has a configured liveness probe [1 occurrence]
- metadata.name: rss-site (kind: Deployment)
!! Missing property object 'livenessProbe - add a properly configured livenessProbe to catch possible deadlocks
[...]
检查完成后,Datree 会显示其发现的任何违规或错误配置的详细输出,从而指导开发人员修复问题。您可以在本地运行该命令,但它专门设计用于在持续集成 (CI) 期间甚至更早作为 pre-commit hook 运行(是的,不会丢失任何关于策略背后原因的解释)。
除了命令行应用程序之外,Datree 还支持使用 UI 完全管理策略,例如创建新的自定义策略、查看调用的完整历史记录等等。

(Noaa Barki, CC BY-SA 4.0)
我如何拥抱 DevOps 思维模式
作为一名前端全栈开发人员,我接受的培训是只考虑代码,而且我一直觉得 DevOps 技术和思维过程很神秘。但最近,我接受了在 Datree 开发 CLI 应用程序的挑战,并开始理解 DevOps 的重要性和功能。
我的座右铭是:“我们作为开发人员的工作不是编写代码,而是解决现实生活中的问题。” 当我开始开发 datree
时,我必须了解的不仅仅是现实生活中的问题。我还必须知道它最初是如何成为问题的。 为什么组织要采用 Kubernetes?DevOps 工程师的角色是什么?最重要的是,我为谁开发我的应用程序?
现在我可以诚实地说,通过开发 datree
,我进入了 Kubernetes 的世界,并了解到学习 Kubernetes 的最佳方法是拥抱 DevOps 文化。开发 datree
命令教会了我理解用户角色的重要性。更重要的是,它帮助我获得了关于应用程序生态系统的基础知识,并理解了产品和用户旅程。
总结
当采用 Kubernetes 时,您的开发环境文化会发生变化。DevOps 不是一蹴而就的事情,尤其是在大型组织中。技术可以帮助开发人员发现自己的错误并在未来从中学习,从而帮助实现这种转变。
借助 Datree,DevOps 和开发人员之间的差距已经开始缩小。即使像我这样的铁杆程序员也开始承担限制策略的所有权。发送到生产环境的代码质量更高,从而节省了时间并防止了令人尴尬的错误。
评论已关闭。