1.이슈 내용
- 최근 EMR Cluster 에서 도커 이미지를 이용해 Spark - submit 실행하는 job 을 추가함.
- 테스트 시에는 문제가 되지 않았으나, 새벽 배치에서 장애 발생
2.장애 또는 에러 내용
- Docker inspect command : /usr/bin/docker inspect —format {{.State.ExitCode}} container_iD_appid_…..
- Exit code from docker inspect : 1
3.이슈 원인
- EMR 에서 Scale Out 시 Task 노드를 임의로 할당 받게 된다. (Spot instance 사용 중)
- Task 노드의 커널 아키텍쳐가 이미지 내 빌드된 프로세서 아키텍쳐와 호환이 안될 가능성이 있다.
- 내가 amd64 아키텍쳐로 빌드를 했는데 실제로 arm64 아키텍쳐의 노드 위에서 실행 될 경우..
- docker inspect 는 실행 전 이미지를 검사하는 단계로 보여진다.
4.해결방법
- buildx 를 이용하여 멀티 프로세서 아키텍쳐에 맞게 빌드한다.
- 참고로 buildx 를 이용할 때 빌드와 push 만 가능하다.
1. buildx 활성화 및 확인
$ docker buildx version
$ docker buildx ls
2. buildx 초기화 및 빌더 인스턴스 생성
$ docker buildx create --name multi-archi-builder
$ docker buildx use multi-archi-builder
$ docker buildx inpsect --bootstrap
-- bootstrap 은 초기화 프로세스 플래그
3. build 와 동시에 push 하기
$ docker buildx build --platform linux/arm64,linux/amd64 -t myapp:latest --push .
4. 이미지 확인하기
$ docker manifest inpsect [이미지]:[태그]
5.회고
- 사실 aws 코리아 기술자 분들과 미팅을 하면서,쿠버네티스 환경에서는 꼭 컨테이너 이미지의 멀티 아키텍쳐 빌드가 필요하다는 내용을 팁으로 들었었다. 그때는 잘 끄덕였는데.. 귀로만 흘려들었더니, 새벽 4시에 일어나 장애 대응을 해야 했던 결과를 맞았다.
최근 배치 장애도 잦고, 더 꼼꼼해야 겠다. 그리고 반성하자
'TroubleShooting' 카테고리의 다른 글
MWAA / sqlAlchemy 내 _rfc_1738_quote import 오류 (0) | 2022.10.18 |
---|---|
파이썬 클래스 멤버 변수의 tuple 코드 인식 실수 (0) | 2022.07.03 |
[grafana] organization 삭제로 인한 대시보드 삭제 이슈 (0) | 2022.04.16 |
[airflow] initdb 명령어 실행 시 werkzeug.utils 관련 패키지 이슈 (0) | 2021.06.17 |