Terraform Enterprise, Terraform Cloud Business で利用できるTerraform Cloud Agent をKubenetes 上で動かした際のメモです。
Terraform Cloud Agent(以下TFC Agent) は、有償版のTerraform のTerraform Enterprise、Terraform Cloud Business で利用出来る機能です。
TFC Agent はコンテナイメージとして利用出来ますが、TFC Agent をKubernetes 上で稼働させた際のメモです。
TFC Agent のイメージ作成
この手順では、プライベートなコンテナレジストリを利用する場合を想定しています。カスタムTFC Agent イメージは「Terraform Cloud Agent コンテナをカスタマイズする」と同様に作成し、Harbor レジストリにプッシュしたものを利用します。
TFC Agent 用マニフェストの作成
Deployment リソースとしてTFC Agent を立ち上げます。以下の様な形でマニフェストを用意します。
$ kubectl create deployment tfc-agent --image=registry.<MYDOMAIN>/my-container-repo/tfc-agent-with-tanzu --dry-run=client -oyaml > deployment-tfc-agent-tanzu.yml
雛形となるファイルdeployment-tfc-agent-tanzu.yml
を修正して、以下の様にマニフェストを作成します。TFC_AGENT_TOKEN
とTFC_AGENT_NAME
は環境に応じた値に書き換えて、マニフェストファイルを作成します。
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: tfc-agent
name: tfc-agent
spec:
replicas: 1
selector:
matchLabels:
app: tfc-agent
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: tfc-agent
spec:
containers:
- image: registry.<MYDOMAIN>/my-container-repo/tfc-agent-with-tanzu:latest
name: tfc-agent-with-tanzu
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
env:
- name: "TFC_AGENT_TOKEN"
value: <TFC_AGENT_TOKEN>
- name: "TFC_AGENT_NAME"
value: <TFC_AGENT_NAME>
リソースのデプロイ
個別のネームスペースを作成し、そのネームスペースにTFC Agent のDeployment リソースを適用します。
k create ns tfc-agent
プライベートレジストリであるHarbor 認証情報をSecret リソースとして作成します。レジストリ情報に関しては、環境に応じて修正します。
k -n tfc-agent create secret docker-registry regsecret --docker-server=registry.<MYDOMAIN> --docker-username=******** --docker-password='********'
作成したSecret リソースをdefault
サービスアカウントにpatch
しておきます。
k -n tfc-agent patch sa default -p '"imagePullSecrets": [{"name": "regsecret" }]'
作成したマニフェストをデプロイします。
k -n tfc-agent apply -f deployment-tfc-agent-tanzu.yml
少し待つと、以下の様にマニフェストで定義したリソースがデプロイされている事を確認出来ます。
$ k -n tfc-agent get all
NAME READY STATUS RESTARTS AGE
pod/tfc-agent-64f9c46fd6-6x9k8 1/1 Running 0 68s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/tfc-agent 1/1 1 1 68s
NAME DESIRED CURRENT READY AGE
replicaset.apps/tfc-agent-64f9c46fd6 1 1 1 68s
TFC からの確認
Terraform Cloud のワークスペースの"Settings" -> "Execution Mode" -> "Agent" 設定しているワークスペースでTerraform Run($ terraform plan
& terraform apply
) を実行します。
Podのログを確認すると、TFC Agent で処理がなされている事を確認する事が出来ます。もちろん、Terraform Cloud 上でも処理が正常に終了している事が確認出来ています。
$ k -n tfc-agent logs pod/tfc-agent-64f9c46fd6-6x9k8
2021-11-01T02:19:35.086Z [INFO] agent: Starting: name=tfc-agent-on-fender version=1.0.0
2021-11-01T02:19:35.094Z [INFO] core: Starting: version=1.0.0
2021-11-01T02:19:35.806Z [INFO] core: Agent registered successfully with Terraform Cloud: agent.id=agent-******** agent.pool.id=apool-********
2021-11-01T02:19:35.899Z [INFO] agent: Core version is up to date: version=1.0.0
2021-11-01T02:19:35.899Z [INFO] core: Waiting for next job
2021-11-01T02:23:41.510Z [INFO] core: Job received: job.type=plan job.id=run-********
2021-11-01T02:23:41.511Z [INFO] terraform: Handling run: run.id=run-******** run.operation=plan organization.name=******** workspace.name=********
2021-11-01T02:23:41.511Z [INFO] terraform: Downloading Terraform release: url=https://releases.hashicorp.com/terraform/1.0.7/terraform_1.0.7_linux_amd64.zip
2021-11-01T02:23:46.002Z [INFO] terraform: Extracting Terraform from release archive
2021-11-01T02:23:47.606Z [INFO] terraform: Terraform CLI details: version=1.0.7
2021-11-01T02:23:47.606Z [INFO] terraform: Downloading Terraform configuration
2021-11-01T02:23:47.818Z [INFO] terraform: Running terraform init
2021-11-01T02:23:53.531Z [INFO] terraform: Running terraform plan
2021-11-01T02:23:59.500Z [INFO] terraform: Generating and uploading plan JSON
2021-11-01T02:24:04.315Z [INFO] terraform: Generating and uploading provider schemas JSON
2021-11-01T02:24:09.406Z [INFO] terraform: Persisting filesystem to remote storage
2021-11-01T02:24:15.352Z [INFO] terraform: Finished handling run
2021-11-01T02:24:15.655Z [INFO] core: Waiting for next job
2021-11-01T02:24:50.253Z [INFO] core: Job received: job.type=apply job.id=run-********
2021-11-01T02:24:50.253Z [INFO] terraform: Handling run: run.id=run-******** run.operation=apply organization.name=******** workspace.name=********
2021-11-01T02:24:50.426Z [INFO] terraform: Extracting Terraform from release archive
2021-11-01T02:24:51.931Z [INFO] terraform: Terraform CLI details: version=1.0.7
2021-11-01T02:24:51.931Z [INFO] terraform: Restoring filesystem from remote storage
2021-11-01T02:24:55.493Z [INFO] terraform: Running terraform init
2021-11-01T02:24:59.243Z [INFO] terraform: Running terraform apply
2021-11-01T02:25:05.510Z [INFO] terraform: Finished handling run
2021-11-01T02:25:06.375Z [INFO] core: Waiting for next job