如何通过 kubectl 获取环境中所有 pod 名称,需要 cut 掉 pod name 中的随机字符串 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
css3
V2EX    程序员

如何通过 kubectl 获取环境中所有 pod 名称,需要 cut 掉 pod name 中的随机字符串

  •  
  •   css3 2021-03-01 20:01:10 +08:00 2805 次点击
    这是一个创建于 1693 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想拿到那些固定的 pod 名,排除掉 pod name 里边的随机串, 环境上的 pod name 有的没有随机串,有的有 1 个随机串,而有的有 2 个随机串

    # kubect get pod --all-namespaces kube-system mysql-pro-537tp 1/1 Running 2 6d6h kube-system zookeeper-75469dcbcc-5f6g0 1/1 Running 0 3d22h produce prometheus-pro-0 3/3 Running 0 3d22h default operator-8bb5bfdc64 1/1 Running 0 3d22h 

    希望通过命令能够输出:

    mysql-pro zookeeper prometheus-pro-0 operator 
    21 条回复    2021-12-16 11:17:44 +08:00
    joApioVVx4M4X6Rf
        1
    joApioVVx4M4X6Rf  
       2021-03-01 20:08:23 +08:00
    数字开头的 cat 掉
    NaVient
        2
    NaVient  
       2021-03-01 20:10:15 +08:00
    kubectl get deploy/rs
    Aliencn
        3
    Aliencn  
       2021-03-01 20:11:04 +08:00
    kubectl get deployment -A
    css3
        4
    css3  
    OP
       2021-03-01 20:12:52 +08:00
    @NaVient pod 数和 deploy 数量都不相等
    scnace
        5
    scnace  
       2021-03-01 20:23:57 +08:00 via Android
    加 label 或者 annotation,然后从里面拿(逃
    int64ago
        6
    int64ago  
       2021-03-01 21:22:17 +08:00
    其实 prometheus-pro-0 的 0 本质和 mysql-pro-537tp 里的 537tp 并没啥区别

    分别是 statefulSets 和 deployments 生成的,所以它们应该是平行的概念,你为啥输出要却区别对待了呢?

    ---

    单看你需求,我感觉你需要的是 workloads 的 name,但是你的描述本身很奇怪
    momocraft
        7
    momocraft  
       2021-03-01 21:25:06 +08:00
    你知道这些随机串是哪来的吗 从来源下手可能简单点
    css3
        8
    css3  
    OP
       2021-03-01 21:51:38 +08:00
    @int64ago 不一样,statefulSets 和 deployments 生成的分别是 10 位和 5 位的随机串,prometheus-pro-0 是 pod name 就叫这个,未加 statefulSets 和 deployments
    int64ago
        9
    int64ago  
       2021-03-01 22:08:48 +08:00   1
    @css3 #8 你再看看 StatefulSet 吧

    https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#ordinal-index

    For a StatefulSet with N replicas, each Pod in the StatefulSet will be assigned an integer ordinal, from 0 up through N-1, that is unique over the Set.
    int64ago
        10
    int64ago  
       2021-03-01 22:11:27 +08:00
    kubectl get statefulsets -A | grep prometheus

    你会看到的
    kaneg
        11
    kaneg  
       2021-03-01 22:41:44 +08:00 via iPhone
    int64ago 说的是对的,statefulset 生成的 pod 是 service 名字-递增的数字
    Shakeitin
        12
    Shakeitin  
       2021-03-01 23:00:48 +08:00
    pattern=$(echo ${$(kubectl get deploy,ds,sts -oname |awk -F'/' '{printf "%s|", $2}')%?})
    for i in $(echo $(kubectl get po -o name |grep -oE $pattern) $(kubectl get po -o name |awk -F'/' '{print $2}' |grep -vE $pattern));do echo $i;done

    打印所有 pod 名称,去掉了名称中由 deploy 、ds 、sts 产生的附加部分
    希望保留 sts 附加的序号的话,第一句中去掉 ",sts"
    css3
        13
    css3  
    OP
       2021-03-02 10:02:58 +08:00
    @kaneg 谢谢老哥指点,我学习一下
    @Shakeitin 老哥,好像报错呀-bash: ${$(kubectl get deploy,ds,sts -oname |awk -F'/' '{printf "%s|", $2}')%?}: bad substitution
    lework1234
        14
    lework1234  
       2021-03-02 11:50:26 +08:00
    使用 jq
    ```bash
    kubectl get pods -A -o json | jq -r '.items[] | if .metadata.ownerReferences[0].kind == "ReplicaSet" then .metadata.name[:-16] | sub("-$"; "") elif .metadata.ownerReferences[0].kind == "DaemonSet" or .metadata.ownerReferences[0].kind == "Job" then .metadata.name[:-6] else .metadata.name end' | sort | uniq
    ```
    Shakeitin
        15
    Shakeitin  
       2021-03-02 15:28:45 +08:00   1
    pattern=$(kubectl get deploy,ds,sts -oname |awk -F'/' '{printf "%s|", $2}' |sed s'/.$//')
    for i in $(echo $(kubectl get po -o name |grep -oE $pattern) $(kubectl get po -o name |awk -F'/' '{print $2}' |grep -vE $pattern));do echo $i;done

    @css3
    之前在 zsh 上跑的。。
    css3
        16
    css3  
    OP
       2021-03-02 16:11:23 +08:00
    @Shakeitin 老哥,稳的一批啊,感谢
    css3
        17
    css3  
    OP
       2021-03-02 16:18:47 +08:00
    @Shakeitin 我可能得采用另外的方案了,这玩意儿去掉后,发现一堆一堆的重复
    Shakeitin
        18
    Shakeitin  
       2021-03-02 19:56:45 +08:00
    @css3 #17 deploy 、ds 、sts 、job 、cronjob 这些“高阶对象” 会自动创建 pod,所以会在 pod 后加字符串作为标识

    我那个命令是在 pod 上删去了多余的字符串,如果本来某个 deploy 创建了多个 pod,在删去那些标识之后自然会重复。。

    第二行命令后加个 "| uniq" 不就去重了么。。
    css3
        19
    css3  
    OP
       2021-03-02 23:20:50 +08:00 via iPhone
    @Shakeitin 好的,谢谢老哥,我试试
    css3
        20
    css3  
    OP
       2021-03-02 23:21:13 +08:00 via iPhone
    @lework1234 感谢老哥
    xabcstack
        21
    xabcstack  
       2021-12-16 11:17:44 +08:00
    可以看看 https://ki.xabc.io 的实现,里面根据不同的资源对象,截取了不同的 后缀
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     800 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 21:06 PVG 05:06 LAX 14:06 JFK 17:06
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86