ECS에 amazonlinux2 환경을 구축할 때의 함정
5739 단어 AmazonLinux2systemdECS도커AWS
소개
여러분, 정말입니다. k. s. 로저스 야스몬입니다.
이번에는 얼마 전 구축한 ECS의 amazonlinux2 환경에서 컨테이너 인스턴스가 파괴된다는 함정에 빠졌기 때문에 현상 공유와 회피 방법을 쓰고 싶습니다.
전제
ECS에서 위의 전제로 httpd가 움직이는 컨테이너 만들기
우선 로컬로 구축
적당히 httpd가 움직이는 docker를 준비합니다
# amazon linux
FROM amazonlinux:2
# httpd24
RUN yum -y install httpd
RUN systemctl enable httpd.service
빌드 및 컨테이너 시작
$ docker build -t test:latest ./
$ docker run --privileged -d -t -p 8080:80 --name testapp test:latest /sbin/init
동작 확인
ECS에 배포
ECR을 만들어 이전에 만든 이미지 업로드
적절하게 클러스터 만들기
태스크 정의 작성
systemctl을 사용하기 위해 권한을 부여하고 명령으로
/sbin/init
를 지정합니다.작업 시작
동작 확인
함정
언뜻, 위까지 실행해 「어라? 할 수 있어?」라고 생각할지도 모릅니다만, 함정은 여기에서입니다
ECS를 이용하는 분들은 CI를 짜서 자동으로 배포할 수 있는 구조를 만들고 자주 이미지와 컨테이너가 업데이트된다는 운용을 하고 있는 것이 대부분이라고 생각합니다.
그렇다면 다음과 같이 동일한 구성으로 새 작업 정의를 만들고 수동으로 업데이트하십시오.
작업을 중지합니다.
정확히 동일한 내용으로 작업 정의를 만들고 시작합니다.
그러면 오류가 발생하고 중지됩니다.
오류 내용은
CannotStartContainerError: API error (500): cgroups: cannot find cgroup mount destination: unknown
글쎄. . . cgroup을 마운트하지 못하고 오류입니다. . .
여러가지 조사해 다음과 같은 기사를 찾아 대응하려고도 한다. . .
htp : // bg. 아오오오 r. jp / kk s06122015 - arma / r chi s / 10167213. HTML
원래, ECS의 인스턴스의
/sys/fs/cgroup
부하는 갓포. . .설명 된
sudo mkdir /sys/fs/cgroup/systemd
도 권한 오류로 실행할 수 없으며 systemd를 무리하게 만들고 마운트하는 것도 불가능했습니다.아무래도, 특권 부여(privileged)를 true로 해 버리면 첫회 기동은 하지만, 그 후 컨테이너를 갱신했을 때에 마운트 에러가 발생해, 이후 컨테이너가 일어나지 않게 되는 것 같다・・・
그리고 systemctl을 이용하려면 특권 부여(privileged)를 true로 해야 한다.
특권 부여(privileged)를 true로 하지 않고, systemctl을 사용할 수 있도록 하는 방법 등 여러가지 조사해 실험해 보았지만, 이 현상을 회피하는 방법은 없을 것 같았다.
회피 방법
그렇다면이 함정을 어떻게 피할 것인가 하면 docker 경험자는 핀으로 올 수 있지만 foreground 고정합니다.
또, 대부분의 경우 systemctl을 이용하고 싶은 경우는 복수의 서비스를 기동시키고 싶다고 하는 이유가 있다고 생각하므로, 이하와 같이 기술합니다.
# amazon linux
FROM amazonlinux:2
# httpd24
RUN yum -y install httpd php-fpm
CMD /bin/bash -c "httpd && php-fpm && tail -f /dev/null"
이렇게하면 systemctl을 사용하지 않으므로 권한 부여 (privileged)가 필요하지 않습니다.
따라서 컨테이너를 다시 만들 때 cgroup 마운트 오류가 발생하지 않는다는 느낌입니다.
보충이지만 Dockerfile에서 CMD를 지정했기 때문에 작업 정의에 지정한 명령
/sbin/init
은 더 이상 필요하지 않습니다.마지막으로
이번에는 ECS에 amazonlinux2를 구축했을 때 빠진 함정을 소개했습니다.
실제로 나 자신 이 함정에 2~3일 빠져서 systemctl은 이용하지 않는다는 결론에 이르렀습니다.
더 스마트한 해결책을 아는 분은 코멘트란에서 가르쳐 주셨으면 합니다!
Wantedly에서도 블로그 게시
Tech 블로그에 더해 회사 블로그 등도 하고 있으므로, 신경이 쓰이는 분은 꼭 들여다 봐 주세요.
htps //w w. 와서 dly. 코 m / 코 m 파니에 s / ks 로즈 rs
Reference
이 문제에 관하여(ECS에 amazonlinux2 환경을 구축할 때의 함정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yasumon/items/93f7bd975aae1c7b54ed텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)