V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
css3
V2EX  ›  程序员

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

  •  
  •   css3 · 74 天前 · 1087 次点击
    这是一个创建于 74 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想拿到那些固定的 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
    
    20 条回复    2021-03-02 23:21:13 +08:00
    v2exblog
        1
    v2exblog   74 天前
    数字开头的 cat 掉
    NaVient
        2
    NaVient   74 天前
    kubectl get deploy/rs
    Aliencn
        3
    Aliencn   74 天前
    kubectl get deployment -A
    css3
        4
    css3   74 天前
    @NaVient pod 数和 deploy 数量都不相等
    scnace
        5
    scnace   74 天前 via Android
    加 label 或者 annotation,然后从里面拿(逃
    int64ago
        6
    int64ago   74 天前
    其实 prometheus-pro-0 的 0 本质和 mysql-pro-537tp 里的 537tp 并没啥区别

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

    ---

    单看你需求,我感觉你需要的是 workloads 的 name,但是你的描述本身很奇怪
    momocraft
        7
    momocraft   74 天前
    你知道这些随机串是哪来的吗 从来源下手可能简单点
    css3
        8
    css3   74 天前
    @int64ago 不一样,statefulSets 和 deployments 生成的分别是 10 位和 5 位的随机串,prometheus-pro-0 是 pod name 就叫这个,未加 statefulSets 和 deployments
    int64ago
        9
    int64ago   74 天前   ❤️ 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   74 天前
    kubectl get statefulsets -A | grep prometheus

    你会看到的
    kaneg
        11
    kaneg   74 天前 via iPhone
    int64ago 说的是对的,statefulset 生成的 pod 是 service 名字-递增的数字
    Shakeitin
        12
    Shakeitin   74 天前
    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   74 天前
    @kaneg 谢谢老哥指点,我学习一下
    @Shakeitin 老哥,好像报错呀-bash: ${$(kubectl get deploy,ds,sts -oname |awk -F'/' '{printf "%s|", $2}')%?}: bad substitution
    lework1234
        14
    lework1234   74 天前
    使用 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   74 天前   ❤️ 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   74 天前
    @Shakeitin 老哥,稳的一批啊,感谢
    css3
        17
    css3   74 天前
    @Shakeitin 我可能得采用另外的方案了,这玩意儿去掉后,发现一堆一堆的重复😂
    Shakeitin
        18
    Shakeitin   73 天前
    @css3 #17 deploy 、ds 、sts 、job 、cronjob 这些“高阶对象” 会自动创建 pod,所以会在 pod 后加字符串作为标识

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

    第二行命令后加个 "| uniq" 不就去重了么。。
    css3
        19
    css3   73 天前 via iPhone
    @Shakeitin 好的,谢谢老哥,我试试
    css3
        20
    css3   73 天前 via iPhone
    @lework1234 感谢老哥
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2260 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 08:20 · PVG 16:20 · LAX 01:20 · JFK 04:20
    ♥ Do have faith in what you're doing.