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 명령을 실행하여 컨테이너를 정지합니다.

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 유닛이 실행되었습니다.


그림 15-22 fleet으로 유닛 실행

fleetctl start 명령으로 유닛을 실행하면 hello.service 파일의 내용이 클러스터의 모든 노드에 공유됩니다.

기타 유닛 옵션
유닛 파일에서 docker pull 명령으로 이미지를 받을 때 시간이 오래 걸리면 유닛 실행이 실패하게 됩니다. 다음과 같이 TimeoutStartSec에 0을 설정하면 명령 실행 시간이 오래 걸리더라도 유닛 생성에 실패하지 않습니다.

[Service]
TimeoutStartSec=0

다음은 유닛이 비정상적으로 종료되었을 때 자동으로 재시작하는 옵션입니다. Restart에 always를 설정하면 계속 재시작합니다. RestartSec에 시간을 설정하면 재시작하기 전에 특정 시간 동안 대기합니다. 예) 5min 20s, 100ms, 10s

[Service]
Restart=always
RestartSec=5s

저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

30 November 2014