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 命令。有人可以帮我解决这个问题吗?
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)