通过kubernetes部署创建Pod名称时,为什么在其名称后面附加5个随机字母数字字符?

时间:2019-02-02 01:20:24

标签: kubernetes

为什么在通过kubernetes部署创建Pod名称时,其名称后面会附加5个随机字母数字字符?是否有可能摆脱它们,使豆荚名称不变?我经常删除和创建部署,并且希望Pod名称不要更改。

更新:我想使用相同的名称,因为我一直在删除/重新创建相同的部署,如果名称不变,那么我可以快速重用旧命令以执行到/查看容器的日志。

3 个答案:

答案 0 :(得分:3)

这是部署的工作方式,每次吊舱死亡时,ReplcaSet都会使用不同的名称创建吊舱以匹配所需的状态,并在吊舱名称上附加随机数以为其赋予唯一的名称。

部署对象无法实现任何目标,因为它们是针对无状态应用程序的。当您想保留应用程序的状态(名称)时,使用StatefulSet当然可以实现。

因此,如果您使用StatefulSet对象管理副本,则将使用特定的名称约定(例如e)创建每个Pod。 G。 POD_NAME-1,POD_NAME-2等i。 e。索引将附加到窗格名称。同样,当吊舱死亡时,将使用相同的名称创建新吊舱。

您想要实现的是StatefulSet的理想用例。去吧。

答案 1 :(得分:2)

豆荚名称中包含随机字母数字的原因:

创建deployment时,它会不直接创建广告连播(以匹配副本数)。

  • 它将创建一个复制包(名称= deployname_name + 10位字母数字)。但是为什么额外的字母数字?当我们进行升级部署时,会使用新的字母数字创建 new 副本集,并保留旧版本。此旧副本集用于回滚
  • 已创建的副本集将创建 pod (名称=副本集名称+ 5位字母数字)。但是为什么额外的字母数字?我们不能有两个名称相同的豆荚。

如果您的用例是频繁使用旧命令,那么选择Statefulset 不是一个好的解决方案。状态集是heavy weight(有序部署,有序终止,唯一的网络名称),它们是专门设计用来在重新启动时保留状态的(结合持久卷)。

您可以使用的工具很少:

  1. stern
  2. kube-fzf

轻巧的解决方案:

  1. 您可以使用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

说明:

  1. 获取广告连播名称列表

    kubectl get pods -l app=my_app,app_type=server -o namenames
    pod/my-app-5b7644f7f6-4hb8s
    pod/my-app-5b7644f7f6-72ssz
    
  2. 使用ripgrepsed(rg“ pod /” -r“”)替换pod /

  3. 使用head -n 1只能拿一个吊舱
  4. 使用awk打印exec / see_log命令
  5. 通过管道将其执行以执行

答案 2 :(得分:1)

如果从部署对象kind:Deployment部署Pod,则部署控制器会将唯一名称附加到Pod中,该名称是特定部署的一部分。 这就是部署控制器查找各个部署的所有相关吊舱的方式。滚动升级,回滚功能需要此