💙베하💙 누구든 탑승할 수 있는 유임승차 팀입니다!!💨😉
최근 운영을 담당하고 있는 EKS 버전의 지원이 만료되어 가면서 1.24 버전으로 업그레이드 하기로 결정되었습니다.
이를 위해 어떤 부분이 달라지는지 조사하다가 개념적으로 헷갈렸던 dockershim 과 containerd 를 정리하였습니다.
쿠버네티스 구조의 변화
* 출처 : 조훈님 유튜브(https://www.youtube.com/watch?v=gQmauyVqGPs)
리눅스가 발전하면서 cgroup(control group) 이 나와 사용자들은 CPU 시간, 메모리, 네트워크 대역폭 같은 자원등을 프로세스 간 할당할 수 있는 방법이 나왔고, namespace 를 통해 시스템의 리소스(PID, 네트워크 등)를 분리해서 실행할 수 있게 되었습니다.
이에 따라 컨테이너 기술이 발전하게 되었고, 최근까지도 가장 많이 사용되고 있는 Docker 는 점점 더 발전하게 되었습니다.
그리고 컨테이너를 활용한 프로젝트가 많아지면서 컨테이너들을 관리할 필요성이 생겼고, 이런 요구에 따라 컨테이너 오케스트레이션을 담당하는 Kubernetes가 인기를 얻게 되었습니다.
Kubernetes 는 기본 컨테이너로 Docker 를 채택하여 사용하고 있었는데, 문제는 Docker 가 사용자들의 경험에 기반하여 발전하는 과정에서 Docker Engine 이라는 하나의 패키지에 여러 기능들을 모두 담고 있다는 것이었습니다. Kubernetes 입장에서는 Docker 에서 새로운 버전이나 기능이 추가할 때마다 크게 영향을 받을 수 밖에 없게 되었습니다.
따라서 Docker 진영에서는 Docker 를 중심으로 여러 집단들이 모여 OCI(Open Container Initiative) 라는 프로젝트로 컨테이너 표준을 만들게 됩니다. 그리고 Docker 에서는 이 OCI 표준을 준수하는 containerd(Container Daemon) 라는 Container Runtime 을 만들게 되었고, Kubernetes 에서는 OCI 표준을 준수한 이미지들을 실행할 수 있도록 CRI(Container Runtime Interface) 를 만들어 제공하게 되었습니다. 더불어 Docker 진영에서 Container Runtime 으로 containerd 를 만들었다면, 그 외의 Red Hat, Intel, SUSE, Hyper, IBM 등의 Docker 외 진영에서는 OCI 표준에 따라 CRI-O 라는 Container Runtime 을 만들어 제공하게 되었습니다.
이에 따라 쿠버네티스는 1.24 부터는 dockershim 을 사용하지 않겠다고 하였고, 향후에는 containerd 를 이용하라고 발표하였습니다.
위의 그림에서 볼 수 있듯, CRI 자리에서 dockershim 이 빠지고 그 자리에 containerd 가 자리잡게 되었습니다.
이로서 도커엔진의 모든 기능을 담지 않아 쿠버네티스가 좀 더 경량화 되었고, 구조적으로 잘 모듈화 되었습니다.
위 그림출처인 조훈님의 유튜브에서는 EKS 와 같은 클라우드 업체의 쿠버네티스 서비스에서는 이미 dockershim -> containerd 로 변경된 버전을 제공한다고 합니다. 만약 이번에 EKS 의 버전 업그레이드를 진행하면 기존에 dockershim 을 사용할 때와 다른 옵션들을 각 노드별로 설정해 주면 된다고 합니다.
다만, dockershim -> containerd 로 container runtime 을 변경하게 되면 `docker ps` 와 같은 Docker 명령어들 대신 `crictl ps` 와 같은 명령어를 사용해야 한다고 합니다.
길다면 길고 짧다면 짧은 글 읽어주셔서 감사합니다.
다음번엔 더욱 유익한 내용으로 찾아오겠습니다.
'INFRA > DevOps' 카테고리의 다른 글
[K8s] Annotation (0) | 2023.01.03 |
---|---|
[k8s] Label (0) | 2022.12.29 |
Terraform 실습하기 - 2 (0) | 2022.12.19 |
Terraform 실습하기 -1 (0) | 2022.12.19 |
SRE란 무엇인가? (0) | 2022.12.19 |
댓글