如何在 Terraform 上使用 CRD 创建 crunchydata postgres 集群?

时间:2021-05-06 09:19:17

标签: postgresql terraform

我使用 Terraform 创建了 K8S 集群,还为 Crunchydata Postgres Operator 创建了 CRD

我从这个 link 获得了用于 Postgres 集群创建的 CRD

Terraform 脚本如下所示(定制输出)

resource "kubectl_manifest" "pgocluster" {
  yaml_body = <<YAML
apiVersion: crunchydata.com/v1
kind: Pgcluster
metadata:
  annotations:
    current-primary: ${var.pgo_cluster_name}
  labels:
    crunchy-pgha-scope: ${var.pgo_cluster_name}
    deployment-name: ${var.pgo_cluster_name}
    name: ${var.pgo_cluster_name}
    pg-cluster: ${var.pgo_cluster_name}
    pgo-version: 4.6.2
    pgouser: admin
  name: ${var.pgo_cluster_name}
  namespace: ${var.cluster_namespace}
YAML
}

但是当我执行 'terraform apply' 时,它错误地为

Error: pgo/UserGrp failed to create kubernetes rest client for update of resource: resource [crunchydata.com/v1/Pgcluster] isn't valid for cluster, check the APIVersion and Kind fields are valid

但是,根据上面提到的官方链接,以下应该可以使用

apiVersion: crunchydata.com/v1
kind: Pgcluster

我不确定是 Terraform 的问题还是链接没有正确更新

请让我知道应该更改/做什么来解决这个问题,因为我被这个问题困住了

1 个答案:

答案 0 :(得分:0)

最后,我找到了问题所在,问题是 pgo_cluster_name 不是小写的

只有当我单独执行目标时才会出现以下错误,即 terraform apply --target=<target_name>

Error: pgo/UserGrp failed to run apply: error when creating "/tmp/773985147kubectl_manifest.yaml": Pgcluster.crunchydata.com "UserGrp" is invalid: metadata.name: Invalid value: "UserGrp": a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')

我设置了 pgo_cluster_name=UsrGrp 而不是 pgo_cluster_name=usrgrp