728x90
Kubernetes 클러스터를 운영하다 보면 종종 "ContainerCreating" 상태에 머물러 있는 파드(Pod)를 마주치게 됩니다.
이 상태는 단순해 보이지만, 실제로는 다양한 복잡한 메커니즘과 잠재적 문제들을 내포하고 있습니다.
Kubernetes Pod 생성 워크플로우
1. Pod 생성 요청
Kubernetes 클러스터에 Pod 생성을 요청하면 다음과 같은 순차적인 프로세스가 시작됩니다:
- API Server 요청:
- 사용자나 컨트롤러가 API Server에 Pod 생성 요청
- YAML/JSON 매니페스트 파일을 통해 Pod 스펙 정의
- Scheduler 개입:
- API Server는 스케줄러에게 Pod 배치 요청
- 노드 선택 기준
- 리소스 가용성
- 노드 선택자(nodeSelector)
- 어피니티/안티 어피니티 규칙
- 테인트와 톨러레이션
- 노드 선택 및 바인딩:
- 적절한 노드 결정
- Pod를 특정 노드에 바인딩
- kubelet에 컨테이너 생성 지시
2. ContainerCreating 상세 분석
이미지 다운로드 단계
- Container Runtime Interface(CRI)를 통해 이미지 풀
- 기본 이미지 풀 정책
Always
: 항상 레지스트리에서 새 이미지 다운로드IfNotPresent
: 로컬에 없는 경우만 다운로드Never
: 로컬 이미지만 사용
잠재적 이미지 다운로드 문제
- 네트워크 연결 이슈
- 외부 레지스트리 접근 실패
- 프록시 설정 오류
- 방화벽 제한
- 인증 메커니즘
- 프라이빗 레지스트리 자격증명 문제
- 토큰 만료
- 잘못된 보안 설정
3. 리소스 제약 조건
CPU/Memory 할당
- 노드의 가용 리소스 부족
- ResourceQuota 및 LimitRange 설정
- 컨테이너 리소스 요청/제한 값 검증
디스크 공간
- 이미지 저장을 위한 충분한 디스크 공간 필요
- 오래된/사용하지 않는 이미지 정리 중요
4. 볼륨 및 마운트 복잡성
볼륨 프로비저닝 단계
- PersistentVolumeClaim(PVC) 바인딩
- 스토리지 클래스 동적 프로비저닝
- 호스트 볼륨 마운트
일반적인 볼륨 관련 장애
- 스토리지 백엔드 연결 문제
- 권한 및 fsGroup 설정 오류
- 존재하지 않는 스토리지 클래스
문제 해결 전략
진단 도구 및 명령어
# 상세 Pod 정보 확인
kubectl describe pod <pod-name>
# 이벤트 로그 분석
kubectl get events
# 컨테이너 로그 확인
kubectl logs <pod-name>
# 노드 리소스 상태 점검
kubectl describe node <node-name>
모범 사례
- 이미지 관리
- 경량 베이스 이미지 사용
- 이미지 캐싱 전략
- 레지스트리 미러링
- 리소스 최적화
- 정확한 리소스 요청/제한 설정
- 수직/수평 팟 오토스케일러 활용
- 클러스터 오토스케일링
- 모니터링 및 로깅
- Prometheus, Grafana 등 모니터링 도구 도입
- ELK 스택을 통한 중앙집중식 로깅
- 이상 징후 조기 탐지
결론
ContainerCreating 상태는 단순한 대기 상태가 아니라, Kubernetes의 복잡한 컨테이너 오케스트레이션 프로세스를 보여주는 창구입니다.
세부 메커니즘을 이해하고 체계적인 접근 방식을 통해 안정적이고 효율적인 클러스터 운영이 가능합니다.
728x90
반응형
'DevOps > Kubernetes' 카테고리의 다른 글
[kubernetes] EKS 노드 트러블 슈팅 (0) | 2024.11.21 |
---|---|
[Kubernetes] 트러블슈팅: ImagePullBackOff 상태의 Pod 해결하기! 🔍 (7) | 2024.11.20 |
[ArgoCD] ArgoCD 슬랙 연동 (0) | 2024.07.01 |