필요한 형식으로 일부 데이터를 가져오기 위해 jq를 사용하고 있습니다. 포드의 전체 json 데이터가 여기에 붙여져 있습니다.https://pastebin.com/UMJA7xd5. 데이터는 json 형식의 Pod 중 하나입니다. 다음과 같은 정보를 나열할 수 있도록 모든 Pod에서 이를 실행하겠습니다.
podname, 첫 번째 컨테이너 이름, CPU 제한, 메모리 제한, 두 번째 컨테이너 이름, CPU 제한, 메모리 제한 - 컨테이너 수 기준
Pod의 컨테이너 수를 기준으로 합니다. Pod의 컨테이너 수는 무작위이며 일부 Pod에는 1개가 있고 일부 Pod에는 최대 5개의 컨테이너가 있습니다.
이것을 만들 수 있었습니다.
oc get po -o json | jq -j '.items[] | "\(.metadata.name), \(.spec.containers[] | .name +" , "+ .resources.limits.cpu +" , "+ .resources.limits.memory)\n" '
이것은 나에게 다음과 같은 결과를 제공합니다:-
kafka-0, kafka , 16 , 16Gi
kafka-0, filebeat , 2 , 256Mi
위의 예제 데이터에서는 두 개의 컨테이너에 대한 데이터가 단일 Pod kafka-0에 대해 인쇄됩니다. kafka 포드에는 두 개의 컨테이너가 있으므로 두 개의 라인을 생성합니다.
예상되는 결과:
kafka-0, kafka , 16 , 16Gi, filebeat , 2 , 256Mi
저는 jq를 처음 접했고 많은 옵션을 시도했지만 성공하지 못했습니다. 아마도 제가 뭔가 잘못하고 있는 것 같습니다. 이 값은 컨테이너마다 다르므로 행을 조인할 수 없습니다.
답변1
$ cat test.jq
# Iterate over "items"
.items[] |
# Place each extracted element into an array
[
# Select elements
.metadata.name,
# Use parentheses to group
( .spec.containers[] | .name, .resources.limits["cpu","memory"] )
]
# Join the array together
| join(", ")
$ <input jq -r -f test.jq
kafka-0, kafka, 16, 16Gi, filebeat, 2, 256Mi