저작권 안내
- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
CoreOS 사용하기
이재홍 http://www.pyrasis.com 2014.08.02 ~ 2014.09.20
fleet으로 유닛 실행하기
core-01에서 다음 내용을 hello.service 파일로 저장합니다. fleet로 실행하는 유닛 파일(.service)은 /etc/systemd/system 디렉터리가 아닌 다른 디렉터리에 있어도 상관없습니다.
~/hello.service
[Unit]
Description=Hello Service
Requires=docker.service
After=docker.service
[Service]
ExecStartPre=-/usr/bin/docker kill hello
ExecStartPre=-/usr/bin/docker rm hello
ExecStart=/usr/bin/docker run --name hello busybox /bin/sh -c "while true; do echo Hello World; sleep 1; done"
ExecStop=/usr/bin/docker stop hello
- Unit: 유닛 실행 설정입니다.
- Requires, After: Docker를 사용할 것이므로 docker.service를 설정합니다.
- Service: 각 상황에 따라 실행할 명령을 설정합니다.
- ExecStartPre: 메인 명령 실행 전의 준비 작업입니다.
docker kill hello
,docker rm hello
명령을 실행하여 hello 컨테이너가 실행되고 있다면 종료 후 삭제합니다. ExecStartPre=-처럼 =뒤에 -를 붙여주면 에러가 발생하더라도 그냥 넘어갑니다. 여기서 hello 컨테이너가 없을 때 컨테이너를 종료하거나 삭제하려고 하면 에러가 발생하기 때문에 반드시 -를 붙여줍니다. - ExecStart: 유닛이 시작될 때 실행할 메인 명령입니다. busybox 이미지로 hello 컨테이너를 생성하고 1초마다 Hello World를 출력합니다.
- ExecStop: 유닛이 종료될 때 실행할 명령입니다.
docker stop hello
명령을 실행하여 컨테이너를 정지합니다.
- ExecStartPre: 메인 명령 실행 전의 준비 작업입니다.
hello.service 파일이 있는 디렉터리에서 다음 명령을 실행합니다.
core-01
$ fleetctl start hello.service
Job hello.service launched on d80aaff5.../172.17.8.102
fleetctl start <유닛 파일>
형식입니다. 클러스터의 core-01, core-02, core-03 중에서 아무곳에 유닛이 실행됩니다. 저는 core-02(d80aaff5, 172.17.8.102)에 hello.service 유닛이 실행되었습니다.
fleetctl start
명령으로 유닛을 실행하면 hello.service 파일의 내용이 클러스터의 모든 노드에 공유됩니다.
기타 유닛 옵션
유닛 파일에서 docker pull
명령으로 이미지를 받을 때 시간이 오래 걸리면 유닛 실행이 실패하게 됩니다. 다음과 같이 TimeoutStartSec에 0을 설정하면 명령 실행 시간이 오래 걸리더라도 유닛 생성에 실패하지 않습니다.
[Service]
TimeoutStartSec=0
다음은 유닛이 비정상적으로 종료되었을 때 자동으로 재시작하는 옵션입니다. Restart에 always를 설정하면 계속 재시작합니다. RestartSec에 시간을 설정하면 재시작하기 전에 특정 시간 동안 대기합니다. 예) 5min 20s, 100ms, 10s
[Service]
Restart=always
RestartSec=5s
저작권 안내
이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.- 블로그, 게시판 등에 퍼가는 것을 금지합니다.
- 비공개 포스트에 퍼가는 것을 금지합니다.
- 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
- 링크 및 SNS 공유는 허용합니다.