[CRI-O] creating read-write layer with ID… no such file or directory
Environment
OS : RedHat CoreOS 4.9
Openshift : 4.9
Kubernetes : v1.22.3+4dd1b5a
Cri-O : 1.22
ERROR
(에러 났을때 기록해둔 로그가 없어서…. 해결하는데 참고했던 github issue의 에러로그를 그대로 복사해둡니다.)
Warning FailedCreatePodSandBox 2s (x4 over 43s) kubelet, kube6 (combined from similar events): Failed create pod sandbox: rpc error: code = Unknown desc = error creating pod sandbox with name "some-sandbox-name": error creating read-write layer with ID "a5021e65186da551b712f7dd743d712833e5f75fc727c6f937d421897d2eb9d6": Stat /var/lib/containers/storage/overlay/e17133b79956ad6f69ae7f775badd1c11bad2fc64f0529cab863b9d12fbaa5c4: no such file or directory
Kubernetes 클러스터를 운영하다보면 노드를 추가할때도 있고 뺄 때도 있습니다.
원인을 모르겠지만 어느 순간 무언가가 잘 안돌아갈 때가 있는데요…
잘 돌아가는 것처럼 보이지만 문제가 되는 노드에 pod이 배포되면 Image를 제대로 pulling하지 못하는 이슈가 발생할 때가 있습니다.
저도 이 에러가 왜 일어나는지, 무엇이 문제인지 잘 모르겠습니다.
어떤 분이 올려주신 github issue를 참고해서 해결했던 과정을 적어두도록 하겠습니다
Solution
1. 문제가 되는 노드에 ssh 접속
2. crio 서비스 다운
$ systemctl stop crio
3. crio 버전 삭제/백업
저 issue에서는 삭제하라는데 저는 혹시 몰라서 백업해뒀습니다
이렇게 version파일을 없애는 이유는 crio wipe
명령어 실행시 version 파일이 없거나 만료되었으면 crio의 컨테이너들과 이미지 스토리지를 모두 지워버리게 하기 위해서입니다.
$ mv /var/lib/crio/version /home/core/
4. crio wipe
crio wipe : manpage
crio의 컨테이너들과 이미지 저장소를 전부 날려버립니다.
$ crio wipe
5. lib/container와 run/container 삭제
$ rm -rf /var/{run,lib}/containers
6. reboot
$ sudo reboot
7. kubelet 재시작
재부팅되고나서 kubelet을 재구동시켜줍니다
$ systemctl restart kubelet
이렇게 하면 문제가 되던 노드의 모든 이미지 및 컨테이너를 날려버리고 초기화시키게 되고,
kubelet이 재기동되면서 kubernetes의 etcd클러스터에 의해 필요한 pod들을 알아서 복원하게 됩니다.
복원하는데 시간은 걸리긴하지만 기본적인 kubernetes서비스 pod들은 빠른 시간 내에 복원하는 편이고 다른 서비스 pod들은 시간이 좀 걸립니다.
댓글남기기