7.3.4. CRI-O 스토리지 정리
다음 문제가 발생하는 경우 CRI-O 임시 스토리지를 수동으로 삭제할 수 있습니다.
노드는 모든 Pod에서 실행할 수 없으며 다음과 같은 오류가 나타납니다.
Failed to create pod sandbox: rpc error: code = Unknown desc = failed to mount container XXX: error recreating the missing symlinks: error reading name of symlink for XXX: open /var/lib/containers/storage/overlay/XXX/link: no such file or directory
작업 노드에 새 컨테이너를 생성할 수 없으며 "can't stat lower layer" 오류가 나타납니다.
can't stat lower layer ... because it does not exist. Going through storage to recreate the missing symlinks.
-
클러스터 업그레이드 후 또는 재부팅을 시도하는 경우 노드는
NotReady
상태입니다. -
crio
(컨테이너 런타임 구현)가 제대로 작동하지 않습니다. -
컨테이너 런타임 인스턴스(
crio
)가 작동하지 않기 때문에oc debug node/<nodename>
을 사용하여 노드에서 디버그 쉘을 시작할 수 없습니다.
CRI-O 스토리지를 완전히 지우고 오류를 해결하려면 다음 프로세스를 따르십시오.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다. -
OpenShift CLI(
oc
)가 설치되어 있습니다.
절차
노드에서
cordon
을 사용합니다. 이는 노드가Ready
상태가 되면 워크로드가 예약되지 않도록 하기 위한 것입니다.SchedulingDisabled
가 상태 섹션에 있으면 예약이 비활성화되어 있음을 알 수 있습니다.$ oc adm cordon <nodename>
노드를 cluster-admin으로 드레이닝합니다.
$ oc adm drain <nodename> --ignore-daemonsets --delete-emptydir-data
참고Pod 또는 Pod 템플릿의
terminationGracePeriodSeconds
속성은 정상 종료 기간을 제어합니다. 이 속성은 기본적으로 30초이지만 필요에 따라 애플리케이션별로 사용자 지정할 수 있습니다. 90초 이상 설정하면 Pod가SIGKILLed
로 표시되고 성공적으로 종료되지 않을 수 있습니다.노드가 반환되면 SSH 또는 콘솔을 통해 노드에 다시 연결합니다. 그런 다음 root 사용자에 연결합니다.
$ ssh core@node1.example.com $ sudo -i
kubelet을 수동으로 중지합니다.
# systemctl stop kubelet
컨테이너 및 pod를 중지합니다.
# crictl rmp -fa
crio 서비스를 수동으로 중지합니다.
# systemctl stop crio
이러한 명령을 실행한 후 임시 스토리지를 완전히 초기화할 수 있습니다.
# crio wipe -f
crio 및 kubelet 서비스를 시작합니다.
# systemctl start crio # systemctl start kubelet
crio 및 kubelet 서비스가 시작되고 노드가
Ready
상태에 있으면 정리가 작동했는지 알 수 있습니다.$ oc get nodes
출력 예
NAME STATUS ROLES AGE VERSION ci-ln-tkbxyft-f76d1-nvwhr-master-1 Ready, SchedulingDisabled master 133m v1.22.0-rc.0+75ee307
노드를 예약 가능으로 표시합니다.
SchedulingDisabled
상태가 더 이상 아닐 때 예약이 활성화되어 있음을 알 수 있습니다.$ oc adm uncordon <nodename>
출력 예
NAME STATUS ROLES AGE VERSION ci-ln-tkbxyft-f76d1-nvwhr-master-1 Ready master 133m v1.22.0-rc.0+75ee307