尝试使用Terraform Controller的分支计划器

在本文中,我们将尝试使用Terraform Controller的Branch Planner功能,以实现通过GitOps管理Terraform资源。

Terraform控制器是什么?

Terraform Controller(简称tf-controller)是用于通过GitOps管理Terraform资源的Flux控制器。

请参阅下方了解tf-controller功能的详细信息。

 

目前支持的矩陣如下所示:

VersionTerraformSource ControllerFlux v2v0.15v1.3.9v1.0.xv2.0.xv0.14v1.3.9v0.31.0v0.41.xv0.13v1.3.1v0.31.0v0.36.xv0.12v1.1.9v0.26.1v0.32.x

這個問題

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}!"
}

 

我将向仓库推送并创建拉取请求。
片刻后,计划内容将以如下形式作为评论!

image.png

如果您评论 “!replan”,它将再次通知您该计划的结果。

image.png

总结

我在使用Terraform Controller的Branch Planner功能以GitOps的方式管理Terraform资源时进行了尝试。这个功能能够自动通知PR上的Plan内容,非常便利。我希望它能早日正式发布。

广告
将在 10 秒后关闭
bannerAds