863 words
4 minutes
[Kubernetes]03. Troubleshooting
2025-03-21
2026-01-09

Overview#

1. k8s Troubleshooting#

k8s 작업 순서#

  1. yaml -> apply로 object 생성
  2. get으로 object 확인
  3. describe로 object 상세 확인
  4. logs로 pod log 확인
  5. events로 object 이벤트 확인

apply : kubernetes object 생성 및 업데이트 get : kubernetes object 목록 조회 describe : kubernetes object 상세 조회 log : kubernetes object 로그 조회 events : kubernetes object 이벤트 조회

yaml -> apply로 object 생성#

Terminal window
kubectl apply -f pod.yaml

pod.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: busybox
labels:
app: busybox
spec:
replicas: 1
selector:
matchLabels:
app: busybox
template:
metadata:
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox
command: ["sh", "-c", "echo Hello Kubernetes! && sleep 3600"]

에러 생성

  • 임의의 디스크 관련 에러를 발생시키기 위해 30G 파일 생성
Terminal window
fallocate -l 30G 30G.file # 특정 용량의 파일 생성

get으로 object 확인#

  • kubectl get은 특정 namespace의 결과만 보여줌
Terminal window
kubectl get pod
kubectl get pod --A # 모든 namespace의 pod 확인

describe로 object 상세 확인#

Terminal window
kubectl describe pod <pod-name>

logs로 pod log 확인#

Terminal window
kubectl logs <pod-name>
kubectl logs -f <pod-name> # 실시간 로그 확인

events로 object 이벤트 확인#

  • 특정 어플리케이션 수준이 아닌 클러스터 수준의 이벤트를 확인
Terminal window
kubectl get events
kubectl get events --sort-by='.metadata.creationTimestamp' # 생성시간 순으로 정렬
kubectl get events --sort-by='.metadata.creationTimestamp' --field-selector involvedObject.name=<pod-name> # 특정 pod의 이벤트 확인
kubectl get events -n kube-system # kube-system namespace의 이벤트 확인

Key Takeaway

  • k8s에서의 트러블 슈팅 절차는 object 생성, 확인, 상세 확인, 로그 확인, 이벤트 확인이다.
  • k8s에서는 자원이 부족한 노드가 발생하면 자동으로 해당 노드의 pod를 여유있는 노드로 이동시킨다.

2. Helm#


Concept

  • Helm : k8s의 패키지 관리자. k8s의 yaml 파일을 패키지화하여 배포 및 관리를 쉽게 할 수 있게 해준다. Helm Chart, Helm Repository, Helm Template으로 구성된다.
  • Helm Chart : k8s 어플리케이션 설치에 사용되는 네트워크, 스토리지, 보안과 관련된 여러 k8s 리소스를 포함하는 패키지
  • Helm Repository : Helm Chart를 저장하는 저장소
  • Helm Template : Helm Chart를 템플릿화하여 사용자가 원하는 값으로 쉽게 변경할 수 있게 해준다.

Helm Chart#

Helm Repository#

Terminal window
# repository list 확인
helm repo list
# repository 내 설치 가능한 app list 확인
helm search repo bitnami

Helm Template#

  • 여러 파일에서 공통적으로 쓰이는 변수를 values.yaml에 정의하여 사용
  • values.yaml에 정의된 변수를 사용하기 위해 {{ .Values.<변수명> }} 형태로 사용
  • values.yaml에 정의된 변수는 개별 리소스의 매니페스트 파일에 적용됨

Helm 을 이욯한 어플리케이션 관리#

Terminal window
# add repository
helm repo add bitnami https://charts.bitnami.com/bitnami
# pull
helm pull bitnami/nginx
# install
helm install my-nginx bitnami/nginx
# ls
helm ls
# manifest 확인
# 현재 실행중인 리소스의 전체 yaml 파일 목록 및 상세설정 확인
helm get manifest my-nginx
# 변수 등을 수정후 재배포
helm upgrade

Request/Limit 설정#


Concept

  • Request : k8s에서 Request는 처음 노드에 자원을 할당할 때 Request 이상의 여유자원이 있는 노드에 pod를 배치한다. pod는 Request에서 할당한 자원만큼 사용이 가능하도록 보장받음. 기본적으로 자원의 하한 한계를 설정
  • Limit : pod가 사용할 수 있는 최대 자원량을 설정. pod가 Limit을 초과하면 pod는 종료됨. 기본적으로 자원의 상한 한계를 설정

Reference#

  • 24단계 실습으로 정복하는 쿠버네티스 5, 6장
[Kubernetes]03. Troubleshooting
https://yjinheon.netlify.app/posts/05system/k8s/k8s_03_troubleshooting/
Author
Datamind
Published at
2025-03-21
License
CC BY-NC-SA 4.0