Bootstrap 通过 Terraform 的 AKS 代理节点
Bootstrap AKS agent nodes through terraform
我目前正在使用 terraform 创建运行良好的 k8s 集群。配置节点后,我想在任何一个节点上 运行 几个 bash 命令。到目前为止,null_resource
似乎是一个选项,因为它是一个集群,我们不知道节点 names/IPs。但是,我无法确定 connection
块的值应该是多少,因为 azurerm_kubernetes_cluster 不会导出负载均衡器的 IP 地址或虚拟机名称。下面的问号需要正确的值:
resource "null_resource" "cluster" {
triggers = { "${join(",", azurerm_kubernetes_cluster.k8s.id)}" }
connection = { type = ssh
user = <user>
password = <password>
host = <?>
host_key = <pub_key>
}
}
任何帮助!
AKS 不会将其节点暴露给 Internet。您只需通过集群的主节点连接节点即可。如果你想在节点中运行一些bash命令,你可以使用创建一个pod的SSH连接作为连接节点的助手,参见SSH node access的步骤。
此外,您可以为负载均衡器中的节点添加 NAT 规则,然后您也可以通过负载均衡器 public IP SSH 连接到节点。但这不是一种安全的方式。所以我不建议这样。
只推荐 运行 一个在节点上执行 bash 命令的守护进程。由于任何缩放或更新操作都将删除或没有您在节点上执行的更新配置。
这个问题没有直接的解决方案。静态 IP 不是正确的方法,因此,我最终围绕 terraform 编写了一个包装器。我不想 运行 我的初始化脚本出现在每个出现的节点上,而只是其中一个节点。所以本质上,现在 wrapper 与 terraform 通信,首先只部署一个执行 cloud-init 的节点。在此之后,它会调用缩放地形的功能并调出所需数量的实例。在 cloud-init 脚本中,我检查了 kubectl get no
如果我收到的大小超过一个节点,我只是跳过 cloud-init 命令。
我目前正在使用 terraform 创建运行良好的 k8s 集群。配置节点后,我想在任何一个节点上 运行 几个 bash 命令。到目前为止,null_resource
似乎是一个选项,因为它是一个集群,我们不知道节点 names/IPs。但是,我无法确定 connection
块的值应该是多少,因为 azurerm_kubernetes_cluster 不会导出负载均衡器的 IP 地址或虚拟机名称。下面的问号需要正确的值:
resource "null_resource" "cluster" {
triggers = { "${join(",", azurerm_kubernetes_cluster.k8s.id)}" }
connection = { type = ssh
user = <user>
password = <password>
host = <?>
host_key = <pub_key>
}
}
任何帮助!
AKS 不会将其节点暴露给 Internet。您只需通过集群的主节点连接节点即可。如果你想在节点中运行一些bash命令,你可以使用创建一个pod的SSH连接作为连接节点的助手,参见SSH node access的步骤。
此外,您可以为负载均衡器中的节点添加 NAT 规则,然后您也可以通过负载均衡器 public IP SSH 连接到节点。但这不是一种安全的方式。所以我不建议这样。
只推荐 运行 一个在节点上执行 bash 命令的守护进程。由于任何缩放或更新操作都将删除或没有您在节点上执行的更新配置。
这个问题没有直接的解决方案。静态 IP 不是正确的方法,因此,我最终围绕 terraform 编写了一个包装器。我不想 运行 我的初始化脚本出现在每个出现的节点上,而只是其中一个节点。所以本质上,现在 wrapper 与 terraform 通信,首先只部署一个执行 cloud-init 的节点。在此之后,它会调用缩放地形的功能并调出所需数量的实例。在 cloud-init 脚本中,我检查了 kubectl get no
如果我收到的大小超过一个节点,我只是跳过 cloud-init 命令。