前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >以 GitOps 方式管理 Terraform 资源

以 GitOps 方式管理 Terraform 资源

作者头像
CNCF
发布于 2022-11-28 08:20:31
发布于 2022-11-28 08:20:31
2.5K00
代码可运行
举报
文章被收录于专栏:CNCFCNCF
运行总次数:0
代码可运行

作者:priyanka-ravi & dholbach

这是我们希望揭示Flux 生态系统[1]项目的博文系列中的第一篇。这次是Terraform 控制器[2]

如果你使用 Terraform,你可能会认为它是“代码即基础设施(IaC,Infrastructure as Code)”,并与 GitOps 的概念相分离。我们经常看到关于“IaC vs. GitOps”的争论。Terraform 控制器调和了这两个世界,并让你在现有 Terraform 的资源获得 GitOps 的优势:一个真实的来源,一个面板和其中的漂移检测。

到目前为止,你可能已经求助于使用流水线或手动部署。在这篇博文中,我们将展示如何以 GitOps 的方式,管理你的 Terraform 资源。不需要转换你的代码!

Terraform 控制器是什么?

Terraform 控制器是一个Flux[3]控制器,可以管理你的 Terraform 资源。虽然 Flux 运行在 Kubernetes 上,但是无论你使用 Terraform 做什么,Flux 控制器都可以管理它。它有几个功能,包括手动批准或自动批准 Terraform 计划的能力,Terraform 的输出可以设置为 Kubernetes 的秘密。它还集成了 Terraform 云和 Terraform Enterprise。

使用 Terraform 控制器的好处是,你可以利用现有 Terraform 资源获得 GitOps 的好处。有 Terraform 资源的漂移检测,它可以用作 Terraform 资源和 Kubernetes 工作负载的粘合剂。

Terraform 控制器非常通用,因为它提供不同的操作模式和许多功能,为你提供所需的集成点和控制。它主要支持以下用例:

  • GitOps 自动化模型:在这里,你可以从创建步骤到实施步骤 GitOps 你的 Terraform 资源,例如整个 EKS 集群。
  • 混合 GitOps 自动化模型:在这里,你可以 GitOps 现有基础设施资源的一部分。例如,你有一个现有的 EKS 集群。你可以选择只 GitOps 其节点组或其安全组。

在此基础上,如果你有一个 TFSTATE 文件,就可以利用这些功能:

  • 状态执行:使用 GitOps 来执行它,不改变其他任何东西。
  • 漂移检测:使用 GitOps 只是为了进行漂移检测,这样当发生漂移时,你可以决定以后要做的事情。

此外,特性[4]还包括多租户、计划和手动批准,以及路线图[5]上的更多功能。

现在让我们继续讨论如何实际集成它!

GitOps 你的 Terraform

先决条件

显然,你需要安装 Kubernetes 集群和 Flux。Terraform 控制器至少需要 Flux 0.32,而 Flux 0.32 又至少需要 Kubernetes 版本 1.20.6。使用 flux install 或 flux bootstrap,如flux 文档[6]中所述。

安装

现在你需要安装 Terraform 控制器。有很多方法可以做到这一点,查看安装文档[7]了解更多信息。

一个非常简单的方法是将这个HelmRelease[8]添加到你的 bootstrap 库。

结合你的 Terraform 资源

这就是 Terraform 控制器的全部魅力所在——它为你完成所有艰苦的工作。你需要做的就是:

  1. 定义你的 Terraform 资源的来源
  2. 启用 GitOps 自动化

定义来源

让我们继续,这里我们定义一个源控制器的来源(你可以选择 GitRepository,Bucket,OCIRepository 中的任何一个)。GitRepository 条目可能如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: GitRepository
metadata:
  name: helloworld
  namespace: flux-system
spec:
  interval: 30s
  url: https://github.com/tf-controller/helloworld
  ref:
    branch: main

GitOps 自动化模式

可以通过设置.spec.approvePlan=auto 来启用 GitOps 自动化模式。在这种模式下,Terraform 资源将被规划,并自动应用。这是一个简单的例子,你可以复制粘贴。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: infra.contrib.fluxcd.io/v1alpha1
kind: Terraform
metadata:
  name: helloworld
  namespace: flux-system
spec:
  interval: 1m
  approvePlan: "auto"
  path: ./
  sourceRef:
    kind: GitRepository
    name: helloworld
    namespace: flux-system

注意:如果你有一个 kustomization.yaml 文件(在基本的 flux bootstrap 用例中就是这种情况),请确保将上述清单部分所在的文件添加到资源列表中。

一旦你将它提交给 Git,你应该会看到 Terraform 控制器很快就完成了这项工作。一种确认方式是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl -n flux-system get terraforms.infra.contrib.fluxcd.io

NAME READY STATUS AGE

helloworld True No drift:
main/d9c5cc348e555526ea563fb82fc901e37de4d732 1m

