[kubernetes] docker 런타임에서 containerd 및 CRI-O로 전환하는 방법

dawon·2022년 2월 6일
1

kubernetes 1.24 버전에서 docker 런타임 중단에 따른 기존 docker에서 containerd 및 CRI-O로 전환하는 방법에 대해 안내합니다.

1. Docker에서 containerd 및 CRI-O로 전환하는 방법

사전 작업

1단계: Cordon & Drain 노드

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

2단계: 서비스 중지

$ systemctl stop kubelet
$ systemctl stop docker

3단계: Docker 제거(선택 사항):

apt purge docker-ce docker-ce-cli

또는

yum remove docker-ce docker-ce-cli
Docker에서 containerd로 마이그레이션

Docker에서 containerd로 마이그레이션

4단계: 컨테이너 구성

/etc/containerd/config.toml에서 disabled_plugins 라인을 비활성화하여 CRI 인터페이스를 활성화합니다.

#disabled_plugins = ["cri"]

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

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

그런 다음 containerd를 다시 시작하십시오.

systemctl restart containerd

5단계: 런타임 변경 /var/lib/kubelet/kubeadm-flags.env에 다음 2개의 containerd 런타임 플래그를 추가합니다.

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

6단계: 이제 kubelet을 시작할 수 있습니다.

systemctl start kubelet

7단계: containerd 런타임 테스트

kubectl get nodes -o wide

이제 노드를 해제할 수 있습니다.

kubectl uncordon node

Docker에서 CRI-O로 마이그레이션

4단계: CRI-O 저장소 및 설치

$ add-apt-repository ppa:projectatomic/ppa
$ apt update
$ apt install -y cri-o-1.15

5단계: CRI-O 구성 및 커널 생성 파일 99-kubernetes-crio.conf 생성

vi /etc/sysctl.d/99-kubernetes-crio.conf

그리고 다음 줄을 추가합니다.

net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1

커널에 변경 사항 적용:

sysctl -a

crio.conf를 확인하고 Docker 레지스트리를 사용하도록 cri-o 편집

파일 열기 crio.conf:

vim /etc/crio/crio.conf

구성에서 conmon에 대한 경로가 정확한지 확인하십시오. 그렇지 않은 경우 다음 명령을 실행합니다.

which conmon

crio.conf 파일에 출력 추가

# Path to the conmon binary, used for monitoring the OCI runtime.
conmon = "/usr/bin/conmon"

또한 "레지스트리" 옵션이 주석 처리되어 있는지 확인하십시오.

registries = [
        "quay.io",
        "docker.io",
]

6단계: 이제 CRI-O를 시작할 수 있습니다.

$ systemctl enable crio
$ systemctl start crio

7단계: kubelet 편집을 구성하고 시작 vi /etc/default/kubelet 하면 다음과 같아야 합니다.

KUBELET_EXTRA_ARGS=--feature-gates="AllAlpha=false" --container-runtime=remote --cgroup-driver=systemd --container-runtime-endpoint='unix:///var/run/crio/crio.sock' --runtime-request-timeout=5m

그런 다음 kubelet을 시작합니다.

systemctl start kubelet

8단계: 이제 노드의 코드를 해제할 수 있습니다.

kubectl uncordon <Node>

2. 정리

결론적으로, 쿠버네티스에서 도커를 런타임으로 지원하지 않는다는 것이 도커를 사용할 수 없다는 것을 의미하는 것이 아닙니다.
단지 도커가 쿠버네티스에서 기본 엔진으로 사용되지 않는다는 것을 의미합니다.

자세한 내용은 Kubernetes의 공식 문서에서 확인이 가능합니다.

0개의 댓글