kubernetes에 컨테이너 런타임이 필요한이유?
- 기본적으로 kubernetes의 동작은 pod에서 이루어지는데,
- pod내의 container가 실행하기 위해 필요하다.
kubernetes가 컨테이너 런타임과 연동되는 방법
- 기본적으로, 쿠버네티스는 컨테이너 런타임 인터페이스(CRI)를 사용하여 사용자가 선택한 컨테이너 런타임을 사용한다.
- 하지만, 런타임을 지정하지 않으면, kubeadm은 잘 알려진 유닉스 도메인 소켓 목록을 검색하여 설치된 컨테이너 런타임을 자동으로 감지한다.
컨테이너 런타임 및 자동으로 감지 할때 사용되는 socket
- containerd : /run/containerd/containerd.sock
- CRI-O : /var/run/crio/crio.sock
- Docker : /var/run/dockershim.sock
컨테이너 런타임을 위한 설정이 필요하다.
전제 : Control group(cgroup)은 프로세스에 할당된 리소스를 제한하는데 사용되는 것인데...
설정이 필요한 이유?
- Systemd(Linux 시스템 데몬)는 cgroup과의 긴밀한 통합을 통해 프로세스당 cgroup을 할당 하고,
- 컨테이너 런타임과 kubelet이 cgroupfs를 사용하도록 설정할 수 있다.
- 이렇게 되면!!!
- systemd와 함께 cgroupfs를 사용하면 두 개의 서로 다른 cgroup 관리자가 존재하게 된다
- 만약, kubelet과 도커에 cgroupfs를 사용하고, 나머지 프로세스는 systemd를 사용하도록 노드가 설정된경우 문제가 발생할 수 있음
문제 해결 방법
- systemd, 컨테이너 런타임, kubelet이 동일한 Cgroup 드라이버를 사용하게 해야한다
- 컨테이너 런타임과 kubelet이 systemd를 cgroup 드라이버로 사용하도록 설정을 변경하는게 좋음
- 방법