尝试使用Terraform Controller的分支计划器
在本文中,我们将尝试使用Terraform Controller的Branch Planner功能,以实现通过GitOps管理Terraform资源。
Terraform控制器是什么?
Terraform Controller(简称tf-controller)是用于通过GitOps管理Terraform资源的Flux控制器。
请参阅下方了解tf-controller功能的详细信息。
目前支持的矩陣如下所示:
這個問題
tf-controller的Branch Planner是一项功能,在创建Pull Request时,会通过评论通知Terraform的Plan结果。
目前,该功能处于rc版本。
这次我们会参考下面的快速入门指南,快速试一试。
-
- https://docs.gitops.weave.works/docs/terraform/get-started/
- https://weaveworks.github.io/tf-controller/branch_planner/branch-planner-getting-started/
环境信息
环境资讯
环境数据
环境消息
环保信息
kubernetes: v1.27.1
flux: v2.1.1
helm-controller: v0.36.1
kustomize-controller: v1.1.0
notification-controller: v1.1.0
source-controller: v1.1.1
tf-controller: v0.16.0-rc.3
步骤
用kind创建集群。
kind create cluster --name tf-controller
安装flux。
brew install fluxcd/tap/flux
创建一个用于同步的存储库。
export GITHUB_USER=<your github username>
export GITHUB_TOKEN=<your github personal access token>
gh repo create $GITHUB_USER/gitops-tf-controller
git clone git@github.com:$GITHUB_USER/gitops-tf-controller.git
我們將引入flux。
cd gitops-tf-controller
flux bootstrap github \
--owner=$GITHUB_USER \
--repository=gitops-tf-controller \
--branch=main \
--path=./cluster/my-cluster \
--personal \
--token-auth
使用curl从tf-controller的清单中获取。
git pull
mkdir -p ./cluster/my-cluster/infra/
curl -s https://raw.githubusercontent.com/weaveworks/tf-controller/main/docs/release.yaml > ./cluster/my-cluster/infra/tf-controller.yaml
为了在此处启用Branch Planner,您需要将以下内容添加到tf-controller.yaml文件中的spec.values子项中。(位于HelmRelease的spec.values下方)
branchPlanner:
enabled: true
创建 kustomization.yaml 文件并将其推送到仓库中。
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- tf-controller.yaml
通过这个方法可以检测到变更并部署tf-controller。
接下来,将创建Branch Planner所需的Secret。
kubectl create secret generic branch-planner-token \
--namespace=flux-system \
--from-literal="token=${GITHUB_TOKEN}"
添加用于演示的Sync配置和Terraform对象。
export GITHUB_USER=<your user>
export GITHUB_REPO=<your repo>
cat <<EOF | kubectl apply -f -
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: branch-planner-demo
namespace: flux-system
spec:
interval: 30s
secretRef:
name: flux-system
url: https://github.com/${GITHUB_USER}/${GITHUB_REPO}
ref:
branch: main
---
apiVersion: infra.contrib.fluxcd.io/v1alpha2
kind: Terraform
metadata:
name: branch-planner-demo
namespace: flux-system
spec:
approvePlan: auto
path: ./
interval: 1m
sourceRef:
kind: GitRepository
name: branch-planner-demo
namespace: flux-system
EOF
创建一个分支,在存储库的根目录下准备用于演示的Terraform资源。
terraform {
required_version = ">= 1.3.9"
}
variable "subject" {
type = string
default = "World"
description = "Subject to hello"
}
output "hello_world" {
value = "Hello TF Controller v0.16.0-rc.2, ${var.subject}!"
}
我将向仓库推送并创建拉取请求。
片刻后,计划内容将以如下形式作为评论!
如果您评论 “!replan”,它将再次通知您该计划的结果。
总结
我在使用Terraform Controller的Branch Planner功能以GitOps的方式管理Terraform资源时进行了尝试。这个功能能够自动通知PR上的Plan内容,非常便利。我希望它能早日正式发布。