How Baby Pod is Born: 2022 에디션

Containerd는 Kubernetes를 위한 더 많은 컨테이너 런타임 옵션을 제공합니다. 요즘 추천하는곳CRI runtimes중 하나 이사 안가면 위험하게 살고있는거야! 역학을 분석해 봅시다(제목 참조)!

Kubernetes의 kubelet 코드 베이스에 내장된 Dockershim은 항상 검토되었으며as a temporary solution 이를 유지하는 것이 부담으로 지적되었습니다. 클러스터의 각 노드에서 실행되는 에이전트인 Akubelet는 컨테이너가 포드에서 실행되고 있는지 확인합니다. CRI 표준을 사용하면 간소화된 유지 관리를 위해 컨테이너 런타임을 kubelet 코드 기반에서 분리할 수 있습니다.



모든 소란은 무엇입니까?



dockershim을 제거하려면 개발자와 클러스터 관리자가 "불편하지만 필요한"마이그레이션as described by Víctor Jiménez Cerrada을 거쳐야 합니다. 이는 컨테이너 보안 소프트웨어 공급업체 Sysdig의 콘텐츠 관리자 엔지니어입니다.

dockershim is deprecated from K8s v1.24 과 같이 호환되는 다른 컨테이너 런타임 중 하나로 전환해야 합니다. 선택한 런타임이 Docker 데몬such as logging의 현재 설정을 지원하는지 확인하기만 하면 됩니다.

0. 연습



자, 현재 상황을 살펴볼까요? 이제 모든 것이 어떻게 작동하는지 살펴보십시오.

⏩ Kubelet은 포드를 생성하기 위해 CRI 런타임 서비스 #API를 통해 컨테이너 런타임 인터페이스 플러그인을 호출합니다.
⏩ CRI는 #containerd internal을 사용하여 특수 일시 중지 컨테이너를 생성 및 시작하고 해당 컨테이너를 포드의 cgroup 및 네임스페이스에 넣습니다.
⏩ CRI는 CNI를 사용하여 포드의 네트워크 네임스페이스를 구성하고 Kubelet은 이후 CRI 이미지 서비스 API를 통해 CRI 플러그인을 호출하여 애플리케이션 컨테이너 이미지를 가져옵니다.
⏩ 그런 다음 Kubelet은 CRI 런타임 서비스 API를 통해 CRI를 호출하여 가져온 컨테이너 이미지를 사용하여 포드 내부에 애플리케이션 컨테이너를 생성하고 시작합니다.
⏩ CRI는 최종적으로 containerd internal을 사용하여 애플리케이션 컨테이너를 생성하고 포드의 cgroups 및 네임스페이스에 넣은 다음 포드의 새 애플리케이션 컨테이너를 시작합니다.


Docker에서 containerd로 전환하는 방법은 무엇입니까?


1. 실행 중인 CRI 확인



먼저 현재 실행 중인 컨테이너 런타임을 확인해야 합니다. 우리는 이것을

$ kubectl get nodes -o wide


출력의 CONTAINER-RUNTIME 열을 참조하십시오.

2. Cordon 및 Drain 노드



노드를 통제한 후에는 새 포드를 예약할 수 없습니다. 포드를 노드에 예약하려면 노드를 수동으로 차단 해제해야 합니다. 노드가 백엔드 대상 노드로 바인드된 경우 허용된 후 대상 노드 목록에서 제거됩니다.

$ kubectl cordon <Node name>
$ kubectl drain <Node Name> --ignore-daemonsets


3. 서비스 중지




$ systemctl stop kubelet
$ systemctl stop docker


4. 컨테이너 구성



CRI 인터페이스를 활성화하려면 disabled_plugins 줄/etc/containerd/config.toml을 비활성화하십시오.

#disabled_plugins = ["cri"]


아직 없는 경우 새 기본 containerd 구성 파일을 만들 수 있습니다.

$ containerd config default > /etc/containerd/config.toml


그런 다음 다시 시작합니다containerd.

$ systemctl restart containerd


5. 런타임 변경



다음 두 컨테이너runtime flags/var/lib/kubelet/kubeadm-flags.env에 추가합니다.

--container-runtime=remote 
--container-runtimeendpoint=unix:///run/containerd/containerd.sock


6: 이제 kubelet을 시작하고 새 런타임을 테스트할 수 있습니다.




$ systemctl start kubelet
$ kubectl get nodes -o wide


7. 좋습니다. 노드를 해제합니다.




$ kubectl uncordon <Node>


그리고 끝났습니다.

요약



A frog 🐸 in a well knows nothing of the sea.



이 일본어 속담은 제한된 관점으로 세상을 본다는 뜻입니다. 그들은 재빨리 판단하고 자신을 매우 크게 생각합니다. 세상에는 그들보다 더 큰 것들이 있다는 것을 누군가에게 상기시키는 데 사용됩니다.

🇯🇵 아, 그리고 non-docker CLI가 두렵다면 일본에서 도움이 될 수 있는 또 다른 보석이 있습니다. nerdctl tool which keeps legacy in order .

일상적인 방식의 변화를 두려워하지 마십시오! 많은 사람들이 더 좋습니다. 행복한 팟파더가 되세요!

⚠️ 저자는 Rakesh Jain이 쓴 this article을 읽을 것을 권장합니다.

좋은 웹페이지 즐겨찾기