Docker 리드·아키텍트 트러블슈팅 면접
새 면접Q. 프로덕션 환경에서 특정 워커 노드의 모든 컨테이너가 갑자기 'failed to create shim task: context deadline exceeded' 에러를 발생시키며 시작되지 않습니다. 기존에 실행 중이던 컨테이너들은 정상 동작하지만, 새로운 컨테이너 생성이나 재시작이 모두 실패합니다. containerd 프로세스는 실행 중이고, 디스크 공간도 충분하며, CPU/메모리 사용률도 정상입니다. 다른 노드들은 모두 정상이고, 해당 노드를 재부팅하면 일시적으로 해결되지만 며칠 후 재발합니다. 이 문제의 원인을 찾기 위한 진단 절차와 근본 원인 분석 방법, 그리고 재발 방지 전략을 설명해주세요.
containerd의 shim 프로세스와 관련된 리소스 고갈 문제를 의심해보고, 프로세스 수 제한이나 파일 디스크립터 같은 시스템 리소스를 확인하세요.
먼저 containerd-shim 프로세스 수를 확인하고(ps aux | grep containerd-shim | wc -l), 좀비 프로세스 존재 여부를 체크합니다. /proc/sys/kernel/pid_max와 현재 프로세스 수를 비교하여 PID 고갈을 확인하고, ulimit -n으로 파일 디스크립터 제한을 점검합니다. containerd 로그(/var/log/containerd/)에서 'too many open files'나 'resource temporarily unavailable' 메시지를 찾습니다. 근본 원인은 대부분 컨테이너 종료 시 shim 프로세스가 정리되지 않아 누적되는 것으로, containerd의 버그나 비정상 종료된 컨테이너의 cleanup 실패가 원인입니다. 해결책으로는 containerd 버전 업그레이드, systemd의 TasksMax 설정 증가, 정기적인 orphaned shim 프로세스 모니터링 및 정리 스크립트 구축이 필요합니다. 장기적으로는 컨테이너 라이프사이클 관리 프로세스를 개선하고, graceful shutdown을 보장하는 애플리케이션 설계가 필요합니다.
- • containerd-shim 프로세스 누적과 시스템 리소스 고갈 진단
- • PID 제한, 파일 디스크립터, 좀비 프로세스 체크
- • containerd 로그 분석 및 cleanup 실패 원인 추적
- • systemd 리소스 제한 조정 및 모니터링 구축
- • 컨테이너 라이프사이클 관리 프로세스 개선
대규모 컨테이너 환경에서 장기 운영 시 런타임 레벨의 리소스 누수로 인한 노드 장애가 발생할 때 신속한 원인 파악이 필요합니다.
containerd와 dockerd의 역할 분리 아키텍처에서, 이런 shim 프로세스 누적 문제가 발생했을 때 서비스 중단 없이 정리하는 방법은 무엇인가요?
Q. 마이크로서비스 환경에서 특정 서비스 컨테이너가 외부 HTTPS API 호출 시 'SSL: CERTIFICATE_VERIFY_FAILED' 에러를 발생시키기 시작했습니다. 지난주까지는 정상 동작했고, 애플리케이션 코드나 Docker 이미지는 변경되지 않았습니다. 같은 이미지로 로컬 환경에서 실행하면 정상이고, 호스트에서 직접 curl로 테스트하면 성공합니다. 다른 서비스 컨테이너들은 같은 API를 정상적으로 호출하고 있으며, 문제가 되는 컨테이너만 특정 네트워크 브리지를 사용하도록 설정되어 있습니다. 인프라팀에서는 최근 회사 프록시 인증서를 갱신했다고 합니다. 이 문제의 원인을 진단하고 해결하기 위한 체계적인 접근 방법과, 컨테이너 환경에서 TLS/SSL 인증서 관리 전략을 설명해주세요.
컨테이너가 신뢰하는 CA 인증서 저장소와 호스트/프록시의 인증서 불일치 문제를 중심으로 접근하고, 네트워크 경로 차이를 확인하세요.
먼저 문제 컨테이너 내부에서 openssl s_client -connect API_HOST:443 -showcerts를 실행하여 실제 받는 인증서 체인을 확인합니다. 컨테이너의 /etc/ssl/certs/ 디렉토리와 호스트의 CA 인증서 저장소를 비교하여 차이를 확인하고, 특정 네트워크 브리지 설정에서 트래픽이 회사 프록시를 경유하는지 확인합니다(docker network inspect). 프록시가 중간에서 SSL을 종료하고 재암호화하는 경우, 프록시의 새 인증서가 컨테이너의 신뢰 저장소에 없어 검증 실패가 발생합니다. 해결책은 갱신된 프록시 CA 인증서를 컨테이너 이미지에 추가하거나(update-ca-certificates), 볼륨 마운트로 호스트의 인증서를 공유하는 것입니다. 장기적으로는 베이스 이미지 빌드 파이프라인에 회사 CA 인증서 자동 주입 프로세스를 구축하고, 인증서 만료 모니터링 시스템을 도입해야 합니다. 또한 네트워크 정책을 명확히 문서화하여 어떤 컨테이너가 프록시를 경유하는지 관리해야 합니다.
- • 컨테이너 내부 CA 인증서 저장소와 프록시 인증서 불일치 확인
- • 네트워크 경로별 SSL 인터셉션 여부 진단
- • openssl s_client로 실제 인증서 체인 검증
- • 베이스 이미지에 회사 CA 인증서 주입 자동화
- • 인증서 라이프사이클 관리 및 모니터링 체계 구축
엔터프라이즈 환경에서 보안 정책 변경이나 인증서 갱신 시 컨테이너 애플리케이션의 외부 통신 장애가 발생할 때 신속한 대응이 필요합니다.
멀티 클라우드 환경에서 각 클라우드 제공자의 내부 CA와 회사 자체 CA를 모두 지원해야 할 때, 컨테이너 이미지 빌드 전략을 어떻게 설계하시겠습니까?
Q. Docker Swarm으로 운영 중인 Elasticsearch 클러스터에서 노드 한 대가 비정상 종료된 후 재시작되었는데, 해당 노드가 'corrupted index [IndexCorruptionException]' 에러를 발생시키며 클러스터에 조인하지 못합니다. 다른 노드들은 정상이고 클러스터는 yellow 상태입니다. 해당 노드의 데이터 볼륨은 로컬 디스크를 사용하며, 장애 발생 시점에 대량의 인덱싱 작업이 진행 중이었습니다. 노드 재시작 시 Docker는 자동으로 같은 호스트에 컨테이너를 재생성했지만 볼륨 마운트는 정상입니다. dmesg에서 'EXT4-fs error'가 일부 발견되었습니다. 데이터 손실을 최소화하면서 클러스터를 복구하고, 향후 이런 상황을 예방하기 위한 아키텍처 설계 원칙과 운영 전략을 설명해주세요.
파일시스템 레벨의 손상과 Elasticsearch 인덱스 손상을 분리해서 진단하고, 각 레이어별 복구 전략과 데이터 내구성 보장 방법을 고려하세요.
먼저 호스트의 파일시스템 상태를 확인하기 위해 fsck를 read-only 모드로 실행하고, Elasticsearch 데이터 디렉토리의 무결성을 체크합니다. Elasticsearch의 elasticsearch-shard tool을 사용해 손상된 샤드를 식별하고 복구 가능 여부를 판단합니다. 복구 불가능한 샤드는 클러스터의 다른 레플리카에서 재동기화하거나, 스냅샷에서 복원합니다. 근본 원인은 비정상 종료 시 write buffer가 플러시되지 않아 발생한 것으로, Elasticsearch의 translog와 파일시스템의 write-back cache 불일치가 주요 원인입니다. 예방책으로는 Docker 볼륨에 sync 마운트 옵션 적용, Elasticsearch의 index.translog.durability를 request로 설정(성능 트레이드오프 고려), 레플리카 수 증가로 데이터 이중화 강화가 필요합니다. 아키텍처 레벨에서는 분산 스토리지(Ceph, GlusterFS) 도입을 검토하고, 정기적인 스냅샷 자동화와 복구 훈련(disaster recovery drill)을 수행해야 합니다. 또한 노드 종료 시 graceful shutdown을 보장하는 orchestration 정책을 수립해야 합니다.
- • 파일시스템과 애플리케이션 레벨 손상 분리 진단
- • elasticsearch-shard tool을 활용한 샤드 복구
- • translog와 write buffer 불일치 문제 이해
- • 볼륨 마운트 옵션과 durability 설정 최적화
- • 분산 스토리지 도입 및 스냅샷 자동화
- • graceful shutdown 정책 수립
컨테이너 환경에서 stateful 애플리케이션 운영 시 인프라 장애로 인한 데이터 손상 발생 시 신속한 복구와 재발 방지가 필수적입니다.
Stateful 워크로드를 컨테이너 환경에서 운영할 때, 데이터 내구성과 성능 사이의 트레이드오프를 어떻게 균형있게 설계하시겠습니까?
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!