Kubernetes 로그 명령어

KubernetesBeginner
지금 연습하기

소개

이 랩에서는 Kubernetes logs 명령어를 사용하여 Kubernetes 클러스터에서 실행 중인 Pod 의 로그를 보는 방법을 배우게 됩니다. 간단한 예시부터 시작하여 점차 더 복잡한 시나리오로 진행할 것입니다.

Minikube 클러스터 시작

리소스를 생성하기 전에 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube 는 로컬 머신에서 실행되는 가벼운 Kubernetes 환경입니다.

  1. 작업 디렉토리로 이동:

    터미널을 열고 기본 프로젝트 폴더로 이동합니다.

    cd /home/labex/project
    
  2. Minikube 시작:

    Kubernetes 클러스터를 초기화하기 위해 Minikube 를 시작합니다.

    minikube start
    
    • 이 명령어는 로컬 머신에 단일 노드 Kubernetes 클러스터를 설정합니다.
    • Minikube 는 시스템 성능에 따라 시작하는 데 몇 분 정도 걸릴 수 있습니다.
  3. Minikube 가 실행 중인지 확인:

    Minikube 클러스터의 상태를 확인합니다.

    minikube status
    
    • kubeletapiserver와 같은 구성 요소가 Running으로 나열되어 있는지 확인합니다.
    • 클러스터가 실행 중이지 않으면 minikube start를 다시 실행합니다.

Minikube 를 시작하는 데 문제가 발생하면 필요에 따라 minikube delete를 사용하여 환경을 재설정하십시오.

kubectl logs 명령어 탐색

kubectl logs 명령어는 Pod 또는 지정된 리소스 내 컨테이너의 로그를 출력하는 데 사용됩니다. 스냅샷 로그, 스트리밍, 필터링 및 효율적인 로그 관리를 위한 다양한 기타 옵션을 지원합니다.

kubectl logs에 사용 가능한 옵션을 보려면 다음 명령을 실행하십시오.

kubectl logs -h

다음 출력을 볼 수 있습니다.

Print the logs for a container in a pod or specified resource. If the pod has only one container, the container name is optional.

Examples:
  ## Return snapshot logs from pod nginx with only one container
  kubectl logs nginx

  ## Return snapshot logs from pod nginx with multi containers
  kubectl logs nginx --all-containers=true

  ## Return snapshot logs from all containers in pods defined by label app=nginx
  kubectl logs -l app=nginx --all-containers=true

  ## Return snapshot of previous terminated ruby container logs from pod web-1
  kubectl logs -p -c ruby web-1

  ## Begin streaming the logs of the ruby container in pod web-1
  kubectl logs -f -c ruby web-1

  ## Begin streaming the logs from all containers in pods defined by label app=nginx
  kubectl logs -f -l app=nginx --all-containers=true

  ## Display only the most recent 20 lines of output in pod nginx
  kubectl logs --tail=20 nginx

  ## Show all logs from pod nginx written in the last hour
  kubectl logs --since=1h nginx

  ## Show logs from a kubelet with an expired serving certificate
  kubectl logs --insecure-skip-tls-verify-backend nginx

  ## Return snapshot logs from first container of a job named hello
  kubectl logs job/hello

  ## Return snapshot logs from container nginx-1 of a deployment named nginx
  kubectl logs deployment/nginx -c nginx-1

컨테이너 로그 확인 방법

이 단계에서는 Pod 에서 실행 중인 컨테이너의 로그를 보는 방법을 배우게 됩니다.

  1. 먼저 하나의 레플리카와 Nginx 컨테이너가 있는 배포를 생성합니다.

    kubectl create deployment nginx --image=nginx --replicas=1
    
  2. Pod 가 준비될 때까지 기다립니다.

    kubectl wait --for=condition=Ready pod -l app=nginx
    
  3. kubectl logs 명령을 사용하여 Nginx 컨테이너의 로그를 봅니다.

    kubectl logs POD_NAME
    

POD_NAME을 1 단계에서 생성된 Pod 의 이름으로 바꾸십시오. POD_NAMEkubectl get pod -l app=nginx 명령으로 얻을 수 있습니다.

Pod 내 특정 컨테이너의 로그 확인

이 단계에서는 Pod 에서 실행 중인 특정 컨테이너의 로그를 보는 방법을 배우게 됩니다.

  1. Nginx 와 BusyBox 두 개의 컨테이너가 있는 Pod 를 생성합니다.

    cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-busybox
    spec:
      containers:
      - name: nginx
        image: nginx
      - name: busybox
        image: busybox
        command:
          - sleep
          - "3600"
    EOF
    
  2. Pod 가 준비될 때까지 기다립니다.

    kubectl wait --for=condition=Ready pod nginx-busybox
    
  3. kubectl logs 명령을 사용하여 BusyBox 컨테이너의 로그를 봅니다.

    kubectl logs nginx-busybox -c busybox
    

실시간 로그 확인 (Tail)

이 단계에서는 로그가 생성되는 대로 실시간으로 로그를 따라가는 방법을 배우게 됩니다.

  1. -f 옵션과 함께 kubectl logs 명령을 사용하여 실시간으로 로그를 따라갑니다.

    kubectl logs -f nginx-busybox
    
  2. 새 터미널을 열고 Nginx 컨테이너에서 셸을 생성합니다.

    kubectl exec -it nginx-busybox -c nginx -- /bin/sh
    
  3. 컨테이너 내부에서 명령을 실행하여 일부 로그를 생성합니다.

    curl 127.0.0.1
    
  4. 로그를 따라가고 있는 첫 번째 터미널로 다시 전환하여 새 로그 항목이 표시되는지 확인합니다.

여러 컨테이너의 로그 확인

이 단계에서는 Pod 에서 실행 중인 여러 컨테이너의 로그를 보는 방법을 배우게 됩니다.

  1. Nginx 와 Fluentd 두 개의 컨테이너가 있는 Pod 를 생성합니다.

    cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-fluentd
    spec:
      containers:
      - name: nginx
        image: nginx
      - name: fluentd
        image: fluentd
    EOF
    
  2. Pod 가 준비될 때까지 기다립니다.

    kubectl wait --for=condition=Ready pod nginx-fluentd
    
  3. kubectl logs 명령을 사용하여 두 컨테이너의 로그를 봅니다.

    kubectl logs nginx-fluentd -c nginx
    kubectl logs nginx-fluentd -c fluentd
    

요약

축하합니다. Kubernetes 로그 명령 실습을 성공적으로 완료했습니다! 이 실습에서는 kubectl logs 명령을 사용하여 Pod 에서 실행 중인 컨테이너의 로그를 보는 방법을 배웠습니다. 또한 특정 컨테이너 및 여러 컨테이너의 로그를 보고, 실시간으로 로그를 따라가고, 컨테이너 내에서 로그를 생성하는 방법도 배웠습니다. 이러한 기술은 Kubernetes 클러스터에서 문제를 해결하는 데 필수적입니다.