很简单,不是吗?

还有什么?

Terraform 控制器团队一直在努力工作,并确保许多常见用例[9]得到支持。上面我们介绍了自动化模式,一些团队可能想要更多的控制,所以也有一个“计划和手动应用”模式。你也可以将其配置为只进行“漂移检测”。

此外,你可以禁用漂移检测,将其与 AWS EKS IRSA 一起使用,与 Terraform 交互(设置变量,管理 terraform 状态),还有健康检查和许多其他灵活性。OCI 的粉丝会喜欢听到它支持 OCI 工件作为来源。

它还集成了 Terraform 云和 Terraform Enterprise[10]

在过去的几周里,Terraform 控制器的性能也得到了显著提高。现在,控制器具有很大的可扩展性,可以同时协调和创建大量的 Terraform 模块。该团队最近用 1500 个 Terraform 模块测试了控制器。

在最新版本(v0.12.0)中,新特性包括:自定义后端支持、与 Flux 通知控制器的互操作性,以及支持 ConfigMap 中人类可读的计划输出。

接下来还有更多,请查看该团队的路线图。当你检查它的时候,也请给反馈。如果你错过了什么,如果你喜欢它,如果你想有所贡献——团队渴望听到你的声音。

参考资料

[1]

Flux 生态系统: https://fluxcd.io/ecosystem/

[2]

Terraform 控制器: https://github.com/weaveworks/tf-controller

[3]

Flux: http://fluxcd.io/

[4]

特性: https://weaveworks.github.io/tf-controller/#features

[5]

路线图: https://github.com/weaveworks/tf-controller#roadmap

[6]

flux 文档: https://fluxcd.io/flux/get-started/

[7]

安装文档: https://weaveworks.github.io/tf-controller/getting_started/#installation

[8]

HelmRelease: https://raw.githubusercontent.com/weaveworks/tf-controller/main/docs/release.yaml

[9]

常见用例: https://weaveworks.github.io/tf-controller/use_cases/

[10]

