kubernetes 클러스터 - crictl만이 실제로 컨테이너(컨테이너 자산)를 볼 수 있습니다.

kubernetes 클러스터 - crictl만이 실제로 컨테이너(컨테이너 자산)를 볼 수 있습니다.

내 kubernetes(v1.28.7)에서 docker는 Containerd를 기본 컨테이너 관리 엔진으로 사용합니다.
(컨테이너 런타임 인터페이스 - CRI라고 부를 수 있을까요?)

이것이 내 가설입니다(마지막 행을 보고 오른쪽으로 스크롤합니다).

lab@worker01:~$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2024-03-27 14:22:36 UTC; 1h 11min ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 946 (dockerd)
      Tasks: 7
     Memory: 87.3M
        CPU: 1.080s
     CGroup: /system.slice/docker.service
             └─946 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd <--- HERE!!! containerd instead of docker.

질문: Containerd가 내 CRI라면 왜 이것이 유일한 방법입니까? 이미지 나열 또는 실행 중인 컨테이너 표시가 "crictl"입니까?

sudo crictl image ls
IMAGE                                      TAG                 IMAGE ID            SIZE
docker.io/calico/cni                       v3.26.0             5d6f5c26c6554       93.3MB
docker.io/calico/node                      v3.26.0             44f52c09decec       87.6MB
docker.io/library/busybox                  latest              ba5dc23f65d4c       2.16MB
docker.io/library/nginx                    latest              92b11f67642b6       70.5MB
docker.io/library/redis                    latest              170a1e90f8436       51.4MB
k8s.gcr.io/metrics-server/metrics-server   v0.6.2              25561daa66605       28.1MB
registry.k8s.io/coredns/coredns            v1.10.1             ead0a4a53df89       16.2MB
registry.k8s.io/kube-proxy                 v1.28.7             123aa721f941b       28.1MB
registry.k8s.io/pause                      3.8                 4873874c08efc       311kB
registry.k8s.io/pause                      3.9                 e6f1816883972       322kB

도커또는클릭률이미지 표시 안 함:

sudo ctr images ls
REF TYPE DIGEST SIZE PLATFORMS LABELS

sudo docker images ls
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

답변1

Containerd를 사용하면 클라이언트가 "네임스페이스"를 설정하여 다양한 리소스 세트를 관리할 수 있습니다. 예를 들어 Docker 26.0.0을 실행하는 로컬 시스템에서 Docker는 컨테이너 런타임으로 컨테이너를 사용합니다.

여러 Docker 컨테이너가 실행 중입니다.

$ docker ps
CONTAINER ID   IMAGE                   COMMAND                  CREATED         STATUS         PORTS                                       NAMES
7cfbf97a9275   alpinelinux/darkhttpd   "darkhttpd /var/www/…"   7 seconds ago   Up 6 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   boring_thompson
0e1ede44350e   kindest/node:v1.29.2    "/usr/local/bin/entr…"   3 weeks ago     Up 12 hours    127.0.0.1:39949->6443/tcp                   kind-control-plane

실행하면 아무것도 표시되지 않습니다 ctr container ls.

# ctr container ls
CONTAINER    IMAGE    RUNTIME    

하지만 네임스페이스를 사용하면 moby두 개의 Docker 컨테이너가 표시됩니다.

# ctr --namespace moby container ls
CONTAINER                                                           IMAGE    RUNTIME                  
0e1ede44350e15fa2305f4b2dbfa0a5023de645bb535b05cac232e91069c4e7e    -        io.containerd.runc.v2    
7cfbf97a9275edb79228d241c221b665659e3688bbc96ac879bb950db481e912    -        io.containerd.runc.v2    

마찬가지로 Kubernetes를 실행하는 시스템에서 실행하면 ctr container ls기본 네임스페이스에 컨테이너가 없음이 표시되지만 k8s.io네임스페이스를 사용하면 Kubernetes 관리 컨테이너가 표시됩니다.

# ctr --namespace k8s.io container ls
CONTAINER                                                           IMAGE                                                          RUNTIME
007dc9290e81c88cc85cf1b74b50c535420f1e1b4188eca4dfbd46e14881d2ab    registry.k8s.io/kube-apiserver-amd64:v1.29.2                   io.containerd.runc.v2
00c5f27f9125eb7132277585d450c904f4ff9542f5f70130855d268debad0624    registry.k8s.io/pause:3.7                                      io.containerd.runc.v2
0f2968f76498a18b098bc5a11f1b8071e261d74e0790bc7df6a56f0b37e9b293    registry.k8s.io/kube-proxy-amd64:v1.29.2                       io.containerd.runc.v2
...

Containerd의 네임스페이스 지원은 다음에 설명되어 있습니다.이 기사.

관련 정보