[Kubernetes] "docker->crio" 컨테이너 런타임 변경
Kubernetes에서 v1.20 이후 컨테이너 런타임으로서 도커를 사용 중단한다고 한다.
사실상 도커가 이미지를 load, push, save, tag 와 같은 명령어를 사용하기에 편리하였지만, 내부에 임베디드 되어 있지 않아 뺀다고 한다.
이미지를 끌어오는 역할을 하게 docker를 두고, 일반적인 컨테이너를 띄우는 역할로 cri-o를 통해 띄어지도록 교체를 할 것이다.
1. crio 설치
# yum install -y crio # systemctl enable crio |
서버가 재부팅이 되었을 경우, 자동으로 올라오기 위해 enable을 잊지 말고 시켜 주자..
2. network plugin 삭제
# rm -rf /etc/cni/net.d/100-crio-bridge.conf /etc/cni/net.d/200-loopback.conf |
삭제를 해주지 않으면, cri-o가 제공하는 인터페이스가 올라온다.. 기존 환경에서는 calico를 쓰고 있었기 때문에 삭제를 해주어야 문제없이 교체할 수 있다.
3. /etc/crio.conf 파일 수정
# vi /etc/crio/crio.conf --- registries = ["{registry}:{port}" , "docker.io"] |
registries나 insecure_registries의 경우 docker daemon.json에 이미지를 가져오기 위한 것과 동일하다.
pids_limit 값의 수정의 경우, Watson Content Analytics 애플리케이션이 실행이 될 때 동작을 안할 수 있기 때문에 설정해 줍니다. 추가적으로 oracle db나, tibero와 같은 DB에서 필요로 하는 수정 사항이다.
4. /etc/containers/registries.conf 파일 수정
# vi /etc/containers/registries.conf |
5. crio 재기동
# systemctl restart crio |
6. Pod 이미지 태그 명 변경 (폐쇄망 환경인 경우)
# kubectl edit daemonset -n kube-system kube-proxy # kubectl edit deploy -n kube-system coredns 변경 전 : image: k8s.gcr.io/coredns:1.3.1
|
7. kubelet 데몬 stop
# systemctl stop kubelet |
8. /var/lib/kubelet/kubeadm-flags.env 옵션 변경
# vi /var/lib/kubelet/kubeadm-flags.env 변경 (cri-o) : KUBELET_KUBEADM_ARGS="--container-runtime=remote --pod-infra-container-image={registry}:{port}/k8s.gcr.io/pause:3.1 --cgroup-driver=systemd --container-runtime-endpoint=/var/run/crio/crio.sock" |
--pod-infra-container-image={registry}:{port}/k8s.gcr.io/pause:3.1 해당 옵션 추가의 경우 cri-o 런타임으로 변경이 될때 폐쇄망 환경의 경우 컨테이너를 멈춤 상태로 띄어주는 역할을 하는 pause 이미지를 외부에서 못 가져와 프로세스 기동이 되지 않는 문제가 있기에 추가해 준다. 폐쇄망이 아니라면 안 해줘도 된다. (생략 가능)
9. kubelet 재기동
# systemctl restart kubelet |
10. docker 재기동 및 pod 모니터링
# systemctl restart docker |
도커가 재기동되면서, cri-o상으로 컨테이너 프로세스가 이동한다.
이때, "watch crictl ps" 명령어를 통해 모니터링하는 것도 좋다. 뜨지 않는다면 pause 이미지를 못 가져와서 그런 확률이 높다.
11. 서버 재기동 (crio로 pod가 정상적으로 넘어오는지 확인)
# reboot -h now |
간혹, 재부팅 이후에 잘 올라왔던 cri-o 프로세스들이 안 살아 나는 경우가 있었다. 이와 같이 pause 이미지 문제였었다.