当通过 kubernetes 部署创建时,为什么 pod 名称会在其名称后附加 5 个随机字母数字字符?是否有可能摆脱它们以使豆荚名称不改变?我经常删除和创建部署,并且希望 pod 名称不要更改。
更新:我想使用相同的名称,因为我不断删除/重新创建相同的部署,如果名称没有改变,那么我可以快速重用旧命令来执行/查看容器的日志。
这就是部署的工作原理,每次 pod 死亡时,ReplcaSet 都会创建具有不同名称的 pod 来匹配所需的状态,并附加到 pod 名称的随机数以赋予它们唯一的名称。
无论您想要实现什么目标,部署对象都是不可能的,因为它们适用于无状态应用程序。由于您想保留应用程序的状态(名称),这当然可以使用 StatefulSet 实现。
因此,如果您使用 StatefulSet 对象来管理副本,则每个 pod 都将以特定的名称约定创建,例如 POD_NAME-1、POD_NAME-2 等,即索引将附加到 pod 名称。此外,当 pod 死亡时,将以相同名称创建新的 pod。
您想要实现的 Ao 是 StatefulSet 的理想用例。大胆试试吧。
在 pod 名称中包含随机字母数字的原因:
当我们创建 a 时deployment,它不会直接创建 pod(以匹配副本数)。
如果你的用例是经常使用的旧命令,然后去Statefulset是没有很好的解决方案。Statefulset 是heavy weight(有序部署、有序终止、唯一网络名称),它们专门设计用于在重新启动时保持状态(与持久卷结合)。
您可以使用的工具很少:
您的问题的轻量级解决方案:
您可以使用标签来跨部署获取相同的 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
Run Code Online (Sandbox Code Playgroud)在此之后,我们可以使用一些 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
Run Code Online (Sandbox Code Playgroud)
解释:
获取 pod 名称列表
kubectl get pods -l app=my_app,app_type=server -o namenames
pod/my-app-5b7644f7f6-4hb8s
pod/my-app-5b7644f7f6-72ssz
Run Code Online (Sandbox Code Playgroud)使用ripgrepor sed(rg "pod/" -r "")替换 pod/
head -n 1| 归档时间: |
|
| 查看次数: |
1498 次 |
| 最近记录: |