[logging] Kubernetes 복제 컨트롤러의 모든 포드에서 로그를 가져 오려면 어떻게해야합니까?

실행 kubectl logs하면 Kubernetes 컨테이너 하나의 stderr / stdout이 표시됩니다.

가급적 특정 복제 컨트롤러에 의해 생성 된 포드 집합의 집계 된 stderr / stdout을 얻으려면 어떻게해야합니까?



답변

레이블을 사용할 수 있습니다.

kubectl logs -l app=elasticsearch


답변

kubetail이것을 가능하게 하는 작은 bash 스크립트를 만들었습니다 . 예를 들어 “app1″이라는 포드의 모든 로그를 테일링하려면 다음을 수행 할 수 있습니다.

kubetail app1

여기 에서 스크립트를 찾을 수 있습니다 .


답변

Adrian Ng가 제안한대로 레이블을 사용하여 여러 컨테이너에서 로그를 가져올 수 있습니다.

kubectl logs --selector app=yourappname

컨테이너가 여러 개인 포드가있는 경우 위 명령이 실패하고 컨테이너 이름을 지정해야합니다.

kubectl logs --selector app=yourappname --container yourcontainername

참고 : 사용할 수있는 레이블을 확인하려면 다음 명령을 사용하여 모두 나열합니다.

kubectl get pod <one of your pods> -o template --template='{{.metadata.labels}}'

… 출력은 다음과 같이 보일 것입니다.

map [app : yourappname controller-revision-hash : 598302898 pod-template-generation : 1]

일부 라벨은 다른 포드에서 공유 할 수 없습니다. “앱”을 선택하는 것이 가장 쉬운 것 같습니다.


답변

추가 -f하면 이전 답변을 바탕으로 로그를 추적 할 수 있습니다.

kubectl logs -f deployment/app


답변

이전에 제공된 솔루션은 최적이 아닙니다. kubernetes 팀 자체는 얼마 전에 stern이라는 솔루션을 제공했습니다.

stern app1

또한 정규식과 일치하며 기본적으로 tail 및 -f (follow)를 수행합니다. 좋은 이점은 로그를 생성 한 포드도 표시된다는 것입니다.

app1-12381266dad-3233c foobar log
app1-99348234asd-959cc foobar log2

Linux 용 go-binary를 가져 오거나 OSX 용 brew를 통해 설치합니다.

https://kubernetes.io/blog/2016/10/tail-kubernetes-with-stern/

https://github.com/wercker/stern


답변

이 간단한 스크립트를 사용하여 배포 포드에서 로그를 가져옵니다.

#!/usr/bin/env bash

DEPLOYMENT=$1

for p in $(kubectl get pods | grep ^${DEPLOYMENT}- | cut -f 1 -d ' '); do
    echo ---------------------------
    echo $p
    echo ---------------------------
    kubectl logs $p
done

대본의 요점

사용법 : log_deployment.sh “deployment-name”.

그러면 스크립트는 해당 “배포 이름”으로 시작하는 모든 포드의 로그를 표시합니다.


답변

한 가지 옵션은 https://kubernetes.io/docs/user-guide/logging/elasticsearch/에 설명 된대로 Fluentd / ElasticSearch를 통해 클러스터 로깅을 설정하는 것 입니다. 로그가 ES에 있으면 Kibana에서 필터를 적용하여 특정 컨테이너의 로그를 쉽게 볼 수 있습니다.