소개
이 랩에서는 Kubernetes logs 명령어를 사용하여 Kubernetes 클러스터에서 실행 중인 Pod 의 로그를 보는 방법을 배우게 됩니다. 간단한 예시부터 시작하여 점차 더 복잡한 시나리오로 진행할 것입니다.
Minikube 클러스터 시작
리소스를 생성하기 전에 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube 는 로컬 머신에서 실행되는 가벼운 Kubernetes 환경입니다.
작업 디렉토리로 이동:
터미널을 열고 기본 프로젝트 폴더로 이동합니다.
cd /home/labex/projectMinikube 시작:
Kubernetes 클러스터를 초기화하기 위해 Minikube 를 시작합니다.
minikube start- 이 명령어는 로컬 머신에 단일 노드 Kubernetes 클러스터를 설정합니다.
- Minikube 는 시스템 성능에 따라 시작하는 데 몇 분 정도 걸릴 수 있습니다.
Minikube 가 실행 중인지 확인:
Minikube 클러스터의 상태를 확인합니다.
minikube statuskubelet및apiserver와 같은 구성 요소가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 에서 실행 중인 컨테이너의 로그를 보는 방법을 배우게 됩니다.
먼저 하나의 레플리카와 Nginx 컨테이너가 있는 배포를 생성합니다.
kubectl create deployment nginx --image=nginx --replicas=1Pod 가 준비될 때까지 기다립니다.
kubectl wait --for=condition=Ready pod -l app=nginxkubectl logs명령을 사용하여 Nginx 컨테이너의 로그를 봅니다.kubectl logs POD_NAME
POD_NAME을 1 단계에서 생성된 Pod 의 이름으로 바꾸십시오. POD_NAME은 kubectl get pod -l app=nginx 명령으로 얻을 수 있습니다.
Pod 내 특정 컨테이너의 로그 확인
이 단계에서는 Pod 에서 실행 중인 특정 컨테이너의 로그를 보는 방법을 배우게 됩니다.
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" EOFPod 가 준비될 때까지 기다립니다.
kubectl wait --for=condition=Ready pod nginx-busyboxkubectl logs명령을 사용하여 BusyBox 컨테이너의 로그를 봅니다.kubectl logs nginx-busybox -c busybox
실시간 로그 확인 (Tail)
이 단계에서는 로그가 생성되는 대로 실시간으로 로그를 따라가는 방법을 배우게 됩니다.
-f옵션과 함께kubectl logs명령을 사용하여 실시간으로 로그를 따라갑니다.kubectl logs -f nginx-busybox새 터미널을 열고 Nginx 컨테이너에서 셸을 생성합니다.
kubectl exec -it nginx-busybox -c nginx -- /bin/sh컨테이너 내부에서 명령을 실행하여 일부 로그를 생성합니다.
curl 127.0.0.1로그를 따라가고 있는 첫 번째 터미널로 다시 전환하여 새 로그 항목이 표시되는지 확인합니다.
여러 컨테이너의 로그 확인
이 단계에서는 Pod 에서 실행 중인 여러 컨테이너의 로그를 보는 방법을 배우게 됩니다.
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 EOFPod 가 준비될 때까지 기다립니다.
kubectl wait --for=condition=Ready pod nginx-fluentdkubectl logs명령을 사용하여 두 컨테이너의 로그를 봅니다.kubectl logs nginx-fluentd -c nginx kubectl logs nginx-fluentd -c fluentd
요약
축하합니다. Kubernetes 로그 명령 실습을 성공적으로 완료했습니다! 이 실습에서는 kubectl logs 명령을 사용하여 Pod 에서 실행 중인 컨테이너의 로그를 보는 방법을 배웠습니다. 또한 특정 컨테이너 및 여러 컨테이너의 로그를 보고, 실시간으로 로그를 따라가고, 컨테이너 내에서 로그를 생성하는 방법도 배웠습니다. 이러한 기술은 Kubernetes 클러스터에서 문제를 해결하는 데 필수적입니다.


