노드에서 사용 중인 컨테이너 런타임 확인하기
노드에서 사용 중인 컨테이너 런타임 확인하기
이 페이지는 클러스터의 노드들이 어떤 컨테이너 런타임을 사용하는지 알아내는 단계를 안내해요.
클러스터를 실행하는 방식에 따라 노드의 컨테이너 런타임이 미리 구성되어 있을 수도 있고, 직접 구성해야 할 수도 있어요. 관리형 Kubernetes 서비스를 사용한다면, 노드에 구성된 컨테이너 런타임을 확인하는 벤더 고유 방법이 있을 수 있어요. 이 페이지에서 설명하는 방법은 kubectl 실행이 허용되는 곳이라면 어디서든 동작해요.
출처: 문서
본문
시작하기 전에
kubectl을 설치하고 구성해요. 자세한 내용은 도구 설치 섹션을 참고해요.
노드에서 사용 중인 컨테이너 런타임 확인하기
kubectl로 노드 정보를 가져와 보여줘요:
kubectl get nodes -o wide
출력은 다음과 비슷해요. CONTAINER-RUNTIME 열이 런타임과 그 버전을 출력해요.
Docker Engine의 경우 출력은 다음과 비슷해요:
NAME STATUS VERSION CONTAINER-RUNTIME
node-1 Ready v1.16.15 docker://19.3.1
node-2 Ready v1.16.15 docker://19.3.1
node-3 Ready v1.16.15 docker://19.3.1
런타임이 Docker Engine으로 표시되더라도, Kubernetes v1.24의 dockershim 제거 영향은 받지 않을 수 있어요. 런타임 엔드포인트를 확인해서 dockershim을 사용하는지 확인해 보세요. dockershim을 사용하지 않는다면 영향받지 않아요.
containerd의 경우 출력은 다음과 비슷해요:
NAME STATUS VERSION CONTAINER-RUNTIME
node-1 Ready v1.19.6 containerd://1.4.1
node-2 Ready v1.19.6 containerd://1.4.1
node-3 Ready v1.19.6 containerd://1.4.1
컨테이너 런타임에 대한 더 많은 정보는 컨테이너 런타임 페이지에서 확인할 수 있어요.
사용 중인 컨테이너 런타임 엔드포인트 확인하기
컨테이너 런타임은 gRPC 프레임워크 기반의 CRI 프로토콜을 사용해 Unix 소켓으로 kubelet과 통신해요. kubelet이 클라이언트, 런타임이 서버 역할을 해요.
때로는 노드가 사용하는 소켓을 아는 것이 유용할 수 있어요. 예를 들어 Kubernetes v1.24 이상에서 dockershim이 제거된 상황에서는, Docker Engine을 dockershim과 함께 사용하는지 알고 싶을 거예요.
노드의 kubelet 구성에서 어떤 소켓을 사용하는지 확인할 수 있어요.
- kubelet 프로세스의 시작 명령을 확인해요.
tr이나pgrep이 없다면 kubelet 프로세스의 명령줄을 수동으로 확인하세요. - 출력에서
--container-runtime플래그와--container-runtime-endpoint플래그를 찾아봐요. 노드가 Kubernetes v1.23 이하를 사용하고 이 플래그들이 없거나--container-runtime플래그가remote가 아니라면, Docker Engine과 dockershim 소켓을 사용하는 거예요.--container-runtime명령줄 인자는 Kubernetes v1.27 이상에서 사용할 수 없어요.--container-runtime-endpoint플래그가 있다면 소켓 이름을 확인해 어떤 런타임을 사용하는지 알아내요. 예를 들어unix:///run/containerd/containerd.sock은 containerd 엔드포인트예요.
노드의 컨테이너 런타임을 Docker Engine에서 containerd로 바꾸려면 Docker Engine에서 containerd로 마이그레이션 문서를 참고하거나, Kubernetes v1.24 이상에서 Docker Engine을 계속 사용하려면 cri-dockerd 같은 CRI 호환 어댑터로 마이그레이션해요.