2017-04-19 125 views
1

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

因此,重要的是,在轧制升级过程中,还可以正确识别吊舱。

我有一对夫妇的想法,我想分享,甚至没有真正劝说我:

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

1.A)定义自定义标签只有这些豆荚具有:有效的解决方案,但由于解决方案应该是一般的,我不想定义一个特殊的标签,豆荚需要有。也是这样,我不能确定添加其他标签的豆荚。

1.b)使用自动生成的pod-template-hash label:很遗憾,在滚动更新过程中会发生更改,因此发生更新时,选择器无法正常工作。

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

我想使用一个所述nameownerReference.name属性的子部分的。可惜的是fieldSelector是badly documented或根本不工作。我还想过通过jq解析完整的豆荚列表,但不太喜欢这种依赖关系。

3)通过引用一个共同的服务识别所有吊舱

我现在看到的方式来认识到服务(旁边再次使用标签)


该吊舱属于是否有任何其他的想法找出兄弟荚?我有些惊讶,我没有找到一个类似的问题。

+0

标签/选择器真的是你的样子ng for。使用'kubectl get rs [name] -o = yaml'并查看'selector:'字段。 –

+0

当然,通常选择应该使用标签来完成。虽然我仍然很惊讶没有通用的方式来选择兄弟姐妹,但在与一些合作伙伴交谈之后,我意识到没有和标签是要走的路。 – nik

回答

0

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

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

以下是从official docs

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文件中列出荚:

$ kubectl get pod -f ./pod.yaml

名单由部署创建的豆荚

+1

这只适用于在pod规范中实际声明'app'标签或使用'kubectl run'命令(隐式添加标签)的情况。 –

+0

这是正确的,但仍然会被视为做你正在努力达到的标准方式我相信。 –