gpt4 book ai didi

shell - openshift 命令以编程方式/脚本捕获 POD 名称

转载 作者:行者123 更新时间:2023-12-02 16:42:05 26 4
gpt4 key购买 nike

我的开放类次中有 pod,并且想处理多个开放类次应用程序。让我们像下面这样说

sh-4.2$ oc 获取 pod

NAME                                  READY     STATUS      RESTARTS   AGE
jenkins-7fb689fc66-fs2xb 1/1 Running 0 4d
jenkins-disk-check-1587834000 0/1 Completed 0 21h

NAME READY STATUS RESTARTS AGE
jenkins-7fb689fc66-gsz9j 0/1 Running 735 9d
jenkins-disk-check-1587834000

NAME READY STATUS RESTARTS AGE
jenkins-9euygc66-gsz9j 0/1 Running 735 9d

我试过下面的命令

oc 获取 pod

export POD=$(oc get pods | awk '{print $1}' | grep jenkins*)

我想使用脚本找到以数字“jenkins-7fb689fc66-fs2xb”、jenkins-9euygc66-gsz9j 等开头的 pod,并且需要忽略磁盘检查 pod。如果我捕捉到上述 pod 并且需要执行终端并以编程方式运行一些 shell 命令。有人可以帮我解决这个问题吗?

最佳答案

kubectl get(以及扩展名 oc get)是一个非常通用的工具。不幸的是,在网上浏览了一段时间后,如果不依赖 awkgrep 等外部工具,您将肯定无法执行 Regex。 (我知道这不是正是你在问什么,但我想我至少会尝试看看它是否可能。

话虽如此,在您甚至不得不引入外部工具之前,您可以依靠一些技巧来过滤您的 oc get 输出(加分,因为这种过滤发生在服务器之前它甚至会影响您的本地工具)。

首先建议运行 oc get pods --show-labels,因为如果您需要的 pod 被正确标记,您可以使用标签选择器来获取你想要的 pod ,例如:

oc get pods --selector name=jenkins
oc get pods --selector <label_key>=<label_value>

其次,如果您只关心Running pod(因为disk-check pod 看起来它们已经已完成),您可以使用字段选择器,例如:

oc get pods --field-selector status.phase=Running
oc get pods --field-selector <json_path>=<json_value>

最后,如果您需要一个特定值,您可以通过指定自定义列将该值拉入 CLI,然后 grep 根据您关心的值,例如:

oc get pods -o custom-columns=NAME:.metadata.name,TYPES:.status.conditions[*].type | grep "Ready"

最好的事情是,如果您依赖标签选择器和/或字段选择器,则过滤发生在服务器端以减少最终进入您最终自定义列的数据,从而使一切变得更加高效。


对于您的特定用例,似乎仅使用 --field-selector 就足够了,因为 disk-check pod 已经Completed。因此,无需进一步了解如何确切地构建 Jenkins pod 的 JSON,这对您来说应该足够好了:

oc get pods --field-selector status.phase=Running

关于shell - openshift 命令以编程方式/脚本捕获 POD 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61442341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com