想拿到那些固定的 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
1 joApioVVx4M4X6Rf 2021-03-01 20:08:23 +08:00 数字开头的 cat 掉 |
![]() | 2 NaVient 2021-03-01 20:10:15 +08:00 kubectl get deploy/rs |
![]() | 3 Aliencn 2021-03-01 20:11:04 +08:00 kubectl get deployment -A |
5 scnace 2021-03-01 20:23:57 +08:00 via Android 加 label 或者 annotation,然后从里面拿(逃 |
![]() | 6 int64ago 2021-03-01 21:22:17 +08:00 其实 prometheus-pro-0 的 0 本质和 mysql-pro-537tp 里的 537tp 并没啥区别 分别是 statefulSets 和 deployments 生成的,所以它们应该是平行的概念,你为啥输出要却区别对待了呢? --- 单看你需求,我感觉你需要的是 workloads 的 name,但是你的描述本身很奇怪 |
![]() | 7 momocraft 2021-03-01 21:25:06 +08:00 你知道这些随机串是哪来的吗 从来源下手可能简单点 |
![]() | 8 css3 OP @int64ago 不一样,statefulSets 和 deployments 生成的分别是 10 位和 5 位的随机串,prometheus-pro-0 是 pod name 就叫这个,未加 statefulSets 和 deployments |
![]() | 9 int64ago 2021-03-01 22:08:48 +08:00 ![]() @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. |
![]() | 10 int64ago 2021-03-01 22:11:27 +08:00 kubectl get statefulsets -A | grep prometheus 你会看到的 |
11 kaneg 2021-03-01 22:41:44 +08:00 via iPhone int64ago 说的是对的,statefulset 生成的 pod 是 service 名字-递增的数字 |
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" |
![]() | 13 css3 OP |
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 ``` |
15 Shakeitin 2021-03-02 15:28:45 +08:00 ![]() 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 上跑的。。 |
18 Shakeitin 2021-03-02 19:56:45 +08:00 @css3 #17 deploy 、ds 、sts 、job 、cronjob 这些“高阶对象” 会自动创建 pod,所以会在 pod 后加字符串作为标识 我那个命令是在 pod 上删去了多余的字符串,如果本来某个 deploy 创建了多个 pod,在删去那些标识之后自然会重复。。 第二行命令后加个 "| uniq" 不就去重了么。。 |
![]() | OP @lework1234 感谢老哥 |
![]() | 21 xabcstack 2021-12-16 11:17:44 +08:00 可以看看 https://ki.xabc.io 的实现,里面根据不同的资源对象,截取了不同的 后缀 |