저작권 안내
- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
CoreOS 사용하기
이재홍 http://www.pyrasis.com 2014.08.02 ~ 2014.09.20
fleet 유닛 파일 템플릿 활용하기
systemd는 유닛 파일 하나로 여러 개의 인스턴스를 생성하는 템플릿 기능을 제공합니다. 여기에 fleet을 활용하면 유닛 파일 하나로 여러 노드에 유닛을 생성할 수 있습니다.
- 유닛 파일 템플릿의 파일명은
<유닛 이름>@.<확장자>
형식입니다. 예) hello@.service - 유닛 파일 템플릿으로 유닛을 생성할 때는
<유닛 이름>@<인스턴스 이름>.<확장자>
형식으로 생성합니다. 예) hello@world.service, hello@1.service
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 공유는 허용합니다.