通过Terraform引导AKS代理节点

时间:2019-04-23 11:44:35

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

我当前正在使用terraform创建k8s群集,该群集运行良好。设置完节点后,我想在任一节点上运行一些bash命令。到目前为止,null_resource似乎是一个选择,因为它是一个集群,并且我们不知道节点名称/ IP。但是,由于azurerm_kubernetes_cluster不会导出负载均衡器的IP地址或虚拟机名称,因此我无法确定connection块的值是多少。问号在下面需要正确的值:

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

任何帮助!

3 个答案:

答案 0 :(得分:0)

AKS不会将其节点公开给Internet。您只需通过群集的主节点连接节点即可。如果要在节点中运行一些bash命令,则可以使用SSH连接将pod用作连接节点的助手,请参阅有关SSH node access的步骤。

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

答案 1 :(得分:0)

建议仅运行一个在节点上执行bash命令的守护程序集。由于任何规模或更新操作都将删除或不更新您正在节点上执行的配置。

答案 2 :(得分:0)

没有一个简单的解决方案。静态IP不是正确的方法,因此,我最终围绕Terraform编写了一个包装器。我不想在出现的每个节点上运行初始化脚本,而只在其中一个节点上运行。因此,实质上,现在该包装程序与terraform进行通信,以首先仅部署一个执行cloud-init的节点。此后,它调出缩放地形的功能,并调出其余所需数量的实例。在cloud-init脚本中,我检查了import numpy as np from multiprocessing import Pool import time class PricingSimulatedBarrierOption: def __init__(self, spot, strike, barrier, rate, sigma, time, sims, steps): self.spot = spot self.strike = strike self.barrier = barrier self.rate = rate self.sigma = sigma self.time = time self.sims = sims self.steps = steps self.dt = self.time / self.steps def Simulations(self): total = np.zeros((self.sims,self.steps+1),float) pathwiseS= np.zeros((self.steps+1),float) for j in range(self.sims): pathwiseS[0] =self.spot total[j,0] = self.spot for i in range(1,self.steps+1): phi = np.random.normal() pathwiseS[i] = pathwiseS[i-1]*(1+self.rate*self.dt+self.sigma*phi*np.sqrt(self.dt)) total[j,i]= pathwiseS[i] return total.reshape(self.sims, self.steps+1) def CallUpAndOut(self): start_time = time.time() p = Pool() getpayoff = p.map(self.Simulations(),self.total) ###How to pass total here? p.close() p.join() end_time = time.time()-start_time print(end_time) # getpayoff = self.Simulations() callpayoff = np.zeros((self.sims),float) for j in range(self.sims): if max(getpayoff[j,])>=self.barrier: callpayoff[j] = 0 else: callpayoff[j] = max(getpayoff[j,self.steps-1]-self.strike,0) return np.exp(-self.rate*self.time)*np.average(callpayoff) c = PricingSimulatedBarrierOption(100,100,170,0.05,0.2,1,10000,252) print(c.CallUpAndOut()) ,如果我收到的大小超过一个节点,则只需跳过cloud-init命令。