假设你在测试中可以访问集群和kubectl,并且你的pod是一个部署的一部分,该部署有一个特定的标签,比如app=nginx,你可以这样查询它的名称: kubectl get po --selector=app=nginx-o=name 输出将类似于 pod/yourDeploymentName-7bd6c579fd-7gxzn 您可以通过awk修剪前导pod/: kubectl get po --selector=app=nginx-o=name | awk -F "/" '{print $2}'
7条答案
按热度按时间m1m5dgzv1#
这里只是回答你的回答,因为你已经问过了,否则最好使用服务名称进行通信,而不是POD名称,如果你正在使用它。
您可以将工作负载作为
POD
运行,但如果将其作为deployment
运行,则不是一个好主意。如果您以POD运行,则可以在每次需要时维护单个名称。
额外:
您还可以使用元数据或downwardAPI来获取现有POD的详细信息。
name将被注入到环境变量(MY_POD_NAME)中,您的自动化可以自动获取它,将其与
os.env
一起使用。示例:
阅读更多:https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/
vfh0ocws2#
pod是cattle, not pets (
devops.stackexchange.com
)。因此,pod不具有身份。因此,我们不应该直接与pod通信,而是通过Service公开pod并与服务通信。服务有一个定义良好的常量名称。sg24os4d3#
名称的变化是由于您使用了“部署”,这是设计使然。
如果你真的需要使用自动化,不要使用pod名称,而是通过部署。所以我们不用
使用
这将随机选择一个部署pod来运行命令。由于所有的pod都是副本,所以每个pod都应该以相同的方式运行,所以结果应该是相同的。
您还可以执行一些stdout操作,例如:
选择列表中的第一个pod
您也可以使用statefulset而不是deployment,它将以已知的方式命名您的pod:
{statefulset}-0
、{statefulset}-1
等等,然后你可以转到一个特定的命令。velaa5lx4#
要获得可预测的pod名称,必须使用状态完整集
ergxz8rk5#
这取决于你的测试是做什么的,以及你为什么需要知道Pod的名字。
如果你只需要Pod的名称:
假设你在测试中可以访问集群和kubectl,并且你的pod是一个部署的一部分,该部署有一个特定的标签,比如
app=nginx
,你可以这样查询它的名称:kubectl get po --selector=app=nginx-o=name
输出将类似于
pod/yourDeploymentName-7bd6c579fd-7gxzn
您可以通过awk修剪前导
pod/
:kubectl get po --selector=app=nginx-o=name | awk -F "/" '{print $2}'
cfh9epnr6#
可以动态获取pod名称
这个查询将给予你第一个pod,在通过命名空间和release / app选择器名称过滤后。
您可以在for循环中运行并执行动态脚本。
xuo3flqw7#
为了在Kubernetes中部署后保持Pod的名称相同,您可以使用标签和选择器的组合。
创建部署时,您可以为将由部署创建的Pod定义一组标签。例如:
在本例中,应用程序:my-app标签被分配给pod模板。然后在选择器中使用此标签,以确保部署创建的pod具有相同的标签。这意味着如果删除或替换了一个pod,部署将自动创建一个具有相同标签和名称的新pod。
要验证Pod是否与部署具有相同的名称,您可以使用以下命令:
这将列出所有带有app=my-app标签的Pod,包括部署创建的Pod。