CoreOS 사용하기

이재홍 http://www.pyrasis.com 2014.08.02 ~ 2014.09.20

fleet 유닛 파일 템플릿 활용하기

systemd는 유닛 파일 하나로 여러 개의 인스턴스를 생성하는 템플릿 기능을 제공합니다. 여기에 fleet을 활용하면 유닛 파일 하나로 여러 노드에 유닛을 생성할 수 있습니다.

  • 유닛 파일 템플릿의 파일명은 <유닛 이름>@.<확장자> 형식입니다. 예) hello@.service
  • 유닛 파일 템플릿으로 유닛을 생성할 때는 <유닛 이름>@<인스턴스 이름>.<확장자> 형식으로 생성합니다. 예) hello@world.service, hello@1.service


그림 15-25 fleet 유닛 파일 템플릿

core-01에서 다음 내용을 hello@.service 파일로 저장합니다.

~/hello@.service

[Unit]
Description=Hello Service
Requires=docker.service
After=docker.service

[Service]
ExecStartPre=-/usr/bin/docker kill hello-%i
ExecStartPre=-/usr/bin/docker rm hello-%i
ExecStart=/usr/bin/docker run --name hello-%i busybox /bin/sh -c "while true; do echo Hello World; sleep 1; done"
ExecStop=/usr/bin/docker stop hello-%i

[X-Fleet]
Conflicts=hello@*.service
  • %i: 인스턴스 이름입니다. @뒤에 오는 인스턴스 이름이 대입됩니다.
  • Conflicts: hello@*.service로 지정하여 유닛이 겹치지 않고 각각 다른 노드에 실행되도록 합니다.

다음 명령을 실행하여 hello@.service 파일을 클러스터에 저장합니다. 그리고 클러스터에 저장된 유닛 파일 목록을 출력합니다.

core-01

$ fleetctl submit hello@.service
$ fleetctl list-unit-files
UNIT            HASH    DSTATE
hello@.service  1aeee55 inactive
  • fleetctl submit <유닛 파일> 형식입니다. 유닛을 실행하지는 않고 유닛 파일의 내용을 클러스터에 저장만 합니다.
  • fleetctl list-unit-files 명령은 클러스터에 저장된 유닛 파일 목록을 출력합니다. 클러스터에 저장된 hello@.service 파일이 표시됩니다.

이제 다음 명령을 실행하여 유닛을 실행합니다.

core-01

$ fleetctl start hello@{1..3}.service
Unit hello@1.service launched on d80aaff5.../172.17.8.102
Unit hello@2.service launched on 6960c4ce.../172.17.8.103
Unit hello@3.service launched on b3318c7b.../172.17.8.101

fleetctl start <유닛 이름>@{시작 숫자…끝 숫자}.service 형식입니다. {1..3}과 같이 입력하면 1, 2, 3 인스턴스 3개를 생성합니다. fleetctl start hello@1.service처럼 유닛을 개별적으로 생성할 수도 있습니다. 명령을 실행하면 유닛이 특정 노드에 몰리지 않고 core-01, core-02, core-03에 각각 생성되었습니다.

systemd 지정자
hello@.service를 hello@1.service로 유닛을 실행했을 때

  • %n: 유닛 파일 전체 이름입니다. hello@1.service
  • %N: 확장자를 제외한 유닛 파일 이름입니다. hello@1
  • %p: @앞에 오는 유닛 이름입니다. hello
  • %i: @뒤에 오는 인스턴스 이름입니다. 1

저작권 안내

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

Published

30 November 2014