查找sibling-pods(由同一部署部署的pod)

时间:2017-04-19 16:30:44

标签: kubernetes

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

因此,重要的是,在滚动升级期间也可以正确识别窗格。

我确实有几个想要分享的想法,即使没有真正让我信服的话:

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

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

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

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

我想过使用nameownerReference.name属性的子部分。遗憾的是,fieldSelector是badly documented或根本不起作用。我还想过通过jq解析完整的pod列表,但不是非常喜欢依赖。

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

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

还有其他想法来识别兄弟姐妹吗?我很惊讶我没有找到类似的问题。

2 个答案:

答案 0 :(得分:2)

这就是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

答案 1 :(得分:0)

我希望通过分享我设计的依赖于标签和利用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/

中的想法