Docker에서 containerd 런타임으로 마이그레이션하기
Docker에서 containerd 런타임으로 마이그레이션하기
이 작업에서는 컨테이너 런타임을 Docker에서 containerd로 업데이트하는 데 필요한 단계를 살펴봐요. 쿠버네티스 1.23 이하를 실행하는 클러스터 운영자에게 해당하며, dockershim에서 containerd로 마이그레이션하는 예시 시나리오를 다룹니다. 다른 컨테이너 런타임은 이 페이지에서 고를 수 있어요.
출처: 문서
본문
시작하기 전에
containerd를 설치해요. 자세한 내용은 containerd 설치 문서를, 특정 사전 조건은 containerd 가이드를 참고하세요.
노드 드레인하기
kubectl drain <node-to-drain> --ignore-daemonsets
<node-to-drain>을 드레인할 노드의 이름으로 바꿔요.
Docker 데몬 중지하기
systemctl stop kubelet
systemctl disable docker.service --now
Containerd 설치하기
containerd를 설치하는 자세한 단계는 가이드를 따라가세요.
-
공식 Docker 리포지토리에서
containerd.io패키지를 설치한다. Linux 배포판에 맞는 Docker 리포지토리 설정과containerd.io패키지 설치는 Getting started with containerd에서 찾을 수 있어요. -
containerd를 구성한다:
sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml -
containerd를 재시작한다:
sudo systemctl restart containerd
Powershell 세션을 시작하고 $Version을 원하는 버전(예: $Version="1.4.3")으로 설정한 뒤 다음 명령을 실행해요:
-
containerd를 다운로드한다:
curl.exe -L https://github.com/containerd/containerd/releases/download/v$Version/containerd-$Version-windows-amd64.tar.gz -o containerd-windows-amd64.tar.gz tar.exe xvf .\containerd-windows-amd64.tar.gz -
압축을 풀고 구성한다:
Copy-Item -Path ".\bin\" -Destination "$Env:ProgramFiles\containerd" -Recurse -Force cd $Env:ProgramFiles\containerd\ .\containerd.exe config default | Out-File config.toml -Encoding ascii # Review the configuration. Depending on setup you may want to adjust: # - the sandbox_image (Kubernetes pause image) # - cni bin_dir and conf_dir locations Get-Content config.toml # (Optional - but highly recommended) Exclude containerd from Windows Defender Scans Add-MpPreference -ExclusionProcess "$Env:ProgramFiles\containerd\containerd.exe" -
containerd를 시작한다:
.\containerd.exe --register-service Start-Service containerd
kubelet이 containerd를 컨테이너 런타임으로 사용하도록 구성하기
/var/lib/kubelet/kubeadm-flags.env 파일을 편집하고 런타임 플래그로 --container-runtime-endpoint=unix:///run/containerd/containerd.sock을 추가해요.
kubeadm을 사용하는 사용자라면 kubeadm 도구가 각 노드의 /var/lib/kubelet/instance-config.yaml 파일에 호스트의 CRI 소켓을 저장한다는 점을 알고 있어야 해요. 노드에 이 /var/lib/kubelet/instance-config.yaml 파일을 직접 만들 수 있습니다.
/var/lib/kubelet/instance-config.yaml 파일은 containerRuntimeEndpoint 파라미터를 설정할 수 있게 해줘요.
이 파라미터의 값을 선택한 CRI 소켓 경로(예: unix:///run/containerd/containerd.sock)로 설정할 수 있어요.
kubelet 재시작하기
systemctl start kubelet
노드가 정상인지 확인하기
kubectl get nodes -o wide를 실행하면 방금 변경한 노드의 런타임으로 containerd가 표시됩니다.
Docker Engine 제거하기
노드가 정상으로 보이면 Docker를 제거해요.
sudo dnf remove docker-ce docker-ce-cli
sudo apt-get purge docker-ce docker-ce-cli
앞선 명령들은 호스트의 이미지·컨테이너·볼륨·커스터마이즈된 구성 파일을 제거하지 않아요. 그것들을 삭제하려면 Docker의 지침에 따라 Uninstall Docker Engine을 수행하세요.
Docker의 Docker Engine 제거 지침은 containerd를 삭제할 위험이 있어요. 명령을 실행할 때 주의하세요.
노드 언코든하기
kubectl uncordon <node-to-uncordon>
<node-to-uncordon>을 이전에 드레인했던 노드 이름으로 바꿔요.