tencent cloud

Containerd 및 Docker를 선택하는 방법
마지막 업데이트 시간:2024-12-03 19:12:01
Containerd 및 Docker를 선택하는 방법
마지막 업데이트 시간: 2024-12-03 19:12:01

컨테이너 런타임은 어떻게 선택합니까?

Kubernetes(K8S)의 가장 중요한 컴포넌트 중 하나인 컨테이너 런타임(Container Runtime)은 이미지 및 컨테이너의 라이프사이클을 관리합니다. Kubelet은 Container Runtime Interface (CRI)를 통해 컨테이너 런타임과 상호 작용하여 이미지와 컨테이너를 관리합니다.
TKE는 컨테이너 런타임으로 containerd 및 docker를 지원합니다.
Containerd는 호출 체인이 더 짧고 컴포넌트가 적으며 안정성이 더 높고 노드 리소스 소비가 더 적습니다. containerd 선택을 권장합니다.
다음을 사용해야 하는 경우 docker를 런타임 컴포넌트로 사용해야 합니다.
docker in docker.
docker build/push/save/load와 같은 명령.
docker API.
docker compose 또는 docker swarm.

Containerd 및 Docker에서 일반적으로 사용되는 명령은 무엇입니까?

Containerd는 docker API 또는 docker CLI를 지원하지 않습니다. 그러나 cri-tool 명령으로 이러한 기능을 구현할 수 있습니다.
이미지 관련 기능
Docker
Containerd
로컬 이미지 목록 표시
docker images
crictl images
이미지 다운로드
docker pull
crictl pull
이미지 업로드
docker push
없음
로컬 이미지 삭제
docker rmi
crictl rmi
이미지 세부정보 보기
docker inspect IMAGE-ID
crictl inspecti IMAGE-ID
컨테이너 관련 기능
Docker
Containerd
컨테이너 목록 표시
docker ps
crictl ps
컨테이너 생성
docker create
crictl create
컨테이너 시작
docker start
crictl start
컨테이너 중지
docker stop
crictl stop
컨테이너 삭제
docker rm
crictl rm
컨테이너 세부정보 보기
docker inspect
crictl inspect
attach
docker attach
crictl attach
exec
docker exec
crictl exec
logs
docker logs
crictl logs
stats
docker stats
crictl stats
POD 관련 기능
Docker
Containerd
POD 목록 표시
없음
crictl pods
POD 세부정보 보기
없음
crictl inspectp
POD 실행
없음
crictl runp
POD 중지
없음
crictl stopp

Containerd와 Docker의 호출 체인의 차이점은 무엇입니까?

Docker가 K8S 컨테이너 런타임으로 사용되는 경우 호출 체인은 다음과 같습니다. kubelet --> docker shim (kubelet 프로세스에서) --> dockerd --> containerd
Containerd가 K8S 컨테이너 런타임으로 사용되는 경우 호출 체인은 다음과 같습니다. kubelet --> cri plugin(containerd 프로세스에서) --> containerd
dockerd는 swarm cluster, docker build 및 docker API와 같은 더 많은 기능을 제공하지만 일부 bug가 발생할 수 있으며 containerd보다 호출 단계가 하나 더 필요합니다.

Stream 서비스

설명
Kubectl exec/logs 등과 같은 명령을 사용하려면 apiserver와 컨테이너 런타임 사이에 스트림 전달 채널을 설정해야 합니다.

Containerd에서 Stream 서비스는 어떻게 사용 및 구성됩니까?

Docker API 자체가 stream 서비스를 제공하고 Kubelet 내부의 docker-shim은 docker API를 통해 스트림을 전달합니다. Containerd의 stream 서비스는 별도로 구성해야 합니다.
[plugins.cri]
stream_server_address = "127.0.0.1"
stream_server_port = "0"
enable_tls_streaming = false

K8S 1.11 이전 버전과 이후 버전의 차이점은 무엇입니까?

Containerd의 stream 서비스는 K8S 버전에 따라 구성이 다릅니다.
K8S 1.11 이전: Kubelet은 리디렉션을 수행하지만 stream proxy는 수행하지 않습니다. 즉, Kubelet은 containerd에 의해 열린 stream server 주소를 apiserver로 보낸 다음 containerd의 stream 서비스에 직접 액세스합니다. 보안을 위해 stream 서비스 전달자를 인증해야 합니다.
K8S 1.11 이후: K8S1.11은 kubelet stream proxy를 도입하여 containerd의 stream 서비스는 로컬 주소만 수신하면 됩니다.

기타 차이점

컨테이너 로그 및 관련 매개변수

항목
Docker
Containerd
스토리지 경로
Docker는 컨테이너 로그를 /var/lib/docker/containers/$CONTAINERID와 같은 디렉터리에 저장합니다.
Kubelet은 /var/log/pods/var/log/containers 아래에 /var/lib/docker/containers/$CONTAINERID 디렉터리의 컨테이너 로그 파일을 가리키는 소프트 링크를 생성합니다.
Kubelet은 컨테이너 로그를 /var/log/pods/$CONTAINER_NAME 디렉터리에 저장하고 로그 파일을 가리키는 /var/log/containers 아래에 소프트 링크를 생성합니다.
매개변수 설정
docker 구성 파일에서 다음을 지정합니다.
"log-driver": "json-file",
"log-opts": {"max-size": "100m","max-file": "5"}
방법1: kubelet 매개변수에 다음을 지정:
--container-log-max-files=5
--container-log-max-size="100Mi"

방법2: KubeletConfiguration에서 다음을 지정:
"containerLogMaxSize": "100Mi",
"containerLogMaxFiles": 5,
데이터 디스크에 컨테이너 로그 저장
데이터 디스크를 ‘data-root’(기본적으로 /var/lib/docker)에 마운트합니다.
데이터 디스크 탑재 지점 아래의 디렉터리를 가리키는 소프트 링크 /var/log/pods를 만듭니다. TKE에서 ‘데이터 디스크에 컨테이너 및 이미지 저장’을 선택하면 소프트 링크 /var/log/pods가 자동으로 생성됩니다.


CNI 네트워크

항목
Docker
Containerd
CNI 호출을 담당하는 구성 요소
Kubelet 내부의 docker-shim
Containerd의 내장 cri-plugin(containerd 1.1 이상)
CNI를 구성하는 방법
Kubelet 매개변수 --cni-bin-dir--cni-conf-dir
Containerd 구성 파일(toml):
[plugins.cri.cni]
bin_dir = "/opt/cni/bin"
conf_dir = "/etc/cni/net.d"

문제 해결에 도움이 되었나요?
더 자세한 내용은 문의하기 또는 티켓 제출 을 통해 문의할 수 있습니다.
아니오

피드백