马特·拉格兰 (Matt Ragland)在Unsplash上拍摄的照片
如今,2023 年了,我想看看我们可能希望在今年使用的一些新的(相对)DevOps 工具,因为它们可能会将工程生产力提升到一个新的水平。
作者注:值得注意的是,并非所有这些都是最近发布的“全新”工具;其中大部分可能已由 CNCF 最终用户社区试用。建议您在项目中对技术有特定需求时查看这些工具。
事不宜迟,让我们开始吧。
1Pulumi
让我们从 DevOps 的基础知识开始:基础设施。
首先,Pulumi是一个基础设施即代码 (IaC) 工具,就像 Terraform、AWS CDK、CDK for Terraform 等一样。
如今,虽然 Terraform 可能已成为 IaC 最流行的选择,但也存在一些缺点:
- 您必须学习一种新的“语言”,即 HCL(HashiCorp Config Language)。
- HCL 本身并不完全是一种“语言”,或者至少不是一种非常强大的语言。例如,在 2020 年底之前,您不能for在模块上使用循环。
进入 Pulumi的话题。
之后怎么样了?
如果您熟悉 AWS CDK(AWS Cloud Development Kit亚马逊云开发工具包),那么您很容易理解:就是这样。除了它是通用的(至少它试图做到)并且与每个云兼容。
如果您不知道 AWS CDK,请想一想:Pulumi 允许您使用您已经知道的编程语言来管理您的基础设施,从而消除了学习另一种配置语言的开销。
Pulumi 适合谁?很好的问题。
如果您已经熟悉某种编程语言,如 TypeScript、Python、Go、C#、Java 等,但您真的不想学习另一种语言 HCL,Pulumi 可能适合您。如果你正在使用 AWS,从技术上讲,你也可以使用 AWS CDK,但如果你计划编排混合云架构,Pulumi 更有意义。
如果你已经大量使用 Terraform,但你厌倦了 HCL 的局限性,并且你真的不喜欢使用 `count` 和降低基础设施代码可读性的内置函数,你也可以试试 Pulumi .
这个工具不再是“新”的了;它在 GitHub 上拥有超过 14k 颗星。但它比 Terraform 更新。如果它解决了您遇到的特定问题,请尝试一下。
2 SOPS
SOPS是 Secrets OPerationS 的缩写,是一种开源文本文件编辑器,可以自动加密/解密文件。强调文本编辑器、加密和自动化。
通常,当你想加密一个文本文件时,你会这样做:
- 使用您喜欢的编辑器编写、编辑和操作文本数据,并将其保存为文件。
- 使用加密/解密工具加密整个文件。
当你需要读取加密文件时:
- 首先,您必须使用加密/解密工具解密文件。
- 使用您选择的文本编辑器打开解密的文件(现在它是一个普通的文本文件)。
这种“正常”过程的缺点是显而易见的:您需要两个工具(一个编辑器和一个加密/解密工具)来完成一项工作。
您可能明白我要说的是什么,您是对的:SOPS 就是为此目的。
简而言之,它可以与许多加密服务(如 HashiCorp Vault、AWS KMS 等)集成以自动加密您的秘密文件,从而使使用 git 存储库存储秘密成为可能并且易于协作。
感兴趣吗?在这里阅读更多信息,它甚至有一个您可以自己尝试的快速演示/教程。
3 Trivy
容器化和 12 因素(12-factor)应用程序如今变得如此流行,以至于当您想要构建/部署应用程序时,它们是您的第一个想法。由于我们的云原生工作负载严重依赖容器镜像,因此容器镜像安全的重要性一直在上升:从镜像创建的任何容器都会继承其所有特征——包括安全漏洞、配置错误,甚至恶意软件。
Trivy是一个安全扫描器。它可靠、快速、轻松,可在您需要的任何地方使用。Trivy 有不同的扫描器来查找各种安全问题,最著名的用例是对容器镜像的已知漏洞 (CVE) 扫描。
您可以在本地将其作为 CLI 工具运行以扫描本地容器映像和其他工件,然后再将其推送到容器注册表或部署您的应用程序。
此外,Trivy 专为在 CI 中使用而设计,可以轻松地与您的 CI 管道集成,因此非常适合“持续一切”的 DevOps 思维方式。
4 Cluster API
Cluster API是一个 Kubernetes 子项目,专注于提供声明式 API 和工具来简化配置、升级和操作多个 Kubernetes 集群。
由 Kubernetes 特别兴趣小组 (SIG) 集群生命周期启动,集群 API 项目使用 Kubernetes 风格的 API 和模式来为平台操作员自动化集群生命周期管理。支持基础设施,如虚拟机、网络、负载均衡器和 VPC,以及 Kubernetes 集群配置都以与应用程序开发人员部署和管理其工作负载相同的方式定义。这使得跨各种基础设施环境的一致且可重复的集群部署成为可能。
如果官方定义让您感到困惑,请想一想:您可以运行一个kubectl apply命令来创建 K8s 集群,它适用于 AWS、Azure、DigitalOcean、Docker、GCP、OpenStack 等。
无需为 K8s 集群创建 Terraform 模块(或更糟,试图找出其他人模块的所有参数),无需弄清楚如何将其用于eksctlAWS 和其他云;只是kubectl apply为了创建集群。听起来令人印象深刻,对吧?我知道。这就是为什么它位于前 10 个值得关注的工具列表中。
5 Linkerd
Linkerd是世界上最轻、最快的服务网格(至少,他们是这么说的)。什么是服务网格?服务网格是一个专用的基础设施层,用于使服务到服务的通信安全、快速和可靠。
易用性是 Linkerd 真正闪耀的地方。您可以使用一行命令安装它。这一段到此结束。我不知道在这里还能说什么;就这么简单。
但是让我们谈谈更多。
设置速度很快。即使是 docker 镜像也很小,所以它们被拉得更快。
架构并没有太大的不同。有一个控制平面和一个数据平面,其中控制平面是一组服务,负责遥测、API、向数据平面代理等提供控制数据,数据平面具有在每个服务旁边运行的代理实例。如果您想了解更多详细信息,请在此处查看官方文档。
Istio 和 AWS App Mesh 使用开源 envoy 代理,这是一种专为单一服务和应用程序设计的高性能 C++ 分布式代理。它是一个复杂的通用代理。另一方面,Linkerd 使用用 Rust 编写的专门设计的代理,尽可能小、轻、安全。我不是来评判 C++ 或 Rust 是最好和最安全的语言,但作为一种具有特定内存管理方式(所有权而不是垃圾收集)的现代语言,Rust 确实具有优势。
对于多集群管理,与 Istio 不同,Linkerd 使用服务镜像机制。设置也相对简单,几乎就像单集群设置,除了你必须做两次外加一个多集群控制平面。
总而言之,Linkerd 是一种不同类型的服务网格:超轻、超简单、超强大。Linkerd 为 Kubernetes 增加了安全性、可观察性和可靠性,但没有增加复杂性。它也不完全是一个新工具,但如果这些功能满足您的需求并且您喜欢简单,请尝试一下。
6 GitHub Actions
GitHub Actions 是另一个 CI。
那么,为什么选择 GitHub Actions?
好吧,一方面,它在 CNCF 技术雷达中(并且处于“评估”阶段,使其成为“新”工具),所以我们必须好好看看它。
另一方面,CI 与您的代码有很多交互,本质上,GitHub Actions 可以轻松地与您的 GitHub 存储库交互。将您的 CI 与您的代码存储库集成起来不再麻烦。
初创公司的另一个好处是:GitHub Actions有一些免费额度,所以当你刚推出一个新产品时,免费额度可能绰绰有余,完全免费。您可能在很长一段时间内都不需要注册一些额外的自托管运行器,并且仅针对 CI 部分,您就可以节省在某些云中为您自己的基础设施运行一些 VM 的成本。
我们现在公司的项目也在使用Github Actions来打包tauri的应用,很好用~
7 Tekton
Tekton是另一个 CI(我知道,我从上一节复制粘贴了这一行嘿嘿)。
主要特点是:
- 您可以在 K8s 集群中运行它。
- 您可以像 K8s 本机资源一样定义管道,然后简单地使用 kubectl apply来应用它。
- 现在,它同时具有仪表板和 CLI。
此外,Tekton 允许您跨多个环境构建、测试和部署,例如 VM 或无服务器。您还可以使用 Tekton 管道跨各种云提供商或混合环境进行部署。
你应该使用它吗?我的看法是,如果:
- 你必须“拥有”你的 CI 系统(例如,出于某种原因,使用 GitHub Actions 免费配额不是你的选择);
- 你已经在使用 K8s;
- 您喜欢与 K8s 交互的方式;
然后试试 Tekton。
安装简单;您可以快速启动并运行它。
8 HashiCorp Harness
Harness是另一个 CI,但不仅如此。
它来自 HashiCorp,一个我们已经熟悉的名字,它将几件事合二为一:
- CI(持续集成)
- CD/GitOps(持续部署)
- feature flags(功能标志)
- cloud costs(云成本)
Harness 提供托管虚拟机 (VM) 来运行您的构建。借助 Harness Cloud,您可以在 Harness 提供的基础架构上无忧地构建代码。您可以花更少的时间和精力来维护基础架构,而专注于开发出色的软件。
在 Harness 中,持续交付是使用管道和阶段建模的。在每个阶段,您定义要使用服务部署的内容、要使用环境部署的位置以及使用执行步骤的部署方式。
Harness GitOps 让您可以在 Harness 中执行 GitOps 部署。您在 Git 清单中定义要部署的服务的所需状态,然后使用 Harness GitOps 将状态与实时 Kubernetes 集群同步。
Harness Feature Flags (FF) 是一种功能管理解决方案,可让您在不部署新代码的情况下更改软件的功能。它允许您在不发布新软件版本的情况下隐藏代码或行为。功能标志就像一个强大的 if 语句。
简而言之,如果您想要将 SaaS CI/CD/FeatureFlags 全部集中在一个地方,这就是要看的地方。
9 Thanos 灭霸
首先,简单介绍一下 Prometheus 的本地存储:
Prometheus 的本地存储并不是为了持久的长期存储;外部解决方案提供延长的保留时间和数据持久性。
虽然我们可以设置很长的数据保留期,比如 years with storage.tsdb.retention,但问题仍然在于规模和规划。使用多年的高分辨率探针,处理非常长的查询会占用大量内存。它也归结为规模:例如,rate()一个超过一年且间隔为 15 秒的函数需要 210 万个样本或大约 2.6MiB 的数据。这仅适用于单个指标。
如果您的基础架构较小,将保留时间调整为数年并没有错;当前的TSDB实现完全能够处理这个问题。对于更大的应用程序,请考虑更大的分布式 TSDB。
而Thanos就是解决这个问题的方案:它是一个开源的、高可用的 Prometheus 设置,具有长期存储能力,专注于长期存储。如果您已经遇到 Prometheus 存储问题,请尝试 Thanos。
10 HashiCorp Sentinel
最后,让我们谈谈Sentinel。
Policy-as-code 是一种策略管理方法,其中使用代码定义、更新、共享和强制执行策略,而 Sentinel 是 HashiCorp 的代表。
由于 Sentinel 来自 HashiCorp,因此它可以很好地与 HashiCorp 的其他产品集成。因此,如果您是 Terraform、Vault、Consul 或 Nomad 的重度用户,并且想尝试 Policy-as-Code,那么 Sentinel 正是适合您的工具。
举几个 Sentinel 策略可以做什么的具体例子:
- 不允许使用 Terraform 提供没有标签的云资源。
- 确保只能由具有有效 MFA 的授权系统操作员执行对关键 Vault 数据的修改。
- 在 Nomad 中只允许 Docker 工作负载。
- Consul 密钥只能在工作时间更新。
一个简短的代码示例:
import “tfplan/v2” as tfplan aws_instances = filter tfplan.resource_changes as _, rc { rc.mode 是“managed”, rc.type 是“aws_instance”, rc.change.actions 不是“delete” } main = rule { 所有aws_instances as _, instance { (instance.change.after.tags else {}) 不为空 } }
非常不言自明,对吧?从 Terraform 计划中获取 AWS 实例;更改后标签不能为空(除非您尝试删除实例)。
如果您对 Policy-as-Code 感兴趣,请继续关注;我将很快发表一篇关于这个主题的介绍文章。
概括
本文中提到的所有工具的快速分类:
- 基础设施即代码:Pulumi
- 安全:SOPS、Trivy
- K8s/多集群:Cluster API、Linkerd
- CI/CD:GitHub Actions、Tekton、HashiCorp Harness
- 监控:Thanos
- 政策即代码:HashiCorp Sentinel
参考链接:
https://medium.com/4th-coffee/10-new-devops-tools-to-watch-in-2023-e974dbb1f1bb
欢迎大家提出不一样的观点,我们一起讨论,
我是辣个男人,一个运维人。