如果我创建一个名为cluster-1
的新GKE群集,则该群集中的VM都将具有自动生成的网络标签,例如gke-cluster-1-d4732bcc-node
。
是否可以使用gcloud
CLI或其他方式使用群集名称以编程方式检索此网络标签?
答案 0 :(得分:0)
使用命令gcloud只能获取VM网络标签
var dummyVar = 0;
var sw = new Stopwatch();
//delegate inside loop
sw.Start();
for(int i=0; i<10000000; i++)
{
Func<int, int> ax = delegate (int x) { return x++; };
dummyVar = ax(i);
}
sw.Stop();
var ms = sw.ElapsedMilliseconds;
//delegate outside loop
Func<int, int> ax2 = delegate (int x) { return x++; };
sw.Restart();
for (int i = 0; i < 10000000; i++)
{
dummyVar = ax2(i);
}
sw.Stop();
var ms2 = sw.ElapsedMilliseconds;
网络标签信息将在底部,并且输出将类似于:
gcloud compute instances describe INSTANCE-NAME --project=PROJECT-ID --zone=INSTANCE-ZONE
由群集创建的所有VM将具有相同的前缀。 gke-CLUSTER_NAME-NODE_POOL_NAME-RANDOM_STRING。
例如,我创建了集群“ test-cluster”,而我仅使用“ default-pool”。我的一个实例是[gke-test-cluster-default-pool-xxxxxxx-xxxxxxx]
您可以获取集群创建的所有实例名称,并将它们放入类似于
的变量中。tags:
fingerprint: xxxx
items:
- tag1
- tag2
- tag3
现在您可以使用FOR循环运行命令
name=`gcloud compute instances list --project=PROJECT-ID | grep gke | awk '{print $1}'`
您可以在命令末尾添加GREP,仅用于获取网络标签信息,将输出存储在文件中或根据需要进行解析。
答案 1 :(得分:0)
我通过为GKE群集获取自动生成的防火墙规则之一并拉出目标标签来实现这一目标:
CLUSTER_NAME=<cluster-name>
PROJECT_NAME=<project-name>
NODE_NETWORK_TAG=$(gcloud compute firewall-rules list --project $PROJECT_NAME --filter="name~gke-$CLUSTER_NAME-[0-9a-z]*-master" --format="value(targetTags[0])")
echo "$NODE_NETWORK_TAG"
答案 2 :(得分:0)
有人知道使用Terraform做到这一点的方法