集成了 Terraform 云和 Terraform Enterprise: https://weaveworks.github.io/tf-controller/tfe_integration/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用 FluxCD 实现 Kubernetes GitOps
Flux 是一套针对 Kubernetes 的持续交付和渐进式交付的解决方案,可以让我们以 GitOps 的方式轻松地交付应用。和另一个同类的 CNCF 孵化项目 Argo CD 不同,Flux CD 是许多工具集的集合,天然松耦合并且有良好的扩展性,用户可按需取用。最新版本的 Flux 引入了许多新功能,使其更加灵活多样。Flux 已经是 CNCF 毕业项目。
我是阳明
2023/09/25
1.8K0
使用 FluxCD 实现 Kubernetes GitOps
使用 Flux,Helm v3,Linkerd 和 Flagger 渐进式交付 Kubernetes
本指南将引导您在 Kubernetes 集群上设置渐进式交付 GitOps 管道。
为少
2021/05/27
1.3K0
使用 Flux,Helm v3,Linkerd 和 Flagger 渐进式交付 Kubernetes
使用 Argo CD 的 UI 界面可视化管理 Flux 应用?
Flux 项目原本提供了一个 Web UI 来管理 Flux 集群,但该项目已经存档,FluxCD 组织不再开发,所以我们这里不再介绍了,如果你想使用 Web UI 来管理 Flux 集群,可以使用 Weaveworks 提供的 weave-gitops(https://github.com/weaveworks/weave-gitops) 项目,该下面为 Flux 提供了一个免费的开源 GUI。
我是阳明
2023/09/28
6410
使用 Argo CD 的 UI 界面可视化管理 Flux 应用?
用于声明式管理 Helm 版本的工具
我们经常收到一些人的问题,他们想要工具或方法来管理在环境中的 Helm 版本。这篇文章提供了一些见解和方向来帮助人们开始。
CNCF
2022/06/10
1.1K0
Flux如何将Git放入GitOps
自从 Flux 获重写为一组聚焦的控制器以来,它的每个功能和能力变得更加清晰。适当命名的控制器以它们的名字携带它们所负责的内容,以及它们与哪些数据或工具交互,例 source、kustomize、image-automation、notification、helm,等等。
CNCF
2022/04/19
1.3K0
Flux如何将Git放入GitOps
【flux篇】flux简介及部署
在gitops之前经历了手动发布、脚本化部署、以及目前占据主流的CI/CD,而CI/CD的大部分实现方式是利用gitlab、jenkins等完成自动化构建及部署。
大侠之运维
2025/04/17
1820
【flux篇】flux简介及部署
flux2+kustomize+helm+github 多集群 GitOps 云原生渐进式交付
对于此示例,我们假设有两个集群的场景:暂存(staging)和生产(production)。最终目标是利用 Flux 和 Kustomize 来管理两个集群,同时最大限度地减少重复声明。
为少
2021/07/07
1.1K0
13 Jan 2024 flux学习之gitrepository spec
自动从 https://github.com/songleo/kubernetes-apps 的main分支同步kubernetes应用配置,每分钟检查一次更新。这样,任何对该git仓库的更改都会被自动应用到关联的kubernetes集群中,实现持续的配置同步和部署自动化。
俊采
2024/01/14
1170
安全:SBOM的价值
你不可能经常重构一个成功的项目,但我们在两年前就这样做了。Flux 项目[1]那时候已经有个良好的开端,有许多满意的用户[2],我们将它的许多设计原则放在了我们的脑海中:
CNCF
2022/03/28
1.1K0
安全:SBOM的价值
CNCF TOC投票决定将Flux从沙箱提升到孵化
CNCF 技术监督委员会(TOC)投票决定将 Flux 从 CNCF 沙箱提升到孵化阶段。自 Flux 于 2019 年 8 月进入 CNCF 沙箱以来,它已经定义了开放治理[1]和安全报告[2]流程,从多个组织增加了 7 名新的维护者,并将其在生产中的使用增加到 80 多加组织。
CNCF
2021/03/15
4920
CNCF TOC投票决定将Flux从沙箱提升到孵化
13 Jan 2024 flux学习之kustomization spec
指定git仓库中kustomization.yaml或者应用yaml的路径,默认就是根目录。
俊采
2024/01/14
1270
Kubernetes GitOps 工具
在我看来,Kubernetes的优势主要在于它的声明式性质与控制循环相结合,并通过这些控制循环持续监控集群的活动状态,确保它与etcd中存储的期望状态保持一致。这种方式非常强大,但同时其数据库也被限制为etcd(etcd仅提供了有限的可观察性),并影响到了集群变更时的责任性和审计性。另外一个缺点是将etcd和代码仓库作为两个SOT(sources of truth),有可能会导致配置漂移,造成管理上的困难。
charlieroro
2022/05/09
1.2K0
Kubernetes GitOps 工具
大妈都能看懂的 GitOps 入门指南
GitOps 这个概念最早是由 Kubernetes 管理公司 Weaveworks 公司在 2017 年提出的,如今已经过去了 5 个年头,想必大家对这个概念早有耳闻,但你可能并不知道它到底是什么,它和 DevOps 到底是啥关系,本文就来帮大家一一解惑。
米开朗基杨
2022/11/07
2.1K0
大妈都能看懂的 GitOps 入门指南
6张图,带你深入理解GitOps,真硬核!
大家好,我是小碗汤,今天分享一篇6张图深入理解GitOps,内容硬核,建议兄弟们收藏~
我的小碗汤
2022/01/14
1.8K0
6张图,带你深入理解GitOps,真硬核!
Flux项目谈安全:通过Fuzzing增强信心
Flux Security 博客系列的下一篇是我们如何在 Flux 及其控制器中实现 fuzzing(模糊测试),以及如何让项目变得更安全。
CNCF
2022/03/28
5040
Flux项目谈安全:通过Fuzzing增强信心
当下最热门的 GitOps,你了解吗?
GitOps 的概念最初来源于 Weaveworks 的联合创始人 Alexis 在 2017 年 8 月发表的一篇博客 GitOps - Operations by Pull Request。文章介绍了 Weaveworks 的工程师如何以 Git 作为事实的唯一真实来源,部署、管理和监控基于 Kubernetes 的 SaaS 应用。
iMike
2020/02/21
2K0
GitOps 是否为 Kubernetes 的复杂性提供了关键解决方案?
翻译自 Does GitOps Provide the Key Fix for Kubernetes’ Complexity? 。
云云众生s
2024/03/27
1190
GitOps 是否为 Kubernetes 的复杂性提供了关键解决方案?
Crossplane 很棒,但关键基础设施呢?
翻译自 Crossplane is great, but what about critical infrastructure? 。
云云众生s
2024/03/27
3290
Crossplane 很棒,但关键基础设施呢?
欢迎Flagger加入Flux项目
Flagger通过Canary发布、A/B测试和Blue/Green等渐进的交付策略扩展了Flux功能,它是专门为GitOps风格的交付而设计的。
CNCF
2021/01/12
5210
欢迎Flagger加入Flux项目
Flux 如何监听镜像标签更新实现 GitOps
前面我们在使用 Flux 进行 Gitops 实践的过程中,我们每次都需要在 CI 流水线去手动更新 Git 代码仓库中的 Values 文件的镜像版本,这样就会比较麻烦,和 Argo CD 类似,Flux 也提供了一个 Image Automation 控制器的功能。
我是阳明
2023/09/27
6280
Flux 如何监听镜像标签更新实现 GitOps
推荐阅读
相关推荐
使用 FluxCD 实现 Kubernetes GitOps
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验