我创建了ARM模板来部署Azure VM和HDI集群。我希望在部署完成后获取并列出Azure VM的公共IP和HDI集群头节点的私有IP。
有没有办法使用ARM模板获取它?
答案 0 :(得分:2)
有没有办法使用ARM模板获取它?
根据我的知识,您无法使用模板获取VM IP。您可以使用azure cli
来获取VM IP而不是模板。如果您在Linux上使用cli,则可以在创建VM后使用以下命令。
azure vm show -g shui123 -n shui|grep "Public IP address"| awk -F: '{print $3}'
我想获取并列出Azure VM的公共IP和HDI的私有IP 部署完成后的集群头节点。
Azure VM的公共IP是什么意思?只是HDI集群中的VM或VM?
如果它只是一个虚拟机,您可以使用上面的命令,如果它是HDI集群中的虚拟机,则Azure HDInsight集群将不允许为其分配任何公共IP。如果需要将IP分配给HDInsight群集,则必须在VNET中创建HDInsight。以下文章讨论了this。
您可以使用Ambari RE ST AP I获得HDI群集IP。
for HOSTNAME in $(curl -u admin:$PASSWORD -sS -G "https://shuitest.azurehdinsight.net/api/v1/clusters/shuitest/hosts" | jq -r '.items[].Hosts.host_name')
do
IP=$(curl -u admin:$PASSWORD -sS -G "https://$CLUSTERNAME.azurehdinsight.net/api/v1/clusters/$CLUSTERNAME/hosts/$HOSTNAME" | jq -r '.Hosts.ip')
echo "$HOSTNAME <--> $IP"
done
有关Ambari RE ST AP的更多信息,请参阅此link。
更新
如果您只想列出活动节点IP,可以使用以下命令。
PASSWORD=
CLUSTERNAME=
curl -u admin:$PASSWORD -sS -G "https://$CLUSTERNAME.azurehdinsight.net/api/v1/clusters/$CLUSTERNAME/services/HDFS/components/NAMENODE" |grep LiveNode>test.txt
cat test.txt |awk -F'\' '{print $2}'|sed 's/\"//g'|tail -1|awk -F: '{print $1}'
答案 1 :(得分:0)
上述解决方案对于提出的问题很好。但是,理想情况下,您不应使用 HDI 集群头节点的私有 IP。这是因为如果头节点(运行它的虚拟机)出现故障,私有 IP 会发生变化。头节点有一个FQDN(Fully Qualified Domain Name)的概念,比如:hn0-van.0owcbllr5hze3hxdja3mqlrhhe.ex.internal.cloudapp.net
和hn1-van.0owcbllr5hze3hxdja3mqlrhhe.ex.internal.cloudapp.net
。在任何地方使用这些 FQDN 代替 IP 地址。它们的 DNS 解析由 Azure vnet 默认 DNS 解析器自动处理。所以不用担心。
获取 FQDN:
az network nic list --resource-group <RESOURCEGROUP>
将 替换为您的资源组名称。检查头节点的 FQDN 设置。
一旦我有时间,我也会发布 PowerShell 脚本以直接获取头节点的确切 FQDN。
参考:https://docs.microsoft.com/en-us/azure/hdinsight/hdinsight-plan-virtual-network-deployment#multinet