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

Kan*_*nod 2 shell awk grep openshift

我的开放轮班中有 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
Run Code Online (Sandbox Code Playgroud)

我尝试过使用以下命令

oc 获取 pod

export POD=$(oc get pods | awk '{print $1}' | grep jenkins*)
Run Code Online (Sandbox Code Playgroud)

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

Wil*_*don 5

kubectl get(并且通过扩展oc get)是一个非常通用的工具。不幸的是,在网上查了一段时间后,如果不依赖像或 这样的外部工具,你肯定无法执行 Regex 。(我知道这并不完全是你要问的,但我想我至少会尝试看看是否可能。awkgrep

oc get话虽如此,在您甚至必须引入外部工具之前,您可以依靠一些技巧来过滤输出(优点是,这种过滤甚至在到达本地工具之前就发生在服务器上)。

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

oc get pods --selector name=jenkins
oc get pods --selector <label_key>=<label_value>
Run Code Online (Sandbox Code Playgroud)

其次,如果您只关心Runningpod(因为disk-checkpod 看起来已经是Completed),您可以使用字段选择器,例如:

oc get pods --field-selector status.phase=Running
oc get pods --field-selector <json_path>=<json_value>
Run Code Online (Sandbox Code Playgroud)

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

oc get pods -o custom-columns=NAME:.metadata.name,TYPES:.status.conditions[*].type | grep "Ready"
Run Code Online (Sandbox Code Playgroud)

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


对于您的特定用例,似乎只需使用 就--field-selector足够了,因为disk-checkpod 已经是Completed. 因此,如果没有关于 Jenkins pod 的 JSON 的具体构建方式的更多信息,这对您来说应该足够了:

oc get pods --field-selector status.phase=Running
Run Code Online (Sandbox Code Playgroud)