DCOS cleanup unreachable tasks
서비스 운영중에 agent노드 한대가 갑자기 중단되는 상황이 발생했다. 노드 재시작 이후 서비스 원상 복구가 완료되었으나, 중단된 노드에서 동작하던 Task들이 DC/OS Dashboard에서 Unreachable로 표시되어 없어지지 않는 현상이 발생했다.
원인
bundle-2020-03-21-1584755074/128.11.1.69_agent/var/log/mesos/mesos-agent.log:
I0320 22:49:04.198818 13317 gc.cpp:129] Unscheduling '/var/lib/mesos/slave/slaves/a3195c3b-8e69-4322-902b-13aa3f891e21-S1/frameworks/24879db0-e85c-486c-9dca-63d49354eac6-0000/execu
I0321 09:59:43.785043 15166 agent.cpp:1026] Overlay agent parameter 'agent_config=/opt/mesosphere/etc/overlay/config/agent.json'
slave agent 노드 1대가 리소스 문제로 인해 재기동이 되었고, 불명의 원인에 의해서 재기동 이후에 slave latest 상태에 관한 정보파일을 찾지 못하여 master로부터 새로운 agent-id를 발급받은 것이 원인이다.
결과적으로 보면, Mesos Master입장에서는 각각의 task들의 배정과 노드 관리를 agent-id를 통해서 진행하기 때문에, 종료된 노드가 다시 켜지지 않은 상태에서 새로운 노드가 한대 추가 된 것으로 인식되는 것이다. 때문에 이전의 agent-id에 할당되었던 task는 Health unreachable이 뜬 이후, 노드로부터 어떠한 응답도 받지 못하는 상황이기 때문에 계속 지워지지 않는 상태를 유지하는 것이다.
해결방법
1. 기다린다
사실 DC/OS에 부하를 주는 것도 아니고, UI에서도 직접 해당 서비스 내부까지 들어가서 확인하지 않으면 보이지 않는 부분이기 때문에 큰 이슈는 아니다. 그리고 mesos Default 세팅으로 14일이 지나면, 자동으로 목록이 지워지기 때문에 기다리면 해결이 된다.
D2iQ에서도 두가지 솔루션을 제공했는데, 궁금해서 정말 14일을 기다려봤더니 정확하게 14일이 지나는 날에 Unreachable Task가 UI에서 제거되었다. ㅋㅋㅋㅋ
2. MESOS MASTER 환경변수 수정 및 재시작
내가 관리하는 플랫폼이면 상관없지만, 고객사에서 요청한 것이라면 일단 까야한다. 귀찮지만 바로 없애는 방법도 있다. mesos master를 재기동 하는 방법인데, 그냥 재기동 한다고 되는 것이 아니다.
MESOS_MAX_COMPLETED_TASKS_PER_FRAMEWORK
라는 mesos 환경변수의 값을 0으로 재지정하고 재기동해주면 된다.
**/etc/systemd/system/dcos-mesos-master.service.d/override.conf
파일 생성**
[Service]
Environment=MESOS_MAX_COMPLETED_TASKS_PER_FRAMEWORK=0
mesos master서비스 재기동
sudo sh -c 'systemctl daemon-reload && systemctl restart dcos-mesos-master'
참고