为什么在通过kubernetes部署创建Pod名称时,其名称后面会附加5个随机字母数字字符?是否有可能摆脱它们,使豆荚名称不变?我经常删除和创建部署,并且希望Pod名称不要更改。
更新:我想使用相同的名称,因为我一直在删除/重新创建相同的部署,如果名称不变,那么我可以快速重用旧命令以执行到/查看容器的日志。
答案 0 :(得分:3)
这是部署的工作方式,每次吊舱死亡时,ReplcaSet都会使用不同的名称创建吊舱以匹配所需的状态,并在吊舱名称上附加随机数以为其赋予唯一的名称。
部署对象无法实现任何目标,因为它们是针对无状态应用程序的。当您想保留应用程序的状态(名称)时,使用StatefulSet当然可以实现。
因此,如果您使用StatefulSet对象管理副本,则将使用特定的名称约定(例如e)创建每个Pod。 G。 POD_NAME-1,POD_NAME-2等i。 e。索引将附加到窗格名称。同样,当吊舱死亡时,将使用相同的名称创建新吊舱。
您想要实现的是StatefulSet的理想用例。去吧。
答案 1 :(得分:2)
豆荚名称中包含随机字母数字的原因:
创建deployment
时,它会不直接创建广告连播(以匹配副本数)。
如果您的用例是频繁使用旧命令,那么选择Statefulset
不是一个好的解决方案。状态集是heavy weight
(有序部署,有序终止,唯一的网络名称),它们是专门设计用来在重新启动时保留状态的(结合持久卷)。
您可以使用的工具很少:
轻巧的解决方案:
您可以使用labels在各个部署中获取相同的pod:
kubectl get pods -l app=my_app,app_type=server
NAME READY STATUS RESTARTS AGE
my-app-5b7644f7f6-4hb8s 1/1 Running 0 22h
my-app-5b7644f7f6-72ssz 1/1 Running 0 22h
在此之后,我们可以使用一些bash魔术来获得我们想要的东西
最终命令:
kubectl get pods -l app=my_app,app_type=server -o name | rg "pod/" -r "" | head -n 1 | awk '{print "kubectl logs " $0}' | bash
说明:
获取广告连播名称列表
kubectl get pods -l app=my_app,app_type=server -o namenames
pod/my-app-5b7644f7f6-4hb8s
pod/my-app-5b7644f7f6-72ssz
使用ripgrep
或sed
(rg“ pod /” -r“”)替换pod /
head -n 1
只能拿一个吊舱答案 2 :(得分:1)
如果从部署对象kind:Deployment部署Pod,则部署控制器会将唯一名称附加到Pod中,该名称是特定部署的一部分。 这就是部署控制器查找各个部署的所有相关吊舱的方式。滚动升级,回滚功能需要此