Amazon web services 使用Kubernetes中的地形输出

Amazon web services 使用Kubernetes中的地形输出,amazon-web-services,kubernetes,terraform,kubectl,Amazon Web Services,Kubernetes,Terraform,Kubectl,我正在使用一个稍微定制的地形配置在AWS上生成Kubernetes集群。该配置包括一个连接到集群节点和主节点的EFS实例。为了让Kubernetes将此EFS实例用于卷,我的Kubernetes YAML需要Terraform生成的EFS实例的id和端点/域 目前,我的Terraform输出EFS id和DNS名称,我需要在Terraform应用之后和kubectl应用YAML之前使用这些值手动编辑我的Kubernetes YAML 如何将这些地形输出值自动传递给Kubernetes?我不知道在

我正在使用一个稍微定制的地形配置在AWS上生成Kubernetes集群。该配置包括一个连接到集群节点和主节点的EFS实例。为了让Kubernetes将此EFS实例用于卷,我的Kubernetes YAML需要Terraform生成的EFS实例的id和端点/域

目前,我的Terraform输出EFS id和DNS名称,我需要在
Terraform应用
之后和
kubectl应用
YAML之前使用这些值手动编辑我的Kubernetes YAML


如何将这些地形输出值自动传递给Kubernetes?

我不知道在AWS中设置Kubernetes群集的yaml是什么意思。但是,我总是使用。此外,我不明白您为什么要将EFS装载到主节点和/或节点,而不是容器

但直接回答您的问题:您可以编写一个脚本,将Terraform输出输出输出到一个值文件,并使用该文件生成k8s配置

我在寻找将TF输出发送到Kubernetes中指定的EnvVar的方法时偶然发现了这个问题,我希望更多的人会这样做。我还怀疑这也是你的问题,或者至少它可以成为解决你问题的一种方式。因此:

您可以使用连接到群集,然后使用资源创建configmaps

provider "kubernetes" {}

resource "kubernetes_config_map" "efs_configmap" {
  "metadata" {
    name = "efs_config"  // this will be the name of your configmap
  }

  data {
    efs_id = "${aws_efs_mount_target.efs_mt.0.id}"
    efs_dns = "${aws_efs_mount_target.efs_mt.0.dns_name}"
  }
}
如果您有秘密参数,请使用资源:

resource "kubernetes_secret" "some_secrets" {
  "metadata" {
    name = "some_secrets"
  }

  data {
    s3_iam_access_secret = "${aws_iam_access_key.someresourcename.secret}"
    rds_password = "${aws_db_instance.someresourcename.password}"
  }
}    
然后,您可以在设置环境时使用yaml:

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: some-app-deployment
spec:
  selector:
    matchLabels:
        app: some
  template:
    metadata:
      labels:
        app: some
    spec:
      containers:
        - name: some-app-container
          image: some-app-image
          env:
            - name: EFS_ID
              valueFrom:
                configMapKeyRef:
                  name: efs_config
                  key: efs_id
            - name: RDS_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: some_secrets
                  key: rds_password