이 Helm 차트는 대부분의 퍼블릭 클라우드 Kubernetes 서비스 공급자 및 프라이빗 Kubernetes 인스턴스의 코어 덤프를 S3 호환 스토리지 서비스에 자동으로 저장하는 기능을 배포하도록 설계되었습니다.
몇 가지 중요한 참고 사항이 있는 CONTRIBUTING.md를 읽어보세요. 코딩 스타일 지침 과 개발자 원산지 증명서 에 특별한 주의를 기울이세요.
회원, 기여자, 리더로서 우리는 연령, 신체 크기, 눈에 보이거나 보이지 않는 장애, 인종, 성징, 성 정체성 및 표현, 경험 수준, 교육 수준에 관계없이 모든 사람이 커뮤니티에 참여하여 괴롭힘 없는 경험을 할 수 있도록 약속합니다. , 사회 경제적 지위, 국적, 외모, 인종, 종교 또는 성적 정체성 및 취향.
우리는 개방적이고 환영하며 다양하고 포용적이며 건강한 커뮤니티에 기여하는 방식으로 행동하고 상호 작용할 것을 약속합니다.
전체 행동 강령은 여기에서 확인할 수 있습니다.
자세한 내용은 차트 README.md를 참조하세요.
확인된 테스트 대상의 매트릭스입니다. 작동하는 것으로 알려진 환경을 홍보해 주세요.
공급자 | 제품 | 버전 | 검증되었나요? | 일하고 있는? |
AWS | EKS | 1.21 | 예 | 예 |
AWS | 로사 | 4.8 | 예 | 예 |
맞춤형 빌드 | K8S | 해당 없음 | 예 | 예 |
디지털 오션 | K8S | 1.21.5-do.0 | 예 | 예 |
GKE-cos_containerd | 1.20.10-gke.1600 | 예 | 예 | |
GKE-Ubuntu | 1.20.10-gke.1600 | 예 | 예 | |
IBM | IKS | 1.19-1.21 | 예 | 예 |
IBM | ROKS | 4.6-4.8 | 예 | 예 |
마이크로소프트 | AKS | 1.19 | 예 | 예 |
마이크로소프트 | 아로 | 4.8 | 예 | 예 |
레드햇 | 온프레미스 | 4.8 | 예 | 예 |
코어 덤프는 관찰 가능성의 중요한 부분입니다.
시스템이 더욱 분산됨에 따라 코어 덤프는 프로그램이 배포된 모든 환경에서 오작동하는 이유를 이해할 수 있는 비침투적 접근 방식을 팀에 제공합니다.
코어 덤프는 다양한 시나리오에서 유용하지만 다음과 같은 경우에 매우 관련이 있습니다.
유용한 스택 추적 없이 프로세스가 종료됩니다.
프로세스에 메모리가 부족합니다.
애플리케이션이 예상대로 작동하지 않습니다.
코어 덤프의 전통적인 문제는 다음과 같습니다.
덤프 관리 오버헤드
덤프 분석에는 개발자 컴퓨터에서 쉽게 사용할 수 없는 특정 도구가 필요했습니다.
민감한 정보가 포함될 수 있으므로 덤프에 대한 액세스를 관리합니다.
이 차트는 클라우드 환경에서 공통 플랫폼(K8s, ROKS 및 Object Storage)을 활용하여 코어 덤프와 관련된 문제를 해결하는 것을 목표로 합니다.
차트는 두 가지 프로세스를 배포합니다.
에이전트는 /proc/sys/kernel/*
구성의 업데이트를 관리하고 작성기 서비스를 배포하며 작성기가 생성한 코어 덤프 zip 파일을 객체 스토리지 인스턴스에 업로드합니다.
작성기는 코어 덤프 처리와 CRICTL의 런타임, 컨테이너 코어 덤프 및 이미지 JSON 문서 생성을 처리하고 이를 단일 zip 파일에 삽입합니다. zip 파일은 에이전트가 업로드할 수 있도록 노드의 로컬 파일 시스템에 저장됩니다.
IBM Cloud Core Dump Handler Helm 차트를 설치하면 다음 Kubernetes 리소스가 Kubernetes 클러스터에 배치됩니다.
네임스페이스 : 구성요소를 설치하기 위해 특정 네임스페이스가 생성됩니다. 기본값은 ibm-observe입니다.
Handler Daemonset : daemonset는 클러스터의 모든 작업자 노드에 Pod를 배포합니다. 데몬셋에는 상승된 프로세스를 통해 코어 패턴을 정의하여 코어 덤프를 객체 스토리지에 배치하고 가능한 경우 포드 정보를 수집할 수 있는 구성이 포함되어 있습니다.
권한 있는 정책 : 데몬셋은 권한이 필요하도록 호스트 노드를 구성합니다.
서비스 계정 : 데몬셋을 실행하기 위한 표준 서비스 계정
볼륨 클레임 : 작성기를 호스트에 복사하고 생성된 코어 덤프에 대한 액세스를 활성화합니다.
클러스터 역할 : 이벤트 리소스로 생성되고 동사를 생성하며 서비스 계정과 연결됩니다.
클러스터에 Helm 차트를 설치하려면 관리자 플랫폼 역할이 있어야 합니다.
이 차트는 다음과 같은 의미를 지닌 권한 있는 kubernetes 데몬셋을 배포합니다.
포드 정보에 대한 crictl을 쿼리하는 코어 파일을 읽을 수 있는 kubernetes 노드당 권한 있는 컨테이너의 자동 생성.
데몬셋은 기본 Linux OS와 상호 작용하는 호스트 경로 기능을 사용합니다.
Composer 바이너리는 호스트 서버에 배포 및 실행됩니다.
코어 덤프에는 민감한 런타임 데이터가 포함될 수 있으며 이에 따라 스토리지 버킷 액세스를 관리해야 합니다.
객체 스토리지 키는 비밀로 저장되고 데몬셋에서 환경 변수로 사용됩니다.
IBM Cloud Core Dump Handler를 성공적으로 실행하려면 각 작업자 노드에 다음 리소스가 필요합니다.
$ helm delete core-dump-handler --namespace observe
host-name
에 대한 영구 볼륨이 삭제되었는지 확인하세요. $ kubectl get pvc -n observe
$ helm install core-dump-handler . --namespace observe
helm delete core-dump-handler -n observe
이미지 docker build -t YOUR_TAG_NAME .
컨테이너 레지스트리에 이미지 푸시
이를 사용하려면 values.yaml
파일의 컨테이너를 업데이트하세요.
image :
registry : YOUR_REGISTRY
repository : YOUR_REPOSITORY
tag : YOUR_TAG
또는 설정을 사용하여 helm install 명령을 실행하십시오.
--set image.registry=YOUR_REGISTRY
--set image.repository=YOUR_REPOSITORY
--set image.tag=YOUR_TAG
서비스는 Rustup을 사용하여 Rust로 작성되었습니다.
기본 폴더의 cargo test
사용하여 로컬 단위 테스트를 실행할 수 있습니다.
현재는 IBM Cloud ROKS 및 IKS만 지원되지만 다른 서비스에 대한 통합 테스트를 기꺼이 수행할 수 있지만 릴리스 전에는 실행할 수 없습니다.
통합 테스트 빌드를 실행하려면 사용자 지정 빌드에 대한 지침을 따르세요.
프로젝트 폴더의 루트에 다음 구성으로 .env
라는 파일을 만듭니다.
S3_ACCESS_KEY=XXXX
S3_SECRET=XXXX
S3_BUCKET_NAME=XXXX
S3_REGION=XXXX
디렉터리를 통합 폴더로 변경하고 테스트를 실행하세요.
cd integration
./run-ibm.sh
릴리스는 사전 릴리스 분기에 구축됩니다. 예를 들어 pre-8.5.0
통합 테스트는 수동으로 실행되고 릴리스는 기본에 병합될 때 생성됩니다.
현재 github 작업의 kubernetes 통합이 충분히 안정적이지 않기 때문에 이를 자동화하는 것은 불가능합니다.
자체 통합 테스트를 통해 시험판을 테스트하려는 경우 문제를 제기해 주시면 테스트 실행에 대해 협력해 드리겠습니다.
문제를 가장 먼저 찾을 수 있는 곳은 에이전트 콘솔입니다. 성공적인 설치는 다음과 같습니다
[2021-09-08T22:28:43Z INFO core_dump_agent] Setting host location to: /var/mnt/core-dump-handler
[2021-09-08T22:28:43Z INFO core_dump_agent] Current Directory for setup is /app
[2021-09-08T22:28:43Z INFO core_dump_agent] Copying the composer from ./vendor/default/cdc to /var/mnt/core-dump-handler/cdc
[2021-09-08T22:28:43Z INFO core_dump_agent] Starting sysctl for kernel.core_pattern /var/mnt/core-dump-handler/core_pattern.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created Backup of /var/mnt/core-dump-handler/core_pattern.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Starting sysctl for kernel.core_pipe_limit /var/mnt/core-dump-handler/core_pipe_limit.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created Backup of /var/mnt/core-dump-handler/core_pipe_limit.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Starting sysctl for fs.suid_dumpable /var/mnt/core-dump-handler/suid_dumpable.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created Backup of /var/mnt/core-dump-handler/suid_dumpable.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created sysctl of kernel.core_pattern=|/var/mnt/core-dump-handler/cdc -c=%c -e=%e -p=%p -s=%s -t=%t -d=/var/mnt/core-dump-handler/core -h=%h -E=%E
kernel.core_pattern = |/var/mnt/core-dump-handler/cdc -c=%c -e=%e -p=%p -s=%s -t=%t -d=/var/mnt/core-dump-handler/core -h=%h -E=%E
kernel.core_pipe_limit = 128
[2021-09-08T22:28:43Z INFO core_dump_agent] Created sysctl of kernel.core_pipe_limit=128
fs.suid_dumpable = 2
[2021-09-08T22:28:43Z INFO core_dump_agent] Created sysctl of fs.suid_dumpable=2
[2021-09-08T22:28:43Z INFO core_dump_agent] Creating /var/mnt/core-dump-handler/.env file with LOG_LEVEL=info
[2021-09-08T22:28:43Z INFO core_dump_agent] Executing Agent with location : /var/mnt/core-dump-handler/core
[2021-09-08T22:28:43Z INFO core_dump_agent] Dir Content []
에이전트가 성공적으로 실행되면 작성기 구성에 문제가 있을 수 있습니다. 작성기에 대한 로그를 확인하려면 에이전트에 대한 셸을 열고 작성기.log를 cat하여 오류 메시지가 있는지 확인하십시오.
cat /var/mnt/core-dump-handler/composer.log
오류가 없으면 value.yaml에서 기본 로그를 error
에서 debug
로 변경하고 차트를 다시 배포해야 합니다. 코어 덤프를 다시 생성하면 /var/mnt/core-dump-handler/composer.log
에 각 업로드에 대한 특정 세부 정보가 포함되어야 합니다.