rook/ceph의crash-collectorpod
개시하다
이 글은 Rook과 파트너, 클라우드 로컬 스토리지의 Advent Calendar 2020 15일째 되는 날 몰래 기입한 것이다.제가 Crash-collector pod를 설명해 드릴게요.
과업
이pod의 역할은 룩부터 사용crash 모듈이 제공하는 기능이다.
/var/lib/ceph/crash 이하에 MON, MGR, OSD 등 Ceph의 다양한 데몬 이상이 끝날 때 만들어진 crash report 정보입니다.그런데 여기 문제가 하나 있어요.Ceph 클러스터는 대규모로 수백, 수천개의 노드로 구성되어 있으며, Crash report를 보기 위해 데몬이 떨어진 노드를 하나하나 방문하는 것은 매우 번거롭다.
이 문제를 해결하기 위해 탄생한 것은crash 모듈이다.crash 모듈은 Crash report를 Ceph 내부에 있는
config-key
KVS에 저장하여 관리합니다.이외에도 Ceph는 10분마다/var/lib/ceph/crash를 스캔한 후 새로운crash report ceph-crash 를 수집하는 스크립트를 제공합니다.crash 모듈과 ceph-crash
의 조합을 통해crash 리포트를 통일적으로 관리할 수 있습니다.룩이 하는 일은 매우 간단하다. 단지 자신이 ceph와 관련된pod를 만든 모든 노드에서
ceph-crash
동작crash-collector
pod를 했을 뿐이다.crash-collector는daemonset이 아니라 deployment로 실시되기 때문에 무관한node에서 쓸모없는pod를 실행하는 것을 피합니다.견본
먼저 SIGSEGV를 제작이 완료된 Rook/Ceph 클러스터의 OSD pod에 전송하고 crash report를 의도적으로 생성합니다.
$ kubectl -n rook-ceph exec -it rook-ceph-osd-0-6874455499-szfqm -- bash
# kill -SEGV 1
이때crash report는/var/lib/ceph/아래에서 생성됩니다.2020-
시작된 디렉토리 아래의 파일은 해당합니다.# ls /var/lib/ceph/crash
2020-12-31T20:16:48.073102Z_137b9a10-3b2f-43b4-b7be-900eb2f6a61b/ posted/
ceph-crash
가 10분을 기다린 후 상기 디렉터리는posted 디렉터리 이하로 이동하여 config-key
에 저장됩니다.# ls /var/lib/ceph/crash/posted/
2020-12-31T20:16:48.073102Z_137b9a10-3b2f-43b4-b7be-900eb2f6a61b/
toolbox 명령ceph crash ls
명령을 실행하면 위crash 리포트가 config-key
에 저장되어 있음을 알 수 있습니다.$ kubectl -n rook-ceph exec -it rook-ceph-tools-549bfc67cd-5wm68 -- ceph crash ls
ID ENTITY NEW
2020-12-31T20:16:48.073102Z_137b9a10-3b2f-43b4-b7be-900eb2f6a61b osd.0 *
ceph crash info
는 명령을 통해crash report의 내용을 볼 수 있습니다.$ kubectl -n rook-ceph exec -it rook-ceph-tools-549bfc67cd-5wm68 -- ceph crash ls
ID ENTITY NEW
2020-12-31T20:16:48.073102Z_137b9a10-3b2f-43b4-b7be-900eb2f6a61b osd.0 *
sat@ubuntu1804:~/go/src/github.com/rook/rook$ kubectl -n rook-ceph exec -it rook-ceph-tools-549bfc67cd-5wm68 -- ceph crash info 2020-12-31T20:16:48.073102Z_137b9a10-3b2f-43b4-b7be-900eb2f6a61b
{
"backtrace": [
"(()+0x12b20) [0x7f9e53109b20]",
"(pthread_cond_wait()+0x1fc) [0x7f9e531052fc]",
"(std::condition_variable::wait(std::unique_lock<std::mutex>&)+0x10) [0x7f9e527538f0]",
"(AsyncMessenger::wait()+0x1ff) [0x55d56e76bdaf]",
"(main()+0x48ac) [0x55d56df1f32c]",
"(__libc_start_main()+0xf3) [0x7f9e51d5d7b3]",
"(_start()+0x2e) [0x55d56df4d56e]"
],
"ceph_version": "15.2.8",
"crash_id": "2020-12-31T20:16:48.073102Z_137b9a10-3b2f-43b4-b7be-900eb2f6a61b",
"entity_name": "osd.0",
"os_id": "centos",
"os_name": "CentOS Linux",
"os_version": "8",
"os_version_id": "8",
"process_name": "ceph-osd",
"stack_sig": "2a31fa65a650777a15845b7c557d0a172fa949a4ca9cea6da934856404748ad9",
"timestamp": "2020-12-31T20:16:48.073102Z",
"utsname_hostname": "rook-ceph-osd-0-6874455499-szfqm",
"utsname_machine": "x86_64",
"utsname_release": "4.15.0-99-generic",
"utsname_sysname": "Linux",
"utsname_version": "#100-Ubuntu SMP Wed Apr 22 20:32:56 UTC 2020"
}
끝말
대규모 집단에서 집단을 구성하는 노드의 각종 정보의 일원화는 매우 중요하다.이 기사에서는 crash report를 일원화한 crash-collector pod 중 하나에 대해 설명하였다.
Reference
이 문제에 관하여(rook/ceph의crash-collectorpod), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/satoru_takeuchi/articles/33560b2e753972텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)