【问题标题】:Find sibling-pods (pods deployed by the same deployment)查找兄弟豆荚(由同一部署部署的豆荚)
【发布时间】:2018-05-23 07:05:55
【问题描述】:

我运行一个应用程序,它需要所有客户端 ips 的列表以进行同步。我在 Kubernetes 中运行此应用程序,并从这些客户端 Pod 向 https://kubernetes/api/v1/pods 发出请求。因此,我正在寻找一种可靠的方法来识别所有 pod,这些 pod 是通过这种方式由同一部署(复制集)创建的。

因此,在滚动升级期间也能正确识别 pod。

我确实有一些想法想分享,但没有一个能真正说服我:

1) 使用标签 (?labelSelector=label=value):

1.a) 定义 自定义标签 只有这些 pod 有: 有效的解决方案,但由于解决方案应该非常通用,我不想定义特殊标签,pod 需要有。同样这样我不能确定添加其他获得标签的 pod。

1.b) 使用自动生成的 pod-template-hash 标签:遗憾的是,这个标签在滚动更新期间被更改,因此更新发生时,选择器无法正常工作.

2) 使用自定义字段 (?fieldSelector)

我想过使用nameownerReference.name 属性的子部分。可悲的是 fieldSelector 是badly documented 或者根本不起作用。我也想过通过jq 解析完整的 pod 列表,但不太喜欢这种依赖关系。

3) 通过引用公共服务来识别所有 pod

我现在看到了识别哪个 pod 属于哪个服务的方法(除了再次使用标签)


还有其他方法可以识别兄弟豆荚吗?我有点惊讶我没有找到一个类似的问题。

【问题讨论】:

  • 标签/选择器是您真正需要的。使用kubectl get rs [name] -o=yaml 并查看selector: 字段。
  • 当然,通常选择应该使用标签来完成。虽然我仍然对没有选择兄弟姐妹的通用方法感到惊讶,但在与一些同事交谈后,我意识到没有,标签是要走的路。

标签: kubernetes


【解决方案1】:

这就是app 选择器的典型用途。

您可以使用 kubectl 列出部署的 pod。

以下来自official docs

列出部署创建的 pod:

kubectl get pods -l app=nginx

  NAME                                     READY     STATUS    RESTARTS  
  AGE  nginx-deployment-1771418926-7o5ns   1/1       Running   0        
  16h  nginx-deployment-1771418926-r18az   1/1       Running   0

您也可以通过 yaml 文件列出 Pod:

$ kubectl get pod -f ./pod.yaml

【讨论】:

  • 这仅在您在 pod 规范中实际声明了 app 标签或使用 kubectl run 命令(隐式添加标签)时才有效。
  • 这是正确的,但我相信仍然会被视为执行您想要实现的目标的标准方式。
【解决方案2】:

我想通过分享我设计的依赖于标签并使用jq 的解决方案来跟进此问题(我意识到 OP 并没有明确要求jq 解决方案,但我认为这很简洁)。

// extracts all pod labels and organizes them in a selector
sel=${$(kubectl get deployment --output=json my-deployment | jq -j '.spec.selector.matchLabels | to_entries | .[] | "\(.key)=\(.value),"')%?}

// list pods using the selector above
kubectl get pods --selector=$sel

我从 kubectl 备忘单中借鉴了一些想法 - https://kubernetes.io/docs/reference/kubectl/cheatsheet/

【讨论】:

    猜你喜欢
    • 2013-07-01
    • 2023-03-12
    • 1970-01-01
    • 2022-08-04
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多