IT이야기

kubernetes 포드의 모든 컨테이너 깔끔하게 나열하는 방법

cyworld 2021. 4. 1. 21:47
반응형

kubernetes 포드의 모든 컨테이너를 어떻게 깔끔하게 나열합니까?


테스트를 실행 한 후 로그를 수집하는 스크립트의 포드에있는 모든 컨테이너를 나열하려고합니다. kubectl describe pods -l k8s-app=kube-dns많은 정보를 반환하지만 다음과 같은 반환을 찾고 있습니다.

etcd
kube2sky
skydns

설명 출력을 형식화하는 간단한 방법이 보이지 않습니다. 다른 명령이 있습니까? (그리고 최악의 경우는 항상 describe의 출력을 구문 분석하는 것입니다).


( ) 플래그 get와 함께 지원되는 출력 템플릿 중 하나를 사용 하고 선택할 수 있습니다 .--output-o

가지고 jsonpath예를 들어, kubectl get pods -l k8s-app=kube-dns -o jsonpath={.items[*].spec.containers[*].name}당신을 제공합니다 etcd kube2sky skydns.

기타 지원되는 출력 출력 템플릿은 go-template, go-template-file, jsonpath-file입니다. jsonpath 템플릿을 사용하는 방법 http://kubernetes.io/docs/user-guide/jsonpath/참조하십시오 . go 템플릿 사용 방법 https://golang.org/pkg/text/template/#pkg-overview참조 하세요 .

업데이트 : 컨테이너 이미지를 나열하는 다른 예제 명령은이 문서를 확인하십시오. https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/


대답

kubectl get pods POD_NAME_HERE -o jsonpath='{.spec.containers[*].name}'

설명

포드를 나타내는 JSON 개체를 가져옵니다. 그런 다음 kubectl의 JSONpath 를 사용하여 포드에서 각 컨테이너의 이름을 추출합니다.


단일 포드에 대한 JSONpath 쿼리 생성을 방지하는 빠른 해킹 :

$ kubectl logs mypod-123
a container name must be specified for pod mypod-123, choose one of: [etcd kubesky skydns]

각 Pod의 컨테이너에 대한 명확한 출력을 원하는 경우

kubectl get po -l k8s-app=kube-dns \
   -o=custom-columns=NAME:.metadata.name,CONTAINERS:.spec.containers[*].name

몇 가지 아이디어를 다음과 같이 정리했습니다.

간단한 선 :

kubectl get po -o jsonpath='{range .items[*]}{"pod: "}{.metadata.name}{"\n"}{range .spec.containers[*]}{"\tname: "}{.name}{"\n\timage: "}{.image}{"\n"}{end}'

분할 (가독성을 위해) :

kubectl get po -o jsonpath='
    {range .items[*]}
    {"pod: "}
    {.metadata.name}
    {"\n"}{range .spec.containers[*]}
    {"\tname: "}
    {.name}
    {"\n\timage: "}
    {.image}
    {"\n"}
    {end}'

json출력 형식으로 사용 kubectl get하면 pod. 이와 json같은 프로세서를 사용하면 jq관심있는 특정 부품을 쉽게 선택하거나 필터링 할 수 있습니다.

포드의 컨테이너를 나열하려면 jq쿼리는 다음과 같습니다.

kubectl get --all-namespaces --selector k8s-app=kube-dns --output json pods \
  | jq --raw-output '.items[].spec.containers[].name'

특정 컨테이너에 대한 모든 세부 정보를 보려면 다음과 같이 시도하십시오.

kubectl get --all-namespaces --selector k8s-app=kube-dns --output json pods \
  | jq '.items[].spec.containers[] | select(.name=="etcd")'

나는 이것을 사용하여 포드에 이미지 버전을 표시합니다.

kubectl get pods  -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{end}{end}' && printf '\n'

그것은에서 스크립트의 단지 작은 수정의 여기 (예 : 서비스 포드 않고, 각 행의 마지막에 새로운 행에 다음 콘솔 명령을 제거 쉼표를 시작하는 새로운 라인을 추가하고 단지 내 포드를 목록으로 --all-namespaces옵션이 제거됩니다).

참조 URL : https://stackoverflow.com/questions/33924198/how-do-you-cleanly-list-all-the-containers-in-a-kubernetes-pod

반응형