如何在 terraform 中获取 k8s 作业的输出

Posted

技术标签:

【中文标题】如何在 terraform 中获取 k8s 作业的输出【英文标题】:How to get output of k8s job in terraform 【发布时间】:2021-05-26 21:05:06 【问题描述】:

我在 terraform 中使用 kubernetes 提供程序,并在 AWS 上的 EKS 集群上运行 kubernetes 作业。 我想从作业中获取一些输出并将它们存储在我的 terraform 变量(或 AWS 参数存储)中,以便我可以在其他地方的 terraform 文件中使用它们。 我不知道该怎么做。 作业能否将此信息写入文件并将其放回它收到的配置映射中?或者 terraform 中有没有办法解析 k8s 作业的日志(标准输出)?

这或多或少是我的 terraform 文件:

resource "kubernetes_job" "my_job" 

  metadata 
    name = "my_job"
    namespace = var.namespace
  
  spec 
    template 
      metadata 
      spec 
       volume 
                name = local.config_name
                config_map 
                            name = kubernetes_config_map.my_job.metadata[0].name
                            default_mode = "0777"
                           
                
             container 
                    name        = "my_container"
                    image       = "123456789012.dkr.ecr.us-east-1.amazonaws.com/my_container:6.4.1.37"
                    command     = ["/bin/bash","/opt/utilities/run_pre_db_script.sh"]
                    working_dir = "/opt/utilities"
                    volume_mount 

                                name =  local.config_name
                                mount_path = "/opt/my_container_mount"
                              
             
        restart_policy = "Never"
      
    
  
  timeouts 
    create="5m"
  
  wait_for_completion = true

【问题讨论】:

【参考方案1】:

Terraform 无法解析作业生成的日志,并且不建议更改 configmap 值,因为它会在您的配置和生产状态之间产生差异。

我能想到的完成任务的最佳解决方案是让作业生成动态生成的 tarraform 文件/terraform 参数文件,将它们提交到存储其余 terraform 文件的存储(例如 git 存储库) .

一旦实现这一点,您就可以让下一次 terraform 调用检索作业的结果并将其合并到下一次执行中。

【讨论】:

以上是关于如何在 terraform 中获取 k8s 作业的输出的主要内容,如果未能解决你的问题,请参考以下文章

Terraform Azure 流分析作业 - 开始/停止

terraform 从 gcp 秘密创建 k8s 秘密

Terraform:如何从数据类型中获取元素

Terraform-如何避免使用单一状态文件进行破坏和创建

从 terraform helm_release 资源获取 redis 主机 url

如何在 gitlab 中删除 terraform 资源?