【问题标题】:Bootstrap AKS agent nodes through terraform通过 terraform 引导 AKS 代理节点
【发布时间】:2019-09-12 14:17:31
【问题描述】:

我目前正在使用 terraform 创建运行良好的 k8s 集群。配置节点后,我想在任何一个节点上运行一些 bash 命令。到目前为止,null_resource 似乎是一个选项,因为它是一个集群,我们不知道节点名称/IP。但是,我无法确定 connection 块的值应该是什么,因为 azurerm_kubernetes_cluster 不会导出负载平衡器的 IP 地址或 vm 名称。问号需要下面的正确值:

resource "null_resource" "cluster" {
  triggers = { "${join(",", azurerm_kubernetes_cluster.k8s.id)}" }
  connection = { type = ssh 
                 user = <user>
                 password = <password>
                 host = <?>
                 host_key = <pub_key>
            }
}  

任何帮助!

【问题讨论】:

  • 只想在节点中运行 bash 命令?有什么办法好吗?
  • @CharlesXu 是的,我愿意尝试建议

标签: azure terraform azure-aks terraform-provider-azure


【解决方案1】:

AKS 不会将其节点暴露给 Internet。你可以通过集群的主节点连接节点。如果你想在节点中运行一些 bash 命令,你可以使用 SSH 连接,使 pod 作为助手连接到节点,参见SSH node access 的步骤。

另外,您可以在负载均衡器中添加节点的 NAT 规则,然后您也可以通过负载均衡器公网 IP SSH 到节点。但这不是一种安全的方式。所以我不建议这样。

【讨论】:

  • 但是 terraform 并没有吐出负载均衡器的公网 IP。我正在努力解决这个问题
  • @AnshulVerma 您可以在创建AKs集群时使用静态方法创建公网IP。然后就可以输出公网IP了。
【解决方案2】:

建议只运行一个在节点上执行 bash 命令的守护程序集。由于任何缩放或更新操作都将删除或没有您在节点上执行的更新配置。

【讨论】:

  • 如问题中所述,我不需要它在每个节点上运行 - 只需在其中一个节点上运行一次就可以了
【解决方案3】:

对此没有直接的解决方案。静态 IP 不是正确的方法,因此,我最终编写了一个 terraform 的包装器。我不想在出现的每个节点上运行我的初始化脚本,而只在其中一个节点上运行。所以本质上,现在包装器与 terraform 通信以首先仅部署一个执行 cloud-init 的节点。在此之后,它会调用缩放 terraform 的函数并调出所需实例数量的其余部分。在 cloud-init 脚本中,我检查了 kubectl get no,如果我收到多个节点的大小,我只需跳过 cloud-init 命令。

【讨论】:

    猜你喜欢
    • 2021-11-01
    • 2022-01-24
    • 2016-10-23
    • 2021-04-11
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    相关资源
    最近更新 更多