테스트를 실행 한 후 로그를 수집하는 스크립트의 포드에있는 모든 컨테이너를 나열하려고합니다. 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 kube-dns-q2oh6 -o jsonpath={.spec.containers[*].name}
단일 포드에 대한 JSONpath 쿼리를 생성하지 않도록하는 빠른 해킹 :
$ kubectl logs mypod-123
a container name must be specified for pod mypod-123, choose one of: [etcd kubesky skydns]
containers
하고init containers
init containers
에서 이런 식으로 보지 않는다 :(
몇 가지 아이디어를 다음과 같이 정리했습니다.
간단한 선 :
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}'
less
로 연결하십시오 vi
. COMMAND | less
또는vi<(COMMAND)
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
옵션이 제거됩니다).
특정 포드에있는 모든 컨테이너의 구성 맵과 함께 자세한 정보를 보려면 다음 명령어를 사용하세요.
kubectl describe pod/<pod name> -n <namespace name>
kubectl get pods -o json
.