
해당 내용은 Udemy의 Certified Kubernetes Administrator(CKA) with Practice Tests 강의를 공부한 내용입니다.
Certified Kubernetes Administrator (CKA) with Practice Tests
<p><strong>CKA Certification Course – Certified Kubernetes Administrator</strong></p><p>Kubernetes is one of the highest trending technology in Cloud Computing as of today. Kubernetes had the fastest growth in job searches, over 173% from a year before,
www.udemy.com
컨테이너 런타임의 진화
컨테이너 초창기에는 Docker가 직관적인 인터페이스 덕분에 사실상 표준처럼 사용
Rocket(rkt) 같은 다른 도구들도 있었지만, Kubernetes는 처음에 Docker 기반 컨테이너를 오케스트레이션 하도록 설계되었기 때문에 Docker와 강하게 결합
하지만 Kubernetes가 발전하면서 다양한 컨테이너 런타임을 지원해야 할 필요성이 생겼고, 이를 해결하기 위해 CRI(Container Runtime Interface)가 도입
CRI는 다음 두 가지 OCI(Open Container Initiative) 표준을 기반으로 컨테이너 런타임을 표준화
- 이미지 스펙 (이미지 빌드)
- 런타임 스펙 (컨테이너 실행)
이 덕분에 Rocket 같은 다양한 런타임도 Kubernetes에서 사용할 수 있게 됨
Docker와 CRI의 관계
Docker는 CRI가 나오기 전에 만들어졌기 때문에 CRI를 직접 지원하지 않음
그래서 Kubernetes에서 Docker를 사용하기 위해 Docker Shim이라는 중간 계층이 필요
하지만 시간이 지나면서 ContainerD 같은 CRI 호환 런타임이 등장했고, 구조가 점점 단순화
- ContainerD → CRI 지원 → Kubernetes와 직접 연동 가능
- Docker → CRI 미지원 → Docker Shim 필요
결국 Kubernetes 1.24부터 Docker Shim이 제거되면서 Docker는 더 이상 런타임으로 직접 사용되지 않게 됨
Docker 이미지 자체는 OCI 표준이기 때문에 ContainerD에서도 그대로 사용 가능

Docker의 내부 구성
Docker는 단순한 런타임이 아니라 여러 기능이 포함된 플랫폼
- Docker CLI & API
- 이미지 빌드 기능
- 볼륨, 인증, 보안 기능
- 내부 런타임 (containerd + runc)
즉, Docker 안에도 실제 실행은 containerd와 runc가 담당
ContainerD 란?
ContainerD는 원래 Docker 내부 구성 요소였지만, 현재는 독립 프로젝트로 분리되어 CNCF에서 관리됨
→ Docker 없이 ContainerD만 설치해서 사용할 수도 있음
설치 예시 :
$ tar -C /usr/local -zxvf containerd-1.6.2-linux-amd64.tar.gz
CTR(ContainerD 기본 CLI)
ContainerD에는 기본 CLI인 ctr가 포함되어 있음
예시:
ctr images pull docker.io/library/redis:alpine
ctr run docker.io/library/redis:alpine redis
특징:
- 디버깅 목적
- 사용자 친화적이지 않음
- 기능 제한적
→ 실무에서 일반적으로 사용하기에는 적합하지 않음
NerdCTL (Docker 스타일 CLI)
NerdCTL은 ContainerD용 CLI지만 Docker와 거의 동일한 사용 경험을 제공
CTR vr NerdCTL 예시 비교:
# Docker
docker run --name redis redis:alpine
# NerdCTL
nerdctl run --name redis redis:alpine
# Docker
docker run --name webserver -p 80:80 -d nginx
# NerdCTL
nerdctl run --name webserver -p 80:80 -d nginx
특징:
- 이미지 암호화
- Lazy Pull
- P2P 이미지 배포
- 이미지 서명 및 검증
→ ContainerD 환경에서 실제 운영용 CLI로 가장 추천됨
CRICTL (Kubernetes 관점 CLI)
CRICTL은 Kubernetes에서 사용하는 CLI로, 모든 CRI 런타임과 호환
주요 특징:
- Kubernetes 커뮤니티에서 관리
- 디버깅 및 상태 확인 용도
- 런타임 독립적
예시 :
crictl pull busybox
crictl images
crictl ps -a
기능:
- 이미지 조회
- 컨테이너 목록 확인
- 로그 확인
- Pod 조회
주의:
crictl로 생성한 컨테이너는 Kubernetes 관리 대상이 아니기 때문에 kubelet에 의해 삭제될 수 있음
Docker CLI vs CRICTL
명령어 많이 겹침. attach, exec, images, info, inspect, logs, ps, stats, version과 같은 기능을 지원하지만 컨테이너 생성 및 관리 방식에는 차이가 있음


Kubernetes 런타임 엔드포인트 변화
과거 kubelet은 다음 순서로 런타임을 찾음
unix:///var/run/dockershim.sock
unix:///run/containerd/containerd.sock
unix:///run/crio/crio.sock
unix:///var/run/cri-dockerd.sock
Kubernetes 1.24 이후:
- dockershim 제거
- cri-dockerd.sock 사용
사용자는 직업 엔드포인트를 설정해야 함:
crictl --runtime-endpoint <endpoint>
export CONTAINER_RUNTIME_ENDPOINT=<endpoint>
요약
- CTR
- ContainerD 기본 CLI
- 디버깅용
- NerdCTL
- Docker와 유사한 CLI
- 실제 운영에 가장 적합
- CRICTL
- Kubernetes용 CLI
- 런타임 공통 인터페이스
- 디버깅/검사용
'Kubernetes' 카테고리의 다른 글
| [Kubernetes] Kube Controller Manager (0) | 2026.06.08 |
|---|---|
| [Kubernetes] Kube-API Server (0) | 2026.06.01 |
| [Kubernetes] ETCD in Kubernetes (0) | 2026.05.25 |
| [Kubernetes] ETCD For Beginners (0) | 2026.05.18 |
| [Kubernetes] Cluster Architecture (0) | 2026.05.03 |