我运行一个需要所有客户端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
)
我想过使用name
或ownerReference.name
属性的子部分。遗憾的是,fieldSelector是badly documented或根本不起作用。我还想过通过jq
解析完整的pod列表,但不是非常喜欢依赖。
3)通过引用公共服务来识别所有pod
我现在看到的方法是识别哪个pod属于哪个服务(再次使用标签)
还有其他想法来识别兄弟姐妹吗?我很惊讶我没有找到类似的问题。
答案 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/