【问题标题】:Use Terraform output in Kubernetes在 Kubernetes 中使用 Terraform 输出
【发布时间】:2018-06-19 23:08:12
【问题描述】:

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

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

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

【问题讨论】:

    标签: amazon-web-services kubernetes terraform kubectl


    【解决方案1】:

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

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

    我在寻找一种将 TF 输出获取到 Kubernetes 中指定的环境变量的方法时偶然发现了这个问题,我希望更多人这样做。我也怀疑这也是你的问题,或者至少它可以成为解决你问题的一种方法。所以:

    您可以使用Kubernetes Terraform provider 连接到您的集群,然后使用kubernetes_config_map 资源创建配置映射。

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

    如果您有秘密参数,请使用kubernetes_secret 资源:

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

    你可以在设置环境时consume these in your k8syaml:

    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
    

    【讨论】:

      猜你喜欢
      • 2021-02-08
      • 1970-01-01
      • 2021-12-18
      • 2020-12-07
      • 2021-09-29
      • 2021-09-03
      • 2021-04-09
      • 2019-09-07
      • 2021-12-23
      相关资源
      最近更新 更多