2.12. Docker 스토리지 재설정
컨테이너 이미지를 다운로드하고 컨테이너를 실행하고 삭제할 때 Docker에서 매핑된 디스크 공간을 항상 확보하지는 않습니다. 결과적으로 시간이 지남에 따라 노드에서 공간이 부족하여 OpenShift Container Platform에서 새 Pod를 생성하거나 Pod를 생성하는 데 몇 분이 걸릴 수 있습니다.
예를 들어 다음은 6분 후에도 ContainerCreating
상태에 있는 Pod를 표시하고 이벤트 로그에 FailedSync 이벤트가 표시됩니다.
$ oc get pod
출력 예
NAME READY STATUS RESTARTS AGE cakephp-mysql-persistent-1-build 0/1 ContainerCreating 0 6m mysql-1-9767d 0/1 ContainerCreating 0 2m mysql-1-deploy 0/1 ContainerCreating 0 6m
$ oc get events
출력 예
LASTSEEN FIRSTSEEN COUNT NAME KIND SUBOBJECT TYPE REASON SOURCE MESSAGE 6m 6m 1 cakephp-mysql-persistent-1-build Pod Normal Scheduled default-scheduler Successfully assigned cakephp-mysql-persistent-1-build to ip-172-31-71-195.us-east-2.compute.internal 2m 5m 4 cakephp-mysql-persistent-1-build Pod Warning FailedSync kubelet, ip-172-31-71-195.us-east-2.compute.internal Error syncing pod 2m 4m 4 cakephp-mysql-persistent-1-build Pod Normal SandboxChanged kubelet, ip-172-31-71-195.us-east-2.compute.internal Pod sandbox changed, it will be killed and re-created.
이 문제에 대한 한 가지 해결책은 Docker에서 필요하지 않은 아티팩트를 제거하도록 Docker 스토리지를 재설정하는 것입니다.
Docker 스토리지를 다시 시작하려는 노드에서 다음을 수행합니다.
다음 명령을 실행하여 노드를 예약할 수 없음으로 표시합니다.
$ oc adm manage-node <node> --schedulable=false
다음 명령을 실행하여 Docker 및 atomic-openshift-node 서비스를 종료합니다.
$ systemctl stop docker atomic-openshift-node
다음 명령을 실행하여 로컬 볼륨 디렉터리를 제거합니다.
$ rm -rf /var/lib/origin/openshift.local.volumes
이 명령은 로컬 이미지 캐시를 지웁니다. 결과적으로 이미지(
ose-*
이미지 포함)를 다시 가져와야 합니다. 이렇게 하면 이미지 저장소가 복구되는 동안 Pod 시작 시간이 느려질 수 있습니다./var/lib/docker 디렉토리를 제거합니다.
$ rm -rf /var/lib/docker
다음 명령을 실행하여 Docker 스토리지를 재설정합니다.
$ docker-storage-setup --reset
다음 명령을 실행하여 Docker 스토리지를 다시 생성합니다.
$ docker-storage-setup
/var/lib/docker 디렉터리를 다시 생성합니다.
$ mkdir /var/lib/docker
다음 명령을 실행하여 Docker 및 atomic-openshift-node 서비스를 다시 시작합니다.
$ systemctl start docker atomic-openshift-node
호스트를 재부팅하여 노드 서비스를 다시 시작하십시오.
# systemctl restart atomic-openshift-node.service
다음 명령을 실행하여 노드를 예약 가능으로 표시합니다.
$ oc adm manage-node <node> --schedulable=true