【发布时间】:2021-09-03 12:11:42
【问题描述】:
当使用 API 调用在 GCP 中列出 VM 实例时,该调用返回 GCP 中可用的所有实例,包括 GCE 实例和 GKE 实例。如何区分 GCE Instance 和 GKE Instance?
【问题讨论】:
标签: google-cloud-platform google-compute-engine google-kubernetes-engine
当使用 API 调用在 GCP 中列出 VM 实例时,该调用返回 GCP 中可用的所有实例,包括 GCE 实例和 GKE 实例。如何区分 GCE Instance 和 GKE Instance?
【问题讨论】:
标签: google-cloud-platform google-compute-engine google-kubernetes-engine
GKE 创建的节点有一个特殊的标签goog-gke-node。
您可以使用 API call 和过滤器过滤它们
GET "https://compute.googleapis.com/compute/v1/projects/<projectID>/zones/<zone>/instances?filter=(labels.goog-gke-node%3D%22%22)"
【讨论】:
运行以下命令应列出来自计算引擎和 GKE 的所有实例。
gcloud compute instances list
看起来从 GKE 创建的实例将采用以下格式 gke-[nameofcluster]-........ 。这是区分名称的一种方式。
现在,如果您出于某种原因在创建 Compute Engine 虚拟机时遵循了相同的格式,您可以只描述一个虚拟机,而那些参考 gke 一词的人会告诉您它是从 GKE 创建的
gcloud compute instances describe gke-nameofcluster-xxxxxx-xxxxxxx | grep gke
您将看到 30 多个与标签和托管组等相关的 gke 引用。您将在看到它时知道它。
【讨论】:
当使用instances.aggregatedList 方法检索项目中的GCE 实例列表时,有一个名为filter 的Query parameter 用于过滤响应中列出的资源。所以,我们可以利用这个参数来只列出 GKE 实例或任何 GCE 实例。
例如: 标签 “goog-gke-node”: ”” 是唯一资源,默认情况下是 GKE 实例元数据的一部分,将其用作过滤以仅列出 GKE 实例。为此,我们可以使用字符串 labels.goog-gke-node = "" 作为 API 调用中过滤器参数的值。参考 API explorer here,它具有预先填充的过滤器参数值,在将 project's 值替换为项目 ID 后执行时,将仅列出 GKE 实例。同样,我们也可以利用一组 GCE 实例独有的其他资源。
【讨论】: